利用8位da,利用8位补码计算13-10

 admin   2024-01-31 22:20   38 人阅读  0 条评论

1)实验正点原子先锋FPGA开发板


2)摘自《开拓者FPGA开发指南》更多信息请关注微信正点原子


3)全套实验源码+说明书+视频下载地址


第31章AD/DA实验


PCF8591是一款具有I2C总线接口的8位AD/DA转换芯片。它们由于功耗低、控制简单、封装小而被广泛应用。


用于远程数据采集、电力监控和其他应用的低功耗转换器。本章我们将使用FPGA开发板。


PCF8591器件实现AD/DA转换。


本章由以下部分组成


第311章PCF8591介绍


第312章实验任务


313硬件设计


314编程


315下载确认


PCF8591简介


PCF8591是一款单片集成、单电源、低功耗8位CMOS数据采集和转换器件。


它具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的功能包括多路复用模拟输入。


输入、片内跟踪保持、8位AD转换和8位DA转换,最大转换速度取决于I2C。


总线的最高速度。


PCF8591内部功能模块框图如图3111所示。


图3111PCF8591功能框图


它使用I2C总线配置状态寄存器,然后将数模转换数据发送到DAC。


数据寄存器。片上数模转换器将其转换为相应的模拟电压。片上DAC


它由连接到外部参考电压的256端子电阻分压器电路和选择器开关组成。连接器解码器开关1


通过AOUT接口将连接器连接到DAC输出线,如下图3112所示。


图3112DAC电阻电路。


片上DAC还可与逐次逼近ADC结合使用。为了在AD转换进行时保持DA转换的电压输出,该器件


配备采样保持电路。


AIN0~AIN3为复用模拟输入接口。外部模拟信号通过多个通道。


模拟输入接口复用后,通过比较器进行采样维护和采样。


使用逐次逼近变换技术将其转换为数字信号。


PCF8591采用I2C总线协议与控制器进行通信,I2C总线协议的详细介绍请参考


参见“EEPROM读写实验”。PCF8591的设备地址由固定部分和可编程部分组成。可编辑的


程序部分根据地址引脚A0、A1、A2进行设置,第8位为读写控制位R/W,格式如下图。


图3113设备地址格式示意图


传输完设备地址和读写控制位后,传输控制字。PCF8591使用以下方式将控制字存储在控制寄存器中


控制设备功能。控制字格式如下


图3114控制字格式图


控制字的位6用于启用模拟输出,位5和4用于对模拟输入进行编程。当第5拍时


如果第四位为00,则AIN0~AIN3为四个单端输入,如果为01,则AIN0~AIN3为三个差分输入,如果为10,则为AIN0。


AIN3至AIN3是两个单端输入和一个差分输入,对于11,AIN0至AIN3是两个差分输入。在这个实验中,我们使用了四个单打。


终端输入。第二位是自增标志,该位为高电平有效。当自增标志位设置为1时,通道号自动增加


运动增加。如果您选择的输入通道不存在,则将分配最大的可用通道编号。


启用后,选择的下一个通道将始终是通道0。位1和0用于选择通道号。00是通道0,01是通道号。


是通道1,10是通道2,11是通道3。位7和3保留供将来使用,应设置为0。电源重置


之后,控制寄存器中的所有位都将为0。


进行DA转换时,发送控制字后,发送待转换的8位数据,并将这8位数据存储在PCF8591中。


该值存储在DAC数据寄存器中,并使用片上DA转换器转换为相应的模拟电压输出。转换电压如图3115所示。


标记


图3115DA转换电压


图3116DA转换时序图


在DA转换时序图中,您可以看到转换数据的第一个字节被传输。


当PCF8591发送响应信号时,DAC仍会输出之前转换的值,PCF8591发送响应信号后,DAC开始输出相应的模拟值。


伪电压。


当开始AD转换时,AD转换周期始终通过向PCF8591发送有效的读取模式命令来启动。


AD转换周期在每个确认时钟脉冲的后沿触发,并且在当前AD数据寄存器的数据传输期间执行转换。


其工作原理如下图3117所示。


图3117AD转换时序图


在图3117中,DATABYTE0是当前存储在ADC寄存器中的值,即第一个


这是转换前的值。当发送DATABYTE0时,PCF8591对所选模拟输入通道的输入电压进行采样,并将其转换为相应的电压。


8位二进制码是DATABYTE1的数据。转换结果存储在ADC数据寄存器中。上电复位后,ADC发送


寄存器中的数据默认为0x80,因此读取的第一个ADC数据为0x80。


本实验采用单端输入,转换特性如下图所示。


图3118单端输入的AD转换特性。


可见,转换精度Vlsb与参考电压VREF和模拟地AGND有关,ADC转换的数据也与转换有关。


这与交换准确性有关。AGND引脚应连接到系统模拟地,因此通常为0。


