资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
第11页 / 共28页
第12页 / 共28页
第13页 / 共28页
第14页 / 共28页
第15页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2019/12/6,#,PCF8591的介绍,第六组,PCF8591介绍,程序构成,例子原理图及程序,Click to add title in here,1,2,3,目录,PCF8591介绍,PCF8591的介绍,:,PCF8591 是单电源,低功耗8 位CMOS 数据采集器件,具有4 个模拟输入、一个输出和一个串行I2C 总线接口。3 个地址引脚A0、A1 和A2 用于编程硬件地址,允许将最多8 个器件连接至I2C总线而不需要额外硬件。PCF8591由于其使用的简单方便和集成度高,在单片机应用系统中得到了广泛的应用。,特点:,1,单电源供电,2,工作电压:2.5 V 6 V,3,I2C 总线串行输入/输出,4,通过 3 个硬件地址引脚编址,5,采样速率取决于 I2C 总线,传输速率决定,6 4 个模拟输入可编程为单端或差分输入,7 自动增量通道选择,8 8 位逐次逼近式A/D 转换,PCF8591介绍,(,1),首先发出“启动信号”信号,S,。当,S,由高变低时,“逐次逼近寄存器,SAR”,清,0,,,DAC,输出,Vo=0,,“比较器”输出,1,。当,S,变为高电平时, “控制电路”使,SAR,开始工作。,(,)SAR,首先产生,8,位数字量的一半,即,10000000B,试探模拟量的,Vi,大小,若,VoVi,,“控制电路”清除最高位,若,VoVi,保留最高位。,(,),在最高位确定后,,SAR,又以对分搜索法确定次高位,即以低,7,位的一半,y1000000B(y,为已确定位,),试探模拟量,Vi,的大小。在,bit6,确定后,,SAR,以对分搜索法确定,bit5,位,即以低,6,位的一半,yy100000B(y,为已确定位,),试探模拟量,Vi,的大小。重复这一过程,直到最低位,bit0,被确定。,(4),在最低位,bit0,确定后,转换结束,“控制电路”发出“转换结束”信号,EOC,。该信号的下降沿把,SAR,的输出锁存在“缓冲寄存器”里,从而得到数字量输出。 从转换过程可以看出: 启动信号为负脉冲有效。 转换结束信号为低电平。,应用:,1 闭环控制系统,2 用于远程数据采集的低功耗转换器,3 电池供电设备,4 在汽车、音响和 TV 应用方面的模拟数据采集,PCF8591介绍,管脚定义及原理图:,AIN0-AIN3:模拟输入(A/D转换)。,AOUT:模拟输出(D/A转换)。,A0-A1:硬件设备地址。,GND:电源负极地,VREF:参考电压输入。,EXT:振荡器输入时,内部/外部的切换开关。,OSC:振荡器输入/输出。,SCL: I2C BUS时钟输入。,SDA:I2C BUS 数据输入/输出。,AGND:模拟地,模拟信号和基准电源的参考地,PCF8591介绍,内部框图:,PCF8591介绍,PCF8591介绍,地址:,I2C 总线系统中的每一片PCF8591 通过发送有效地址到该器件来激活。该地址包括固定部分和可编程部分。可编程部分必须根据地址引脚A0、A1 和A2 来设置,因此I2C系统中最多可接 =8个PCF8591。在I2C 总线协议中地址必须是起始条件后作为第一个字节发送。地址字节的最后一位是用于设置以后数据传输方向的读/写位1为读操作,0为写操作。,控制字:,D0-D1 用于4个通道设置,D2 自动增益选择(有效位为1),D5 D4 模拟量输入选择,00 4路单端输入,01 3路差分输入,10 单端与差分输入,11 2路差分输入,PCF8591介绍,PCF8591介绍,AD的差分输入与单端输入:,单端输入,输入信号均以共同的地线为基准.这种输入方法主要应用于输入信号电压较高(高于1 V),信号源到模拟输入硬件的导线较短,且所有的输入信号共用一个基准地线.如果信号达不到这些标准,此时应该用差分输入.对于差分输入,每一个输入信号都有自有的基准地线;由于共模噪声可以被导线所消除,从而减小了噪声误差.,单端输入时, 是判断信号与 GND 的电压差. 差分输入时, 是判断两个信号线的电压差.,信号受干扰时, 差分的两线会同时受影响, 但电压差变化不大. (抗干扰性较佳) 而单端输入的一线变化时, GND 不变, 所以电压差变化较大. (抗干扰性较差),控制字:,发送到 PCF8591 的第二个字节将被存储在控制寄存器,用于控制器件功能。控制寄存器的高半字节用于允许模拟输出,和将模拟输入编程为单端或差分输入。低半字节选择一个由高半字节定义的模拟输入通道。如果自动增量(auto-increment)标志置1,每次A/D 转换后通道号将自动增加。,PCF8591介绍,PCF8591介绍,A/D 转换:,A/D 转换器采用逐次逼近转换技术。在A/D 转换周期将临时使用片上D/A 转换器和高增益比较器。一个 A/D 转换周期总是开始于发送一个有效读模式地址给PCF8591 之后。A/D 转换周期在应答时钟脉冲的后沿被触发,并在传输前一次转换结果时执行,。,一旦一个转换周期被触发,所选通道的输入电压采样将保存到芯片并被转换为对应的8 位二进制码,。,转换结果被保存在ADC 数据寄存器等待传输。如果自动增量标志被置1,将选择下一个通道。,A/D转换时序图:,PCF8591介绍,在读周期传输的第一个字节包含前一次读周期的转换结果代码。以上电复位,之后读取的第一个字节是0x80。,D/A转换:,发送给 PCF8591 的第三个字节被存储到DAC 数据寄存器,并使用片上D/A 转换器转换成对应的模拟电压。这个D/A 转换器由连接至外部参考电压的具有256 个接头的电阻分压电路和选择开关组成。接头译码器切换一个接头至DAC 输出线。模拟输出电压由自动清零单位增益放大器缓冲。这个缓冲放大器可通过设置控制寄存器的模拟输出允许标志来开户或关闭。在激活状态,输出电压将保持到新的数据字节被发送。,PCF8591介绍,D/A转换时序图:,PCF8591介绍,程序构成,PCF8591,的写入,第一个字节是器件地址和读写控制,第二个字节被存到控制寄存器,用于控制器件功能。,第三个字节被存储到,DAC,数据寄存器,并使用片上,D/A,转换器转换成对应的模拟电压。(所以不输入,D/A,时,可以不用输入。),PCF8591,发送一个字节的程序,/*,*,函数名,: Pcf8591SendByte,*,函数功能,:,写入一个控制命令,* 输入,: channel,(转换通道),* 输出,:,无,*,/,void Pcf8591SendByte(unsigned char channel),I2cStart();,I2cSendByte(WRITEADDR);/,发送写器件地址,I2cSendByte(0x40|channel);/,发送控制寄存器,I2cStop();,PCF8591,的读取,读取的第一个字节是包含上一次转换结果,将上一个字节读取时,才开始进行这次转换的采样。,读取的第二个字节才是这次的转换结果。,所以读取转换结果的步骤是:发送转换命令,将上次的结果读走,然后等一会儿,然后读取结果。,PCF8591,读取一个字节的程序,/*,*,函数名,: Pcf8591ReadByte,*,函数功能,:,读取一个转换值,* 输入,:,*,输出,: dat,*/,unsigned char Pcf8591ReadByte(),unsigned char dat;,I2cStart();,I2cSendByte(READADDR);/,发送读器件地址,dat=I2cReadByte();/,读取数据,I2cStop(); /,结束总线,return dat;,PCF8591,发送一次转换的程序,/*,*,函数名,: Pcf8591DaConversion,*,函数功能,: PCF8591,的输出端输出模拟量,* 输入,: value,(转换的数值),* 输出,:,无,* *,/,void Pcf8591DaConversion(unsigned char value),I2cStart();,I2cSendByte(WRITEADDR);/,发送写器件地址,I2cSendByte(0x40);/,开启,DA,写到控制寄存器,I2cSendByte(value);/,发送转换数值,I2cStop();,例子原理图及程序,例子:,* 实 验 名 : AD显示试验,* 实验说明 : 使用LCD1602显示AD读取到的各个数值,说明:电压值=读取值*分辨率。,原理图:,例子原理图及程序,热敏电阻,光敏电阻,例子原理图及程序,程序(采用C51):,#include,#includei2c.h,#includelcd.h,/-定义PCF8591的读写地址-/,#define WRITEADDR 0x90 /写地址,#define READADDR 0x91 /读地址,/-声明全局函数-/,void Pcf8591SendByte(unsigned char channel);,unsigned char Pcf8591ReadByte();,void Pcf8591DaConversion(unsigned char value);,例子原理图及程序,void main(),unsigned int adNum5;,float value0;,LcdInit();,while(1),/-显示电位器电压-/,Pcf8591SendByte(0); /发送电位器转换命令,adNum0=Pcf8591ReadByte()*2;/将前一次转换结果读走,LcdWriteCom(0x80+0x46); /发送显示坐标,LcdWriteData(0+adNum3/1000); /发送显示数据,LcdWriteData(0+adNum3%1000/100);,LcdWriteData(0+adNum3%100/10);,LcdWriteData(0+adNum3%10);,Pcf8591SendByte(1); /发送热敏转换命令,adNum0=Pcf8591ReadByte()*2;/读取电位器转换结果,value0=adNum0/2*0.01953; /转为电压值,adNum0=value0*100; /保留两位小数,LcdWriteCom(0x80);,LcdWriteData(0+adNum0%1000/100);,LcdWriteData(.);,LcdWriteData(0+adNum0%100/10);,LcdWriteData(0+adNum0%10);,LcdWriteData(V);,Pcf8591SendByte(2); /发送光敏转换命令,adNum1=Pcf8591ReadByte()*2; /ADC1读取热敏,例子原理图及程序,LcdWriteCom(0x86);,LcdWriteData(0+adNum1/1000);,LcdWriteData(0+adNum1%1000/100);,LcdWriteData(0+adNum1%100/10);,LcdWriteData(0+adNum1%10);,Pcf8591SendByte(3); /发送外部输入电压转换命令,adNum2=Pcf8591ReadByte()*2; /ADC2读取光敏,LcdWriteCom(0x80+0x40);,LcdWriteData(0);,LcdWriteData(0+adNum2/1000);,LcdWriteData(0+adNum2%1000/100);,LcdWriteData(0+adNum2%100/10);,LcdWriteData(0+adNum2%10);,adNum3=Pcf8591ReadByte()*2; /ADC3读取外部输入电压,adNum4=adNum0;,Pcf8591DaConversion(adNum4/2); /DAC 数模转换,例子原理图及程序,/*,*,函 数 名,: Pcf8591SendByte,*,函数功能,:,写入一个控制命令,* 输 入,: channel,(转换通道),* 输 出,:,无,*,/,void Pcf8591SendByte(unsigned char channel),I2C_Start();,I2C_SendByte(WRITEADDR, 1); /,发送写器件地址,I2C_SendByte(0x40|channel, 0); /,发送控制寄存器,I2C_Stop();,/*,*,函 数 名,: Pcf8591ReadByte,*,函数功能,:,读取一个转换值,* 输 入,:,无,* 输 出,: dat,*/,unsigned char Pcf8591ReadByte(),unsigned char dat;,I2C_Start();,I2C_SendByte(READADDR, 1);/,发送读器件地址,dat=I2C_ReadByte(); /,读取数据,I2C_Stop(); /,结束总线,return dat;,例子原理图及程序,/*,*,函 数 名,: Pcf8591DaConversion,*,函数功能,: PCF8591,的输出端输出模拟量,* 输 入,: value,(转换的数值),* 输 出,:,无,*,/,void Pcf8591DaConversion(unsigned char value),I2C_Start();,I2C_SendByte(WRITEADDR, 1);/,发送写器件地址,I2C_SendByte(0x40, 1); /,开启,DA,写到控制寄存器,I2C_SendByte(value, 0); /,发送转换数值,I2C_Stop();,谢谢,观赏,
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6