绿色网站配色,建站免费建站平台,如何自己开发手机app,wordpress 评论去审核目录
1.DA转换原理
1.1基本概念
1.1.1DA的简介
1.1.2DA0832芯片
1.1.3PCF8591芯片
1.2代码
1.2.1DAC8053的代码
1.2.2PCF8951的代码
1.3仿真
1.3.1DAC0832的仿真
1.3.2PFC8951的仿真
2.AD转换原理
2.1AD的基本概念
2.1.1AD的简介
2.1.2ADC0809的介绍
2.1.3XPT2…目录
1.DA转换原理
1.1基本概念
1.1.1DA的简介
1.1.2DA0832芯片
1.1.3PCF8591芯片
1.2代码
1.2.1DAC8053的代码
1.2.2PCF8951的代码
1.3仿真
1.3.1DAC0832的仿真
1.3.2PFC8951的仿真
2.AD转换原理
2.1AD的基本概念
2.1.1AD的简介
2.1.2ADC0809的介绍
2.1.3XPT2046芯片介绍
编辑编辑2.2AD代码
2.2.1PFC8591代码
2.3仿真实验
1.DA转换原理
1.1基本概念
1.1.1DA的简介
DADigital to Analog数字-模拟转换将计算机输出的数字信号转换为模拟信号D/A转换一般由电阻解码网络、模拟电子开关、基准电压、运算放大器等组成。按电阻解码网络的组成形式将DA转换器分成有权电阻解码网络D/A转换器、T型电阻解码网络D/A转换器、倒T型电阻解码网络D/A转换器和开关树型电阻解码网络D/A转换器等。 DAC的分类
1从数码数上看有8位、10位、12位、16位、24位等。
2在输出形式上有电压输出型和电流输出型
3按输入是否含有锁存器分为内部无锁存器和内部有锁存器形式
4按数字量的输入形式分为并行总线D/A转换器和串行总线D/A转换器
5按转换时间分为超高速DAC(转换时间100ns)、较高速DAC(100ns~1us)、高速(1μs~10μs 中速DAC(10μS~100μs)、低速DAC(100us)等。
DAC的性能指标
1分辨率指AD/DA数字量的精细程度通常用位数表示。例如对于5V电源系统来说8位的AD可将5V等分为256份即数字量变化最小一个单位时模拟量变化5V/2560.01953125V所以8位AD的电压分辨率为0.01953125VAD/DA的位数越高分辨率就越高
2转换速度表示AD/DA的最大采样/建立频率通常用转换频率或者转换时间来表示对于采样/输出高速信号应注意AD/DA的转换速度
3建立时间建立时间是描述D/A转换器转换速度的参数表明转换时间长短。其值为从输入数字量到输出达到终值误差正负(1/2)LSB(最低有效位)时所需的时间。电流输出的转换时间较短而电压输出的转换器由于要加上完成I-V转换的时间因此建立时间要长一些。快速D/A转换器的建立时间可控制在1s以下。
4转换精度理想情况下转换精度与分辨率基本一致位数越多精度越高。但由于电源电压、基准电压、电阻、制造工艺等各种因素存在误差。严格地讲转换精度与分辨率并不完全一致。两个相同位数的不同的DAC,只要位数相同分辨率则相同但转换精度会有所不同。 1.1.2DA0832芯片
DAC0832芯片内部的框图
1DAC0832的内部结构如图所示内部有两级数据缓冲器(8位输入寄存器和8位DAC寄存器)和一个8位D/A转换器以及门控电路。内部无参考电源需外接输出电流型要获得电压输出需外加转换电路。各引脚含义如下 T型电阻网络DA转换器8位DA转换器 1当数字量D7~D0为1时开关将会移向1为0时将会开关在0 2由右边的电阻2R//2R的并联后的阻值为R再加上串联的电阻R形成2R的电阻。再依次与输入数据的高位 电阻并联得到总阻值为R了。因此总的电流为。 3进行分流操作时两个并联电阻的流经的电流是相等的串联的电流是两个并联电流之和。依次形成从D7~D0的电流位权。即D7的电流是D6电流的两倍最后合成总的输出电流。形成一个8位的二进制数
4最终的每一位电流的大小的计算公式为总的电流除以2的8次方
5当RefR时输出电压×即输出电压为Io1与反馈电阻的乘积
DAC的芯片引脚 写信号1写信号2片选信号数据传送控制信号输入线低电平有效。DI0~DI7(DI0为最低位)8位数字量输入端I-V转换时的外部反馈信号输入端内部己有反馈电阻Rfb,根据需要也可外接反馈电阻。模拟电流输出线1它是数字量输入为“1”的模拟电流输出端。输入数字量全为“1”时最大模拟电流输出线2它是数字量输入为“0”的模拟电流输出端常数基准电压输入线。电压范围为-10V~10V。工作电源输入端可接5V~15V电源。 AGND DGND 模拟地。最好与基准电压共地 数字地。 1当LE1,CS*0,WR1*0时即M11,第一级8位输入寄存器被选中。待转换的数字信号被锁存到第一级8位输入寄存器中。
2当XFER*0,WR2*0时第一级8位输入寄存器中待转换数字进入第二级8位DAC寄存器中。
1.1.3PCF8591芯片 PCF8591是具有I2C总线接口的8位A/D及D/A 转换器。PCF8591有4个模拟输入、1个模拟输出和1个I²C总线接口。PCF8591有3个地址引脚A0, A1和A2,用于硬件地址设定这允许在一条I2C总线上接入8个PCF8591器件。链接PCF8591I2C DA转换 实现PWM方波、三角波以及实现呼吸灯_哔哩哔哩_bilibiliPCF8591I2C DA转换 实现PWM方波、三角波以及实现呼吸灯是51单片机入门教程Proteus嵌入式开发入门实战视频教程2024新版的第21集视频该合集共计23集视频收藏或关注UP主及时了解更多相关视频内容。https://www.bilibili.com/video/BV1uN411M7PB/?p21spm_id_from333.880.my_history.page.clickDAC的芯片概述 AIN0~ AIN3 模拟信号输入管脚。 A0~ A2 硬件地址设定管脚 VDD 接电源2.5V6V正极 VSS 接电源2.5V6V负极即GND。 VREF 基准电源端 AOUT D/A 转换输出端 SDA I2C 总线的数据线 SCL I2C 总线的时钟线。 OSC 外部时钟输入端内部时钟输出端。EXT内部、外部时钟选择线使用内部时钟时EXT 接地。内部、外部时钟选择线使用内部时钟时EXT 接地。AGND模拟信号地
PFC8951的设备地址
PFC8951的D/A转换 1.2代码
1.2.1DAC8053的代码
//方波的生成代码
//单片机采用定时器定时中断时间常数决定方波高、低电平持续时间
void DAC_test_PWM()
{P20; //PWM波的低电平的时间即0VDelay_ms(50); //高电平持续时间P2255; //输出PWM的最大值即参考电压的5VDelay_ms(10); //低电平持续时间
}//单片机把初始数据0送DAC0832后数据不断增1增至0xff后再增1则溢出清“0”
//模拟输出又为0然后再重复上述过程如此循环则输出锯齿波。
//生成锯齿波
void DAC_Test_sawetooth_wave()
{unsigned int i;for(i0;i256;i){P2i;}
}//生成三角波
//单片机把初始数字量0送DAC0832后不断增1增至0xff后然后从0xff
//再把送给DAC0832的数字量不断减1减至0后再重复上述过程。
void DAC_Test_triangular_wave()
{int i;for(i0;i255;i){P2i;}for(i255;i0;i--){P2i;}
}//正弦表
unsigned char code sin[]{0x7F,0x82,0x85,0x88,0x8B,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA1,0xA4,0xA7,0xAA,0xAD
,0xB0,0xB3,0xB6,0xB8,0xBB,0xBE,0xC1,0xC3,0xC6,0xC8,0xCB,0xCD,0xD0,0xD2,0xD5,0xD7
,0xD9,0xDB,0xDD,0xE0,0xE2,0xE4,0xE5,0xE7,0xE9,0xEB,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4
,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE
,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6
,0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEB,0xE9,0xE7,0xE5,0xE4,0xE2,0xE0,0xDD,0xDB
,0xD9,0xD7,0xD5,0xD2,0xD0,0xCD,0xCB,0xC8,0xC6,0xC3,0xC1,0xBE,0xBB,0xB8,0xB6,0xB3
,0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B,0x98,0x95,0x92,0x8F,0x8B,0x88,0x85,0x82
,0x7F,0x7C,0x79,0x76,0x73,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x54,0x51
,0x4E,0x4B,0x48,0x46,0x43,0x40,0x3D,0x3B,0x38,0x36,0x33,0x31,0x2E,0x2C,0x29,0x27
,0x25,0x23,0x21,0x1E,0x1C,0x1A,0x19,0x17,0x15,0x13,0x12,0x10,0x0F,0x0D,0x0C,0x0A
,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08
,0x09,0x0A,0x0C,0x0D,0x0F,0x10,0x12,0x13,0x15,0x17,0x19,0x1A,0x1C,0x1E,0x21,0x23
,0x25,0x27,0x29,0x2C,0x2E,0x31,0x33,0x36,0x38,0x3B,0x3D,0x40,0x43,0x46,0x48,0x4B
,0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x73,0x76,0x79,0x7C};
//生成正弦波
void DAC_Test_sine_wave()
{unsigned int i;for(i0;i256;i){P2sin[i];}
}1.2.2PCF8951的代码
void PCF8951_DAC(unsigned char Data)
{I2C_Start(); //iic开始I2C_sendByte(0x90); //iic写信号I2C_ReceiveAck(); //等待一应答I2C_sendByte(0x40); //发送控制位I2C_ReceiveAck(); //等待应答I2C_sendByte(Data); //发送数据电压值I2C_ReceiveAck(); //等待应答I2C_end(); //iiC停止
}void PWM()
{PCF8951_DAC(255);Delay1us(10000);PCF8951_DAC(0);Delay1us(10000);
}
1.3仿真
1.3.1DAC0832的仿真 1.3.2PFC8951的仿真 2.AD转换原理
2.1AD的基本概念
2.1.1AD的简介
ADAnalog to Digital模拟-数字转换将模拟信号转换为计算机可操作的数字信号。AD转换通常有多个输入通道用多路选择开关连接至AD转换器以实现AD多路复用的目的提高硬件利用率 AD转换器的主要性能指标
1分辨率ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位或者说分辨率为满刻度FS的1/。 一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V×1/2.4mV。
2量化误差ADC把模拟量变为数字量用数字量近似表示模拟量这个过程称为量化。量化误差是ADC的有限位数对模拟量进行量化而引起的误差。实际上要准确表示模拟量ADC的位数需很大甚至无穷大。一个分辨率有限的ADC的阶梯状转换特性曲线与具有无限分辨率的ADC转换特性曲线直线之间的最大偏差即是量化误差。 3偏移误差偏移误差是指输入信号为零时输出信号不为零的值所以有时又称为零值误差假定ADC没有非线性误差则其转换特性曲线各阶梯中点的连线必定是直线这条直线与横轴相交点所对应的输入电压值就是偏移误差。
4满刻度误差满刻度误差又称为增益误差。ADC的满刻度误差是指满刻度输出数码所对应的实际输入电压与理想输入电压之差
5线性度线性度有时又称为非线性度它是指转换器实际的转换特性与理想直线的最大偏差。
6绝对精度在一个转换器中任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值称为绝对精度。对于ADC而言可以在每一个阶梯的水平中点进行测量它包括了所有的误差
7转换速率ADC的转换速率是能够重复进行数据转换的速度即每秒转换的次数。而完成一次A/D转换所需的时间包括稳定时间则是转换速率的倒数。
逐次逼近式ADC的转换原理 1 数字量由“逐次逼近寄存器SAR(shift arithmetic right)”产生。SAR使用“对分搜索法”产生数字量以8位数字量为例SAR首先产生8位数字量的一半即10000000B,试探模拟量Vi的大小若VnVi清除最高位若VnVi,保留最高位。在最高位确定后SAR又以对分搜索法确定次高位即以低7位的一半y1000000B(y为已确定位) 试探模拟量Vi的大小。在bit6确定后SAR以对分搜索法确定bit5位即以低6位的一半yy100000B(y为已确定位) 试探模拟量的大小。重复这一过程直到最低位bit0被确定转换结束。
2VN为参考电压的一半
2.1.2ADC0809的介绍
引脚的定义
1DAC输出的电压和通道选择开关的的输出电压进行比较最终输出一个电压到SAR中SAR通过大小来控制DAC的要输出的电压大小最终输出到8位三态锁存缓冲器 电压比较器 1输出数字量D7~D0×256。结果为整数
ADC0809的工作时序
2.1.3XPT2046芯片介绍
XPT2046的功能说明
1XPT2046是一款4线制电阻式触摸屏控制器内含12位分辨率125KHz转换速率逐步逼近型 A/D转换器。 XPT2046支持从1.5V到5.25V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置 除此之外还可以测量加在触摸屏上的压力。内部自带2.5V参考电压可以作为辅助输入、温度测量和电池监测之用电池监测的电压范围可以从0V到6V。XPT2046片内集成有一个温度传感器。 在 2.7V的典型工作状态下关闭参考电压功耗可小于 0.75mW。XPT2046 采用微小的封装形式TSSOP-16,QFN-16 和 VFBGA48。工作温度范围为-40℃85℃。与ADS7846、TSC2046、AK4182A完全兼容
XPT2046的主要特性
1工作电压范围为 1.5V5.25V
2 支持 1.5V5.25V 的数字 I/O 口
3内建 2.5V 参考电压源
4 电源电压测量0V~6V
5 内建结温测量功能
6 触摸压力测量
7 采用 3 线制 SPI 通信接口
8 具有自动省电功能
芯片引脚
1TSSOP16 封装 单端输入和差分输入
1单端输入单端输入只有一个输入引脚ADCIN,使用公共地GND作为电路的返回端ADC的采样值ADCIN电压-GND的电压(OV).这种输入方式优点就是简单缺点是如果Vin受到干扰由于GND电位始终是0V,所以最终ADC的采样值也会随着干扰而变化 2 差分输入差分输入比单端输入多了一根线最终的ADC采样值(ADCIN电压)(ADCIN-电压)由于通常这两根差分线会布在一起所以他们受到的干扰是差不多的输入共模干扰在输入ADC时会被减掉从而降低了干扰缺点就足投线复杂一些。而目需要VIN和VIN一两路反相的输入信号。 XPT2048的工作时序 2.2AD代码
2.2.1PFC8591代码 //ADC采集模拟量的函数unsigned int PCF8951_ADC(void)
{unsigned int Data;I2C_Start();I2C_sendByte(0x90); //寻找PFC8951的地址I2C_ReceiveAck(); //等待应答I2C_sendByte(0x00); //使用通道0来采集电压I2C_ReceiveAck();I2C_Start();I2C_sendByte(0x91); //发送地址读I2C_ReceiveAck(); DataI2C_ReceiveByte();//接收数据ADCI2C_SendACK(1);I2C_end();return Data;
}//主函数测量函数
int main()
{unsigned int voltage; //设置数字量unsigned int vol; //LCD_Init();while(1){voltagePCF8951_ADC(); //测量的模拟量进入单片机后转换的数字量volvoltage*5/0.255; //检测的电压放大1000倍LCD_WriteNum(1,1,vol/1000%10,1);//整数位LCD_WriteString(1,2,.); //.点位LCD_WriteNum(1,3,vol/100%10,1); //检测的电压的小数位的第一位LCD_WriteNum(1,4,vol/10%10,1); //检测的电压的小数位的第二位LCD_WriteNum(2,1,voltage,4); //检测电压的数字量}}
2.3仿真实验
1POT-HG 2电压表DC Voltmeter