tag 标签: da转换器

相关博文
  • 热度 5
    2023-3-31 14:29
    1319 次阅读|
    0 个评论
    使用D/A转换器灵活控制电压并使用Arduino输出模拟信号的方法 Arduino具有输出数字信号和PWM信号等功能,但不具备输出模拟信号的功能。这次,我们将为您介绍能够实现这种模拟信号输出的D/A转换器。 目录 什么是D/A转换器? 如何通过Arduino使用D/A转换器? 尝试用Arduino控制D/A转换器 连接设备数字和人类模拟的桥梁——D/A转换器 1. 什么是D/A转换器? 数字信号是由二进制数字0和1表示的信号。在电子电路领域,有时也用“LOW/HIGH”或“ON/OFF”来表示。而自然界中的现象和人类能够感知的信号都属于模拟信号。模拟信号的特点是其大小、时间和数量是连续的。 D/A转换器是一种能够将数字信号转换为模拟信号并输出的转换器。 音频和视频属于模拟信号。然而,近年来,音频处理和图像、视频处理开始需要数字信号了。处理模拟信号时不支持滤波处理和压缩,而数字信号则支持。将处理后的数字信号转换回模拟信号就需要用到D/A转换器。 2. 如何通过Arduino使用D/A转换器? Arduino包括Arduino Uno、Arduino Leonardo和Arduino Nano等多种产品。 Arduino Due是内置D/A转换器的Arduino之一。不过Due的外形与Arduino Uno不同,工作电压为3.3V,使用方法也有所不同。 如果要使用已经很普及的Arduino Uno来输出模拟信号的话,就需要外置D/A转换器IC。 3. 尝试用Arduino控制D/A转换器 这次,我们不使用内置D/A转换器的扩展板,而是尝试将D/A转换器IC直接连接到Arduino,看看能否输出模拟信号。我们使用的是ROHM的D/A转换器IC“BH2219FVM”(8bit分辨率,双通道)。 由于BH2219FVM为MSOP8封装,所以我们将使用转换板来使其适配万用板。 与I2C和SPI方式的D/A转换器不同,这种DA转换器通过三线制串行通信运行。由于它是自有方式,并不符合特定协议,因此需要自己创建串行通信处理,以便D/A转换器在草图中正常工作。 一边查看BH2219FVM的技术规格书一边与Arduino连接。将示波器探头连接到输出引脚并确认波形 BH2219FVM的技术规格书中提供了详细的使用方法。除了最大额定值和电气特性外,技术规格书中还提供怎样施加信号才工作的操作规范,需要一边阅读这些内容一边思考处理方法。 BH2219FVM的控制方法很简单。将输出模拟信号的端口(4bit)和8bit数据(4bit+8bit=12bit)以1bit为单位依次传输至DI引脚。BH2219FVM在CLK引脚的上升沿读取DI引脚。12bit传输完成后,如果LD引脚ON,则输出与数据对应的模拟信号。 下面以向AO1端口输出2.5V电压为例进行说明。 根据上表“通道设置(BH2219FVM)”,前4位表示“AO1端口”的固定值是“0000”。 接下来的数据是表示“2.5V”的8位值,通过 “256 × 输出电压 ÷ 电源电压 = 数据” 进行计算。结果是: “256 × 2.5 ÷ 5 = 128”。 由于2.5V是“电源电压的一半”,所以数据是“8位能表示的数字(256)的一半”,也就是“128”。用二进制表示时,128是“10000000”。 通过使DI引脚按照CLK引脚ON的时序依次ON/OFF(1/0),将“0000”和“10000000”发送给BH2219FVM。最后,只要使LD引脚ON、OFF,BH2219FVM即可输出2.5V的模拟信号。 下面的草图是通过串行通信将数据从Arduino发送至BH2219FVM,并将“锯齿波”输出至BH2219FVM的AO1引脚。 #define LD 8 #define CLK 7 #define DI 6 boolean D ; //将输入的数值转换为二进制并保存在数组D0~D7中 int binary(int out) { int i = 0; for (i = 0; i < 8; i++) { D = out % 2; out = out / 2; } } //将输出端口指定结果保存在数组D8~D11中 int chSelect(int outPin) { int i; if (outPin == 1) { for (i = 8; i < 12; i++) { D = LOW; } } else if (outPin == 2) { D = HIGH; for (i = 9; i < 12; i++) { D = LOW; } } } //将数组输出到DAC void outConfirm() { int i; = 0; i--) { digitalWrite(DI, D ); digitalWrite(CLK, HIGH); digitalWrite(DI, LOW); digitalWrite(CLK, LOW); } digitalWrite(LD, HIGH); digitalWrite(LD, LOW); } //将输出值和输出端口传递给每个变量 int operationOut(int value, int ch) { binary(value); chSelect(ch); outConfirm(); } void setup() { //将DA转换器用的引脚初始化 pinMode(LD, OUTPUT); pinMode(CLK, OUTPUT); pinMode(DI, OUTPUT); digitalWrite(LD, LOW); } void loop() { int i; //输出锯齿波 for (i = 0; i <= 255; i++) { operationOut(i, 1); //固定为AO1输出 } } 这个草图更注重易于理解,所以效率并不是非常好,转换周期有点慢。 下面对草图中的每块工作逐一进行解释。 #define LD 8 #define CLK 7 #define DI 6 boolean D ; 首先,将要连接的D/A转换器的引脚和Arduino的引脚编号建立关联。LD是引脚8,CLK是引脚7,DI是引脚6。接下来,定义了数组D,用来保存要发送到DI引脚的12bit信息。为了保存12bit分别对应的0/1,需要12个数组元素。由于只保存0和1,所以我们使用boolean数据类型。 void setup() { //将DA转换器用的引脚初始化 pinMode(LD, OUTPUT); pinMode(CLK, OUTPUT); pinMode(DI, OUTPUT); digitalWrite(LD, LOW); } 通过setup函数来设置要使用的引脚的工作。三个引脚都用于输出。在setup函数中将LD引脚指定为LOW,旨在防止其状态不稳定。 void loop() { int i; //输出锯齿波 for (i = 0; i <= 255; i++) { operationOut(i, 1); //AO1出力 } } 通过loop函数,将“要输出的数据”和“端口编号”传递给operationOut函数(该函数用来将信号输出至后述的D/A转换器)。对于“要输出的数据”,使用for语句设置了从0到255逐步增加的值。由于每次调用loop函数时都会重复该工作,因此输出的电压是“锯齿波”。 int operationOut(int value, int ch) { chSelect(ch); binary(value); outConfirm(); } 通过operationOut函数已将参数传递给执行实际处理的函数。然后调用三个函数:将端口编号(高4位)扩展为0或1的chSelect函数、将要输出的数据(低8位)扩展为0或1的binary函数、以及将数组D的内容传输给D/A转换器的outConfirm函数。 int chSelect(int outPin) { int i; if (outPin == 1) { for (i = 8; i < 12; i++) { D = LOW; } } else if (outPin == 2) { D = HIGH; for (i = 9; i < 12; i++) { D = LOW; } } } 通过chSelect函数进行高4位的操作。当从参数中指定端口编号1时,0被保存在数组D的元素8到元素11中。当从参数中指定端口编号2时,1被保存在数组D的元素8中,0被保存在元素9到元素11中。 int binary(int out) { int i = 0; for (i = 0; i < 8; i++) { D = out % 2; out = out / 2; } } 通过binary函数将传来的十进制数转换为8位二进制数,并将其保存在D 到D 中。在二进制转换中多用该技术。通过for语句重复执行“求除以2后的余数(最低位是0还是1?)、除以2(舍去最低位)”,以“从最低位依次转换为二进制数”。 void outConfirm() { int i; = 0; i--) { digitalWrite(DI, D ); digitalWrite(CLK, HIGH); digitalWrite(DI, LOW); digitalWrite(CLK, LOW); } digitalWrite(LD, HIGH); digitalWrite(LD, LOW); } 通过最后的outConfirm函数,将数组D中的数据传输给D/A转换器并输出模拟信号。 数组D中0/1的排列顺序与传输给D/A转换器时的顺序相反。因此,for语句从11到0按降序循环,并以正确的顺序输出数组D的内容。在循环中,也同时执行CLK处理。for语句结束后,当加上LD引脚的上升沿信号时,将从D/A转换器输出与传输数据对应的模拟信号。 下面是用示波器观测到的每个点的电压图。 用Arduino使BH2219FVM工作时的波形,输出了来自D/A转换器输出引脚的19Hz锯齿波。 查看DI引脚(上)和CLK引脚(下)的波形。可以看到DI引脚是如何根据CLK的动作进行ON/OFF的。 将波形放大,可以看到信号是如何被发送的。图像显示180的信号被发送到D/A转换器的AO1引脚。根据该信号输出3.52V的电压。 4. 连接设备数字和人类模拟的桥梁——D/A转换器 随着数字化的进步,D/A转换器被广泛应用于AV设备、通信设备、电机驱动设备等各种产品中。 通过在Arduino中增加使用了D/A转换器的模拟信号处理功能,使其能够在各种场景中大显身手 在本文的案例中,数据传输方式可能看起来有点复杂,但如果使用支持I2C或SPI等通用数据传输标准的D/A转换器,用起来就更轻松、更简单了。在您需要模拟输出的时候,不妨尝试一下D/A转换器! 来源:techclass