实验任务


本节的实验工作是在PioneerFPGA开发板上使用PCF8591模块实现数模和模数转换。FPGA输出


0到255的数字信号经过DAC转换得到模拟信号。然后我们使用ADC来采集模拟信号并


设定的电压值显示在数码管上。


硬件设计


Trailblazer开发板的PCF8591接口部分示意图如图3131所示。


图3131PCF8591接口原理图


上图可以看到,设备地址的可编程引脚全部接地,所以PCF8591的设备地址为


7:48。参考电压为33V,AGND接地,因此AD转换精度Vlsb=3


3-0


256


001289,转换后的值为


徒劳的


=256



三。


对于实验工作,DA转换输出引脚AOUT应连接到AD输入引脚。这里我们选择


AIN0,对应的控制字设置为8'h40。


本实验中各端口信号引脚分配如下表所示。


表3131ADC模数DAC数模转换实验引脚分配


编程


根据实验工作,可以粗略规划系统的控制过程。FPGA首先通过I2C总线写入PCF8591。


输入DA转换数据后,从PCF8591中读取AD转换值,并将其转换为实际的模拟电压。


并用数码管显示出来。系统功能框图如下


图3141ADC模数DAC数模转换系统框图。


程序中各模块的端口及信号连接如图3142所示。


图3142顶部模块原理图


顶层模块实例化IIC驱动模块、PCF8591AD、DA转换模块。


共有三个模块数码管驱动模块。并实现各模块的控制和数据信号的交互。PCF8591AD


DA转换模块调用IIC驱动模块与PCF8591通信,将处理后的AD值发送给数码管显示。


PCF8591DA、AD转换模块调用IIC驱动模块实现DA、AD转换。


然后将读取的AD值转换为模拟电压并传输至数码管驱动模块进行显示。


IIC驱动模块PCF8591采用IIC协议,因此采用IIC驱动模块来实现FPGA。


PCF8591之间的通信。


数码管驱动模块数码管驱动模块显示AD转换得到的电压值。


顶层模块的代码是


1个模块adda_top


2//系统时钟


3输入sys_clk,//系统时钟


4inputsys_rst_n,//复位系统


5


6//PCF8591接口


7输出scl,//i2c时钟线


8输入SDA,//I2C数据线


9


10//用户界面


11output[5:0]sel,//选择数码管位


12output[7:0]seg_led//选择数码管段


13;


14


15//参数定义


16参数SLAVE_ADDR=739;b0;//字地址位控制参数16b/8b


18参数CLK_FREQ=2639;d250_000;//I2CSCL时钟频率


20个参数POINT=6


54SLAVE_ADDRSLAVE_ADDR,//从机地址从机地址,这里输入,方便参数传递


55CLK_FREQCLK_FREQ,//i2c_dri模块驱动时钟频率CLK_FREQ


56I2C_FREQI2C_FREQ//I2CSCL时钟频率


57u_i2c_dri


58//全局时钟


59clksys_clk,//i2c_dri模块的驱动时钟CLK_FREQ


60rst_nsys_rst_n,//信号复位


61//i2c接口


62i2c_execi2c_exec,//I2C触发运行信号。


63bit_ctrlBIT_CTRL,//设备地址位控制16b/8b


64i2c_rh_wli2c_rh_wl,//I2C读写控制信号


65i2c_addri2c_addr,//I2C设备内部地址


66i2c_data_wi2c_data_w,//I2C要写入的数据


67i2c_data_ri2c_data_r,//I2C读取的数据


68i2c_donei2c_done,//我2C操作一气呵成


69sclscl,//I2CSCL时钟信号


70sdasda,//I2CSDA信号


71//用户界面


72dri_clkclk//I2C操作时钟


73;


74


75//动态数码管显示模块示例


76Seg_Redu_Seg_Red


77//模块时钟


78clksys_clk,//时钟信号


79rst_nsys_rst_n,//信号复位


80//seg_led接口


81selsel,//位选择


82seg_ledseg_led,//选择段


83//用户界面


84datanum,//显示值


85点POINT,//小数点具体显示位置从高到低,高位有效。


86en139;b0//符号位


88;


89


90端模块


顶层模块主要完成其他模块的实例化,包括I2C驱动

一、怎么用51单片机编写正弦波,有程序的更好,谢谢?


通过量化从0到255的正弦波周期的幅度并将这256个值存储在程序空间中,微控制器定期按顺序拉出这些值并将它们发送到DA转换器。对DA输出进行低通滤波,得到正弦波。为了节省空间,您可以利用正弦波的对称性。如果您只存储1/4周期数据,然后运行一个简单的算法,您可以获得正弦波。


如果你还想知道更多的利用8位da和利用8位补码计算13-10的详细内容,记得关注收藏本站。

本文地址:http://eptisonshop.com/post/34752.html
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?