利用8位da,利用8位补码计算13-10
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的详细内容,记得关注收藏本站。
发表评论