相关资源
  • 所需E币: 3
    时间: 2019-12-25 23:04
    大小: 113.04KB
    上传者: 238112554_qq
    本应用指南说明了如何利用TMS320F240DSP评估模块的12位D/A转换器实现一个2通道的正弦波发生器。……
  • 所需E币: 3
    时间: 2019-12-25 21:11
    大小: 27KB
    上传者: 微风DS
    用单片机设计A/D、D/A转换器……
  • 所需E币: 5
    时间: 2019-12-28 23:15
    大小: 111.36KB
    上传者: 16245458_qq.com
    D/A转换器应用方案……
  • 所需E币: 4
    时间: 2019-12-30 10:28
    大小: 57.5KB
    上传者: 2iot
    介绍了TQ6122芯片的结构、原理,给出了它的典型应用电路。……
  • 所需E币: 5
    时间: 2019-12-25 15:38
    大小: 216.07KB
    上传者: givh79_163.com
    在线性负反馈恒流源基础上,设计了一种新的数控高精度恒流源.该恒流源使用新型微处理器对电流源负载电流进行采样,使用PID算法在数字域对采样数据进行处理,将处理结果转换为模拟信号,反馈到恒流源调整器,实现快速数字闭环反馈控制.测试结果表明,在输出电流10mA~2010mA范围内,电流纹波≤0.06mA,输出电流与设定电流相对误差≤1%,电流调节最小步进值为1mA.基于微处理器的精密数控恒流源陶林伟,王英民,雷开卓(西北工业大学航海学院,陕西西安710072)摘要:在线性负反馈恒流源基础上,设计了一种新的数控高精度恒流源。该恒流源使用新型微处理器对电流源负载电流进行采样,使用PID算法在数字域对采样数据进行处理,将处理结果转换为模拟信号,反馈到恒流源调整器,实现快速数字闭环反馈控制。测试结果表明,在输出电流10Il认~2010IIA范围内,电流纹波≤O.06InA,输出电流与设定电流相对误差≤l%,电流调节最小步进值为1mA。关键词:恒流源微处理器PID算法A,D转换器D,A转换器运算放大器恒流电源是为电流型负载提供电电源恒流源供稳定电流的重要仪器。常见的恒拍VAC一l№r一IH4……
  • 所需E币: 5
    时间: 2020-1-2 00:56
    大小: 584KB
    上传者: 2iot
    这是一篇我个人毕业论文的部分内容,系统的介绍了数字恒流源的解决方案和相应的测试流程。数字程控恒流源摘要恒流源在科学研究及实际应用中有着越来越重要的作用,随着电子技术的发展,数控恒流源的应用范围越来越广,已经不仅仅局限于为各种仪器、仪表提供数字化的恒流电源;把工业生产中的模拟信号量采集后数字化,并提供作为控制信号的恒定电流,参与下一级生产的控制,这同样是一种极为迫切的工业应用需求。本设计所表述的数字程控恒流源包含:单片机AT89C52、A/D转换器、D/A转换器及恒流源部分,单片机为数字程控恒流源的控制核心,A/D转换器可测量恒流源部分实际的输出电流值,单片机根据实际的输出电流值和设定值来控制D/A转换器的输出达到稳定电压,这个电压与恒流源的输出信号经运算放大器比较后控制调整场效应管的导通,使恒流源达到动态平衡,输出恒定电流;当有外界干扰使输出的电流值与设定值的差值超过精度范围时,单片机控制D/A转换器的输出来调整恒流源的输出,减小外界干扰的影响。本设计可预置输出电流值,设置步进等级有[pic],[pic]和[pic],输出电流的范围[pic]~[pic],可以由液晶显示器显示输出电流设定值和实际输出电流值。关键词:恒流源部分;单片机AT89C52;A/D转换器;D/A转换器THEDigitalSpcConstantcurrentsourceABSTRACTTheconstantcurrentsourcehasanincreasinglyimportantroleinscientificresearchandpracticalapplications.Wi……
  • 所需E币: 3
    时间: 2019-12-25 10:54
    大小: 37.09KB
    上传者: givh79_163.com
    I2C接口的AD及DA转换器的应用……
  • 所需E币: 4
    时间: 2019-12-25 10:54
    大小: 10.49KB
    上传者: quw431979_163.com
    串行接口电压输出型DA转换器的控制……
  • 所需E币: 3
    时间: 2019-12-25 10:54
    大小: 14.09KB
    上传者: 二不过三
    并行接口电流输出型DA转换器的控制……
  • 所需E币: 3
    时间: 2019-12-25 10:54
    大小: 11.04KB
    上传者: givh79_163.com
    并行接口电压输出型DA转换器的控制……
  • 所需E币: 4
    时间: 2019-12-25 10:28
    大小: 1.2MB
    上传者: 微风DS
    模拟电路(上)11.1{|1.2wxyzPN')*1.3ucvcQBipolarityJunctionTransistor*/$t'(+MN)*$GHImnWXImnWsI$Al#mno$poqrmn!"A2345jk89fghi……
  • 所需E币: 3
    时间: 2019-12-30 10:12
    大小: 587.75KB
    上传者: 16245458_qq.com
    四路输出12位DA转换器DAC8420……
  • 所需E币: 5
    时间: 2019-12-30 10:13
    大小: 359.19KB
    上传者: quw431979_163.com
    TLC7225ctlc7225i四路八位DA转换器……
  • 所需E币: 5
    时间: 2019-12-30 09:42
    大小: 222.27KB
    上传者: 238112554_qq
    D/A转换DAC0832芯片……
  • 所需E币: 4
    时间: 2019-12-30 09:44
    大小: 359.19KB
    上传者: 238112554_qq
    TLC7225ctlc7225i四路八位D_A转换器……