基于单片机I/O口实现A/D转换方法※
周渡海1,何此昂2
(1.北京建筑工程学院电信学院,北京100044;2.华中科技大学电气学院)
引 言
在某些特定的场合(主要是在数字电子应用方面),需
要一个模拟信号输入来进行一些基本模拟量的测量,或者
是提供可控的方式使用外部电位器。像这样的需求,由一
个内置A/D(模/数)转换器的单片机就能很好地实现;当
然,也可以使用一些经济的外部器件,由一个标准的数字
I/O口来实现简单的A/D转换功能。本文以Holtek系列
短视频分享网站源码
单片机为对象,介绍使用标准的施密特输入口或CMOS
I/O作为基本A/D转换口的使用方法,为对A/D转换精
度要求不高的应用提供了一种低成本的A/D转换实用
方案。
1 I/O口A/D转换原理
I/O口A/D转换的原理是:对某一电容充电达到某
个固定的电压值,然后以恒定电流进行放电,通过测量放
电时间来获得当前输入信号的强弱。通过设置I/O口为
输出高电平可以迅速地对电容进行充电,在输出口与电容
之间建议串接一个100Ω的小电阻来限流,防止大电流损
坏。电容充电的表达公式如下:
VC=VO(1-et/RC)
式中:V
C是电容电压,V
是I/O口输出电压(与单片机实
际工作电压有关)。将输出口置高开始对电容充电后仅需短时间的延时,充电电压即可达到V
的98%(这里需要的时间大约为39μs)。充电过程完成后,即可将控制口设置为输入状态。这是因为其输入状态为高阻态,此时电容就只能通过三极管的发射极对地以恒定的电流放电。电流大小与发射极上串联的电阻有关,改变放电电流的大小即可改变放电斜率。
电流大小与电容电量之间的关系式如下:
I=C·dVdt
式中:C是元件的电容,单位是F;dV/dt是电容上的电压变化率,单位是V/s;I是流过电容的电流,单位为A。如图1所示,如果流经电容的电流是恒定的,那么充电时电容电压上升的速率也是恒定的。也就是说,对电容的充放电曲线的斜率是由电容参数值和充放电电流值决定的,电压的变化率dV/dt等于1/C
图1 电量与充放电时间关系图
在放电时,如果电容与一个CMOS输入端相连接,那么随着电容电压幅度的减小,当其幅度降低到CMOS输入的开关极限值时,CMOS输入端将从高电平变为低电平。使用内部定时器/计数器从放电周期开始对输入端进行监测。当输入端出现下降沿时,如果定时器/计数器停止计数,则定时器寄存器的剩余值是与放电电流成比例的。放电电流大小是由发射极的两个电阻决定的,其中一个电阻是电位器
图2 硬件设计图
2 硬件设计
硬件电路由极少的标准元器件组成,如图2所示。用一个红的LED(D1)提供一个大约1.8V的参考电压,同时具有上电指示的功能(也可使用不同颜的LED或串联几个低功耗的二极管,如1N4148)。LED的正向电压与Q1(2N2222)基极到射极之间的电压相减,便得出串联电阻R1和R2上的电压,从而在Q1的发射极产生一个恒流源。这将在Q1的集电极产生一个恒定的电流,该电流即为放电电流。三极管的集电极电流同基极电流的关
系,是由三极管的放大倍数值决定的,与外部电路的精确
度无关。几乎所有的NPN型三极管都可以应用到该电路中。单片机的I/O引脚经一个100Ω的电阻与电容C1连接,当充电时,这个电阻对电容具有限流保护作用。在放电期间,I/O口具有高输入阻抗,所以不会影响A/D转换的精确度。R1的作用是当R2电位计在最小值时,确保三极管Q1工作在非饱和区,并维持电流源工作。如果R1为1.2kΩ,那么提供的电流源的值大约为1mA,选取较小的电阻值以便于计算。选取R2为10kΩ的目的是,当其在较大值时可降低功耗,并且可以防止外界干扰。
使用Holtek公司的HT48F06E的Flash I/O型单片机来设计I/O口A/D输入方式。事实上任何一款带有施密特触发、CMOS I/O结构的Holtek单片机都可以使用。注意,NMOS型I/O引脚不适合于该应用。如果电容放电电压的下降沿下降得相对比较缓慢,非施密特型的CMOS输入也不适用于该应用,因为缓慢的下降沿输入在电压降到门限电压时不能产生一个明确的逻辑转换。检查电路将会发现,电容电压从V
dd
开始放电到输入引脚的
门限电压V
th
之间的时间,可由电压的变化量除以电压的变化率求得。方程式如下:
Time=(V
dd-Vth
)·C
式中:V
th
是输入引脚的门限电压值,C是电容值,I是恒定
的放电电流值。I可由三极管Q1发射极的电压V
除以R2与R3之和得出,代入方程式可得出:
Time=(V
dd-Vth
)(R
2+R3
Ve
式中:V
是发射极电压值,它可由LED的正向电压减去
三极管的V
be
得出。
3 软件设计
A/D转换编码很简单,它是由连续地对电容充放电来实现的。对电容充电,通过设置I/O为输出,并设置一个较长的固定时间周期以确保电容满充。一个100nF的电容和一个100Ω的电阻可以达到10μs的固定时间周期,它可以作为一个计算合适充电时间的标准。对电容充电的合适时间应不小
于10倍的RC充电时间常数。当I/O口由低输出变为高输入状态,放电过程即可开始,同时定时计数器也开始计时。该系统使用3.58MHz的晶振,如果设置定时器预分频器的值为16,将得到一个约4.47μs的时钟周期。此时,TMR寄存器的溢出周期为(255×4.47μs)=1.14ms。若该溢出周期远小于电容由满充到输入门限电压值的放电时间,A/D转换值将会是大于8位二进制的数据。如果增加预分频器值到64,将会得到一个足够长的时钟周期,允许A/D转换值在8位(即255)
以内。软件设计流程如图3所示
图3 软件设计流程
由于Holtek单片机的指令和处理方式与很多公司(如Atmel、TI、NXP等)的微处理器类似,所以Holtek单片机程序可以很方便移植到各类单片机中。
编者注:源代码见本刊网站www.mesnet.com.cn
图4 实际测试波形
4 实验验证
图4为使用泰克公司示波器测试的电容两端的电压波形。可以清楚地看到电容充电整个过程的指数上升曲线。上升时间比预计值长,这可能是由于单片机CMOS输出口的电压驱动能力没有理想中的好。这一点在充电周期起始阶段、充电电流值比较大时,表现得尤为明显。注意,电流源将不断地从CMOS输出口吸收电流,这对上升时间产生一些影响,可通过在电容充电时加一个较长延时来解决。这条曲线表明,在这个范例中,允许电容充电时间的编程值明显长于所必需的时间,并且可以缩短整个A/D转换的时间。至于比较重要的放电斜率,尽管没有测量,但看起来线性度非常好。施密特触发I/O输入口的转换也很明显,而且没有检测到干扰信号。另外,由高到低变化的门限电压值为1.62V,这个值依赖于处理过程,而且随着选择的芯片不同而有所变化,它对A/D转换值有着重要的影响。
由于该应用范例只是提供一个A/D转换的基本形式,因此不适用于精确的测量,只适用于转换精度有限的领域。绝对误差的主要来源在于所使用电容的实际值和输入电压的门限值。尽管使用的电容为0.
1μF,但它的容限可能会大。如果采用软件校准对绝对误差进行补偿,那么将获得一个合理的精确度。另外,还存在一些小误差,其中一个就是电容放电时,由于三极管V
ce
电压值不断变化引起的放电电流的微弱变化。其他误差可能是由不很理想的电源电压引入的。注意:要确保没有上拉电阻与I/O引脚相连,否则将会产生误差,影响到放电斜率的线性度,尤其在放电电流较小的情况下。
结 语
本文介绍如何用一个标准逻辑I/O引脚与内部定时器/计数器,以及一些低成本的器件来实现A/D转换功能。虽然不是针对高精度的A/D转换应用,但这个构思实际上可以实施于低分辨率、低成本的A/D转换功能。在示波器曲线上随意测量放电斜率,虽然测量方式比较简单,但可以看到很好的线性度。目前,只使用了一个I/O引脚,但很容易应用于多通道模拟输入。本文使用一个电位计提供模拟信号输入,也可以用一个固定电阻来代替,并使用一个缓冲电压源与三极管的基极连接,从而来提供模拟信号的输入。虽然这个电压源可以用来控制放电电流,但是对三极管保持导通并工作在线性区域的输入电压范围加大了限制。使用外部中断作为模拟测量输入脚,可以实现更高效率的程序代码,在A/D转换过程中程序可以继续执行其他的任务。
本文介绍的方法可以广泛地应用于低成本的温度检测场合,诸如室外温度计、电热水器温度检测、空调温度监测等场合,具有一定的实用价值
参考文献
[1]何此昂,等.Freescale 08系列单片机开发与应用实例[M].北京:北京航空航天大学出版社,2009.
(收修改稿日期:2010-04-01)
MIPS推出针对MIPS Based设备的Skype参考方案
美普思科技公司(MIPS Technologies,Inc.)宣布,新推出的SkypeKit开发工具可提供MIPS架构对Skype的支持。通过SkypeKit封闭测试(beta)计划,MIPS科技在数字家庭领先的MIPS架构上开发出了Skype参考方案。
Skype是个人和企业使用的一种软件,可用来与其他Skype用户进行视频和语音通话、发送即时消息及共享文件。开发人员现在可以在DTV、机顶盒和数字媒体配接器等MIPS-Based设备上建立Skype功能。
Skype能为授权客户的新一代连网设备提供又一个重要功能。通过参与SkypeKit测试计划,现在我们的授权客户及其客户能够开发Skype解决方案,让全球的Skype用户实现在各种MIPS-Based产品上的沟通。MIPS架构提供了卓越的性能与功耗优势。这些优势,加上MIPS目前在Skype、Android、Adobe Flash Player 10.1、Yahoo!TV Wid-get等平台上的开发工作,能够帮助客户快速且轻松地创建新一代的创新SoC。
英飞凌推出高灵敏度、低功耗的汽车和
消费类电子应用无线接收器
英飞凌科技股份公司推出具备最高灵敏度和低功耗特性的三款增强型无线控制接收器。TDA5240、TDA5235和TDA5225支持多频段(315MHz、434MHz、868MHz和915MHz),可实现全球覆盖,十分适用于不同的汽车应用,包括远程无钥匙进入(RKE)系统、胎压监控系统(TPMS)、远程启动、控制、状态与报警功能。此外,这种高度集成的无线控制器件
也会使工业和消费类电子系统受益匪浅,例如短程无线数据传输设备、车库开门器、无线报警系统、远程抄表和低功耗遥测设备。该接收器还能够完成通常由系统微控制器执行的某些任务。
TDA5240、TDA5235和TDA5325是TDA5230/31接收器系列之后的新产品。其中两款器件具备TDA5230/31的功能强大的数字处理功能,并在性能和特性方面实现了全面增强。目前,这些器件还集成了中频滤波器(可选用外置滤波器)和电平转换器,只需少数几个外置组件,降低了物料成本。创新的集成低噪放大器(LNA)概念为系统开发人员提供了增强型产品设计选件。取决于具体应用需求,该低噪放大器可扩大系统的有效传输距离,或避免采用外置低噪放大器,从而降低系统复杂度和成本。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。