用比较器LM393来实现A/D转换
1.放大器部分,简单的检波,放大,假设得到信号S。
2.LM393右半边那个电压比较器,即2Out->P34,是用S与GND比较得到的输出结果,输出端加了个上拉。 3.LM393左半边那个电压比较器,即1Out-〉P15,就有点复杂,从逻辑上讲: S 0 1 0 1 0 1 0 1
P12 0 0 1 1 0 0 1 1
P13 0 0 0 0 1 1 1 1
1out
0 1 0 0 0 1 0 0
其实从左到右4个三极管起的主要作用是开关作用而已,分别称为Q1,Q2,Q3,Q4. 通过放大器放大后的信号S接在Q1基极
当Q1导通,Q2导通的时候,Vin+=GND+0.7V 当Q1断开,Q2导通的时候,Vin+=GND 当Q1导通,Q2断开的时候,Vin+=Vcc 当Q1断开,Q2断开的时候,Vin+=GND
Q3一直导通
Q4导通的时候,Vin-=GND+0.7V
Q4断开的时候,Vin-=Vcc-0.7V-0.7V(两个二极管的压降)
值得讨论的是当 Q1,Q2,Q4都导通的时候,似乎Vin+与Vin-相等
用普通单片机实现低成本高精度A/D与D/A转换(之一)
摘要:用普通单片机实现低成本的多路A/D与D/A转换,其转换结果为8bit或更高。 关键词:单片机 A/D转换 D/A转换 PWM(脉冲宽度调制) 比较器
目前单片机在电子产品中已得到广泛应用,许多类型的单片机内部已带有A/D转换电路,但此类单片机会比无A/D转换功能的单片机在价格上高几元甚至很多,本文给大家提供一种实用的用普通单片机实现的A/D转换电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩展成带有4通道A/D转换功能,由于它占用资源很少,成本很低,其A/D转换精度可达到8位或更高,因此很具有实用价值。 其电路如图一所示:
图一
其工作原理说明如下: 1、硬件说明:
图一中“RA0”和“RA1”为单片机的两个I/O脚,分别将其设置为输出与输入状态,在进行A/D转换时,
在程序中通过软件产生PWM,由RA0脚送出预设占空比的PWM波形。RA1脚用于检测比较器输出端的状态。 R1、C1构成滤波电路,对RA0脚送出的PWM波形进行平滑滤波。RA0输出的PWM波形经过R1、C1滤波并延时后,在U1点产生稳定的电压值,其电压值U1=VDD*D1/(D1+D2),若单片机的工作电压为稳定的+5V,则U1=5V*D1/(D1+D2)。
图一中的LM324作为比较器使用,其输入负端的U1电压与输入正端的模拟量电压值进行比较,当U1大于模拟量输入电压时,比较器的输出端为低电平,反之为高电平。 2、A/D转换过程:
如果使RA0输出PWM波形,其占空比由小到大逐渐变化,则U1的电压会由小到大逐渐变化,当U1电压超过被测电压时,比较器的输出端由高电平变为低电平,因此可以认为在该变化的瞬间被测的模拟量与U1的电压相等。
由于U1的电压值=VDD*D1/(D1+D2),当VDD固定时,其电压值取决于PWM波形的占空比,而PWM的占空比由单片机软件内部用于控制PWM输出的寄存器值决定,若软件中用1个8位寄存器A来存放RA0输出的PWM的占空比值D1,因此在RA1检测到由“1”变为“0”的瞬间,A寄存器的值D1即为被测电压的A/D转换值,其A/D转换结果为8位。如果用16位寄存器来作输出PWM的占空比,则A/D转换值可达到16位。 3、A/D转换误差分析及解决办法:
A/D转换的误差主要由以下几个方面决定,分别说明如下:
(1)单片机的电源电压VDD:在该A/D转换中,VDD电压是造成A/D转换误差的主要原因,如果使VDD电压精度做到较高,则A/D转换误差可以做到很小,在VDD电压精度为0.5%情况下,实际的A/D转换误差小于1%。
(2)软件产生的PWM占空比:若用于产生PWM的软件设计不良,会使存放占空比的寄存器值与实际输出的PWM占空比不一致,这会导致测量误差。
(3)比较器输入端的失调电压:该电压对A/D转换精度有一定影响,但影响较小。
(4)RC滤波电路的纹波:在R1、C1取值不当的情况下,U1处的电压纹波较大,并且延时时间不够,会使A/D转换产生误差,因此R1、C1取值不能太小,但太大又会影响A/D转换速度,推荐使用图一中所示的R1、C1参数,在纹波合理的情况下,其转换误差也可通过软件消除。 A/D转换误差的解决办法:
(1)对VDD造成的误差,只能通过提高VDD电压精度来解决,它相当于A/D转换的基准电压。 (2)对于软件中PWM设计不良导致的误差,可修改软件进行解决,本文提供了用软件产生PWM的程序流程图,实际使用中可按此流程设计程序。
(3)对比较器及RC滤波电路的纹波导致的误差,在软件中可通过上、下检测法进行消除,即先将PWM的
占空比由小到大变化,使U1电压由低往高逐渐变化,在比较器输出端变化时记录其A/D转换值,再将PWM的占空比由大到小变化,使U1电压由高到低变化,在比较器输出端变化时记录其A/D转换值,将两次的A/D转换值进行平均,可有效地消除这两种误差。
(4)对A/D转换值进行数字滤波,如多次转换求平均值等。数字滤波消除误差的方法很多,在此不再赘述。 4、A/D转换速度及提高办法:
由于该A/D转换是通过PWM滤波后再进行比较来完成的,其PWM的产生与滤波都需要一定的时间,因此其A/D转换速度较慢,适用于对A/D转换速度要求不高的产品中,其A/D转换速度取决于以下几个方面: (1)单片机的运行速度:单片机的运行速度越高则PWM的频率可以越高, RC值就可以取得越小,其延时时间也可以更短,转换速度就更快。
(2)被测电压值的大小:由于U1电压时是由小到大逐渐加大的,当被测电压值较小时,U1电压上升到相应值的时间就越短,完成A/D转换的速度就越快。
(3)初始占空比:初始占空比越高,U1电压较大,其上升到被测电压值的时间也就会越短,完成A/D转换的速度也就越快。
由上所述,A/D转换的速度可以通过提高单片机的工作频率,并在预知被测电压范围时尽可能地设置较高的初始占空比值来加快转换速度,如果所要求的 A/D转换精度要求不高,还可以在软件中缩短PWM输出的延时时间来提高A/D转换速度。若单片机带有外部电平变换中断和定时器中断,其A/D转换的精度和速度还可以得到提高。 5、输入电压的测量范围:
A/D转换的输入电压测量范围为0V至单片机的电源电压(VDD),若需要提高被测电压范围,可将输入电压通过电阻分压后进行测量,但其A/D转换的误差会受分压电阻影响。 6、A/D转换通道的多路扩展:
图中所用的运算放大器为LM324,该集成电路内部带有4个运放,其余3个运放的输入端可分别作为另外3个A/D转换通道,其输出端与单片机连接,在软件上略作修改,就可以在不增加成本的情况下实现4路A/D转换。
7、用同样的工作原理实现D/A转换:
如图二所示,可使该电路很容易地只用单片机的一个I/O脚实现D/A转换功能。其输出的模拟量电压Vout=VDD*D1/(D1+D2)。该输出电压带有纹波,当RC值足够大时,该纹波值几乎为零,可忽略不计。
图二
8、单片机的A/D转换软件程序流程图:
用普通单片机实现低成本A/D转换(二)
摘要:用普通单片机实现低成本的多路A/D转换。 关键词:单片机 A/D转换 比较器 计时器
在此前笔者曾介绍了普通单片机实现低成本A/D转换的一种方法,在实际使用中还有其它的不少方法可以实现低成本A/D转换,在本文中我们继续为电子设计者们提供又一种A/D转换方法,该方法同样占用较少的单片机资源,成本也很低,仍然有很强的实用性,该电路曾在锂离子电池充电器中作A/D转换使用,效
果良好。
其电路如图一所示:
图一
其工作原理说明如下: 1、硬件电路说明:
图一中的R1和N1(TL431)产生一个2.495V的稳定电压,作为A/D转换比较基准。R2、V1、VD1、VD2和R3构成一个恒流源电路给C1充电,C1上的电压与恒流源的电流大小及充电时间成正比。MC74HC4051为8选1模拟开关,其输入通道由单片机控制来选择。LM393作为比较器,当C1上的电压由低到高上升到超过模拟开关输出电压时,其输出端会从低电平转变为高电平。“RA0”、“RA1”和“RA2”为单片机的3个 I/O脚,RA0设置为输入状态,用于检测比较器输出电平变化,RA1和RA2设置为输出状态,RA1输出高电平时,V2导通,用于将C1上的电荷放空, RA2用于选择模拟开关的输入通道。 2、A/D转换过程:
首先RA2输出低电平,使模拟开关选择X0(基准电压)作为输入,RA1输出高电平,使V2导通将C1上的电量放完,然后使RA1输出低电平,使 V2截止,此时C1上的电容开始被充电,同时计数器开始计数,当C1上的电压不断上升,并达到比较器输入负端的电压(此时为基准电压Vref)时,比较器的输出端由低电平转为高电平,此时记录下计数器的计数值,为T1。
接着RA2输出高电平,使模拟开关选择X1(被测电压)作为输入,RA1输出高电平,使V2导通将C1上的电量放完,然后使RA1输出低电平,使V2截止,此时C1上的电容又开始被充电,同时计数器开始计数,当C1上的电压不断上升,并达到比较器输入负端的电压(此时为基准电压)时,比较器的输出端由低电平
转为高电平,此时记录下计数器的计数值,为T2。
由于C1是被恒流充电,因此C1上的电压与充电时间成正比,即V=T*k。当C1的容值与充电的恒流值不变时,k是一个固定不变的常数。由此可以得到: Vref/T1=V1/T2 ,即 V1=Vref*T2/T1
由于Vref是基准电压(2.495V),因此只要利用单片机的定时器测出T1和T2,就可以计算出被测电压V1的值。
3、A/D转换误差分析及解决办法:
A/D转换的误差主要由以下几个方面决定,分别说明如下:
1、基准电压Vref:在该A/D转换中,Vref电压是造成A/D转换误差的主要原因,如果使Vref电压精度做到较高,则A/D转换误差可以做到很小,在Vref电压精度为0.5%情况下,实际的A/D转换误差小于1%。 2、定时器误差:若单片机对比较器输出端的电位变化反应慢,或定时器误差较大,则测量到的T1与T2值不准,也会导致测量误差。
3、比较器输入端的失调电压:该电压对A/D转换精度有一定影响,但影响较小。
4、运算误差:由于V1值要经过乘除法运算后得到,在进行运算过程中如果数据处理不当,如余数处理不当,也会产生误差。
5、干扰误差:当输入电压不稳时,恒流源的输出电流会有一定的影响,会产生干扰误差。 A/D转换误差的解决办法:
1、对Vref造成的误差,只能通过提高Vref电压精度来解决,它相当于A/D转换的基准电压。 2、对于定时器误差,在单片机中可使RA0口采用带电平变化中断功能的I/O口,以提高反应速度,同时减少恒流源的电流大小,或加大C1电容容量,可以增加T1、T2的测量时间,使计数值加大,达到提高A/D转换精度的目的。
3、选用灵敏度高的比较器可解决比较器输入端导致的误差问题。 4、对运算误差,可以通过软件上的改进来解决。
5、对于干扰造成的误差,可对A/D转换值进行数字滤波,如多次转换求平均值等方法来解决。数字滤波消除误差的方法很多,在此不再赘述。 4、A/D转换速度及提高办法:
由于该A/D转换是通过恒流源对C1电容充电后再进行比较来完成的,C1电容的充电过程需要一定的时间,因此其A/D转换速度较慢,适用于对A/D转换速度要求不高的产品中,其A/D转换速度取决于以下几个方面:
1、恒流源的电流大小:恒流源的充电电流越大,C1上的电压上升速度就越快,到达被比较电压的时间也
就更短,转换速度就更快。
2、C1电容的大小:其道理与前一点一样,当电容小时,电压上升速度就越快,到达被比较电压的时间也会越短,转换速度就越快。但由于计数值小,由定时器造成的测量误差也有可能加大。
3、单片机的工作频率:由于A/D转换值是经过乘除运算后完成的,因此单片机的运算速度也会对A/D转换速度有影响,尤其当计数器值为16位时。
由上所述,A/D转换的速度可以通过提高单片机的工作频率,增大恒流源的输出电流,减小C1电容容值来加快A/D转换速度,但要注意当T1、T2 计数值太小时有可能使定时器因素造成的误差增大,因此在实际使用中要综合考虑,在提高转换速度时,保证A/D转换精度,选择最适用于产品的参数值。 5、输入电压的测量范围:
A/D转换的输入电压测量范围为0V至4.5V,当C1被充电至大于4.5V时,恒流源输出将不再恒流,C1上的电压与时间将不成正比,因此测量范围只到4.5V。若要提高被测电压范围,可将输入电压通过电阻分压后进行测量,但其A/D转换的误差会受分压电阻影响。 6、A/D转换通道的多路扩展:
图中的8选一模拟开关只用到其中的2路,实际应用中其它的6路也可使用,这样A/D转换的通道可扩展到7路,因此在用4个I/O口情况下,可实现3路A/D转换,在用5个I/O口情况下,可实现7路A/D转换。
基于PWM技术的A/D转换电路的设计及应用
1. 引言
对测控现场的被测模拟信号的处理一般常用A/D或V/F转换技术,两种方法各有特点:A/D转换技术一般用于被测信号速率较高,但干扰不是太严重的场合,而V/F转换技术由于具有较强的抗干扰性且便于实现信号的远传和隔离,因此往往用于现场的干扰较为严重、且信号传输距离较远的场合。但由于V/F变换的采样速率较低,在对分辨率、采样速率和抗干扰性要求都较高时,则采用V/F转换技术往往也难以满足采样要求。尽管A/D转换的采样速率较高,但由于其抗干扰性较差,从而使系统的可靠性、稳定性和测试精度都会受到影响,有时甚至无法正常工作。
本文提出一种采用PWM技术的新型的高性能模数转换器的设计方法,利用MCU内部的定时器,结合改进的逐次逼近的对分试探算法,只须采用普通元器件即可设计出具有高分辨率的A/D转换器,以实现对模拟电压的测量,通过实验证明该设计能够达到较高的精度和分辨率,电路简单、可靠、成本低、传输信号线少,便于远传或隔离,抗干扰能力强,具有较好的应用价值。 2. 基于PWM技术的A/D转换工作原理及接口电路设计
一般模数转换包括采样、保持、量化和编码四个过程。采样就是将一个连续变化的信号x (t) 转换成
时间上离散的采样信号x (n) 。通常采样脉冲的宽度tw 是很短的,故采样输出是断续的窄脉冲。要把一个采样输出信号数字化,需要将采样输出所得的瞬时模拟信号保持一段时间,这就是保持过程。量化是将连续幅度的抽样信号转换成离散时间、离散幅度的数字信号,量化的主要问题就是量化误差。编码是将量化后的信号编码成二进制代码输出。这些过程有些是合并进行的。例如,采样和保持就利用一个电路连接完成,量化和编码也是在转换过程同时实现的,且所用时间又是保持时间的一部分[1]。
PWM即脉冲宽度调制,PWM信号是一种周期(T)固定、占空比变化的数字信号。当对其进行积分或低通滤波后,便可获得与其脉冲宽度呈正比的模拟电压,于是将该电压作为试探值与被测模拟量进行比较便可获得与被测模拟量相对应的PWM值或数字量。本设计是利用定时器产生PWM脉冲输出信号,利用比较器作为试探结果状态标志,采用改进的逐次逼近试探算法来实现对被测模拟量的A/D变换。由于一般单片机内部都有定时器,因此可直接利用片内定时器来产生PWM信号即可[2],本设计采用的是MSP430单片机,由于其内部的定时器A具有比较/捕获功能,且内部具有多个捕获/比较器:CCR0--CCRn,因此利用这种功能可更方便的产生PWM信号,从而实现A/D转换。PWM波形的产生是利用定时器A输出模式中的“复位/置位”模式。例如可利用其中的捕获/比较器CCR0来控制PWM的周期,而用CCR1通道控制PWM的占空比,从而可方便的获得PWM信号,如图1所示“复位/置位”模式输出示意图。
由图1可知,只要改变CCR1和CCR0的值就可以改变输出波形的脉冲宽度和脉冲周期,例如,以CCR0信号作为脉冲周期控制,当CCR1的值改变时即可改变PWM信号的脉冲宽度或占空比,输出信号就是PWM信号。如图2所示[3]。
若PWM信号的占空比随时间变化,那么经过低通滤波后的输出信号将是幅度变化的模拟信号,因此通过控制PWM信号的占空比,就可以产生不同的模拟信号。本设计中,采用MSP430单片机的定时器A的CCR0来控制周期,采用CCR1来控制占空比,从而产生所需要的PWM信号。
采用PWM技术的A/D转换电路设计如图3、4所示。A/D转换通过MSP430单片机的内部定时器A产生的PWM信号,通过P23口输出,经过两级RC低通滤波后得到与其对应的模拟信号,然后通过运算放大器构成的电压跟随器进行阻抗变换后,作为试探值送电压比较器LM393的一端,在比较器的另一端接入被测模拟量,两信号在比较器中进行比较,通过检测比较器的输出电平状态即可反映出试探值的大小,由比较器的输出状态调整PWM信号的占空比,产生下一次PWM信号的输出,于是通过不断的试探并修正PWM信号的占空比即可使试探值接近或等于被测量,则此时的脉冲值即为被测量的A/D转换值,可以达到16位的转换精度。另外,由原理图4可知,由于整个电路比较简单且该转换器与系统的连接只有两条信号线:即PWM信号输入线和用于将试探值与被测模拟量进行比较的比较器信号输出线,因此在进行抗干扰隔离时将很容易实现,而在采用普通A/D转换器的电路中进行抗干扰隔离时则要麻烦的多。
3. 微控制器MCU的选型
为方便使用和操作,本设计不但设计简单,而且功耗要低,因此经多方面综合、对比决定采用TI公司的具有SOC特点的MSP430系列MCU,这是一种超低功耗的16位混合信号控制器,其内部集成了大量的外围模块和温度传感器,特别适用于电池供电的手持式设备或需要对环境温度进行补偿的测试仪器。 MSP430单片机采用最新的低功耗技术,工作在1.8~3.6V 电压下,有正常工作模式( A M ) 和4 种低功耗工作模式;在最小功耗模式下其工作电流仅为0.1μA,而且可以方便地在各种工作模式之间切换。它的超低功耗性在实际应用中, 尤其是在电池供电的便携式设备中表现尤为突出。在系统初始化后便进入待机模式,当有允许的中断请求时,CPU 将在6μs的时间内被唤醒, 进入活动模式,执行中断服务程序。执行完毕,在RETI 指令之后,系统返回到中断前的状态,继续低功耗模式。
本设计所采用的是MSP430F1232微控制器,具有非常高的集成度,除内部带有具有PWM功能的定
时器外,片内还集成了10通道的1 0位A / D转换、温度传感器、USART、看门狗定时器、片内数控振荡器DCO、大量的具有中断功能的I/O 端口、大容量的片内Flash 和RAM 以及信息Flash 存储器[4]。其中的16位定时器A中带有3个捕获/比较通道,内部的Flash 存储器可以实现掉电保护和软件升级。由此采用MSP430单片机作为该设计的处理器,不但可简化系统电路设计、缩短开发周期,降低系统功耗,还可利用其内部集成的温度传感器,方便的对被测模拟量进行温度补偿,从而使系统的测试精度得以提高。