陈远浩

(林百欣科技中专,广东汕头,515041)

0 引言

模数转换应用在数字电路和单片机智能控制等应用领域,作用非常大,以单片机为例,传统的做法一般是采在专用模数转换芯片或采用RC模式,这两种方式各有优缺点,前者优势是稳定性一致性较好,抗干扰能力强,但是其缺点是成本高。玩具市场中,对价格特别敏感,具有量大,低成本的特点,为降低生产成本,常用简单的电阻加电容来代替A/D转换芯片。笔者长期从事单片机智能控制设计开发工作,在实际工作中逐步改良传统RC模数转换的劣势,并实现抗干扰,高精度、低成本和批量生产时的一致性要求。

1 传统RC模数方案存在的问题

图1 传统RC模数转换原理图

传统的方法如图1所示,采用2501B单片机的P2.0 输出低电平时,电容C1 通过电阻R2、P2.0放电,当P2.0为高阻或高电平时,电流通过R1、R2给电容C1充电,随着时间的推移,A点的电压慢慢升高,当A的电压与B点的基准电压相等时,C点会发生跳变,P2.1用于检测C点的跳变。单片机记录从C1充电到P2.1发生跳变时间T,就可以计算出被测电阻R2的模数转换值D。充放电曲线如图2所示。

这种方法存在如下问题:第一、电源电压VCC波动会影响充放电时间从而影响转换结果,第二、电容C1漏电或者低价电容的误差比较大时,对转换结果影响非常大,而高精度电容的价格又较高。第三、环境温度的变化也会影响转换结果,第四、转换时间较长(如参考文献中[1]中所述的一个通道转换时间10mS),如果按航模标准,遥控器的发射信号的时间间隔不能超过20mS,而大多数的遥控汽车、遥控船、遥控玩具飞机的A/D通道数都超过3路,则需30毫秒的时间才能完成转换。第五、成本仍然偏高,因为使用了比较器,其成本比A/D转换芯片相差不大。

图2 RC充放电曲线

2 RC模数转换方法的改良策略

2.1 改良基本思路

基于以上传统RC方案的缺陷,笔者提出用单片机端口提供充电电流,通过参考通道的转换数据来修正目标通道的转换结果的改良策略,其电路原理图如图3所示,以SONIX的SN8P2501B单片机,实现W1电位器的模数转换为例;电路中P2.0用于电容的放电,兼用于检测电容C9是否已充电到高电平的电压,P2.1作为参考通道接5.1k的参考电阻,P2.2端口接待转换的电位器W1,R1为保护电阻,预防W1为0时的电流冲击。

电路基本工作方案是:当设置P2.1、P2.2为高阻状态,P2.0为低电平时,电容C9通过电阻R5放电;放电完成后,设置P2.1输出高电平给C9充电,同时P2.0改为输入状态,检测C9上的电压是否已充到单片机的高电平输入状态,单片机记录从P2.1开始给C9充电到P2.0检测到高电平的时间TR6,即为参考通道电阻R6的充电时间。同理,当设置P2.1为高阻,P2.2为高电平,P2.0为输入状态时,P2.2通过电位器W1、电阻R1给电容C9充电,单片机记录从P2.2开始给C9充电到P2.0检测到高电平的时间TWR1,即为目标通道电位器W1电阻R1的充电时间。

图3 改良后的RC模数转换电路图

2.2 解决电源干扰的依据与方法

该单片机的内部引脚电路结构如图4所示。

图4 SONIX2501B引脚内部电路结构

P2.0~P2.5都有内置上拉电阻,可以通过指令使能。使能后等效电路如图5,电容C9充电时间正比于单片机的电压VDD,另一方面,根据SONIX2501B单片机的电气特性,P2.0检测到高电平的条件是T的电压Vt>=0.7VDD,也是正比于单片机的电压VDD,即当电源电压VDD升高时,虽然充电快了,但同时P2.0所需的高电平电压Vt也相应升高了,所以电源的波动对转换结果没什幺影响。

图5 单片机使能上拉电阻后的等效电路

2.3 解决电容误差、环境温度影响转换结果的方法

引入参考通道,即增加R6通道做模数转换。如在图5中,当C9的电容误差、环境温度等因素影响W1所在通道的充电时长时,也同等程度影响了R6所在通道的充电时长,所以,程序中可根据R6通道所受影响程度来修正W1通道的数值。具体说就是根据TR6来修正TWR1。

2.4 缩短转换时间的方法。

C9放电时不走充电时的大电阻路径(R1、W1),而是通过一个小电阻R5(100欧)走P2.0端口放电,平均放电时间缩小为1/26,故提高整体转换时间。

3 改良RC模数转换的实际案例

图6 通用4通道遥控电路原理图(模数转换部分)

图6是我厂生产的通用4通道遥控电路原理图(模数转换部分),通过给电容C9充放电的计时,实现W1、W2、W3、W4共4路的模数转换。本方案有如下特点:(1)为节省I/O端口及原材料,4路转换共用一个充放电电容C9,共用一个放电电阻R5。(2)P2.0端口既为检测C9是否已充电到高电平的检测端口,又是C9的放电通路。(3)为缩短放电时间,提高整机运行速度,采用100欧姆小电阻放电。(4)为了降低生产成本,提高产品的竞争力,C9采用了低成本的瓷片电容,(5)加入电阻R6作为参考通道,通过比例换算巧妙解决了电容误差、温度、湿度等外部环境对转换结果的影响。

电容C9的充放电波形如图7所示,前4个锯齿波分别是W1、W2、W3、W4所在通道的充放电曲线,第5个锯齿波是参考通道R6的充放电曲线,电位器阻值为0欧或者5K时的锯齿波分别如第1个、第2个锯齿波。本实例5个锯齿波总共时长在9mS以内,满足航模20mS以内的要求。

单片机时钟采用内部高速16MHz,4分频,实测电路的A/D转换精度接近10位,即1024级。

图7 C9的充放波形图

实例中单片机2501B的端口分配如表1所示。实例程序、流程图中涉及的变量定义如表2所示。实例的程序流程图如图8所示。

表1

图8 流程图

表2

实例的编程过程

(1)系统初始化

①、各变量TR6、TWR1、TWR2、TWR3、TWR4等赋值0;②、因各通道端口通过电阻相连,为避免各通道充放电时的相互干扰,将相关端口P2.0~P2.5置为高阻模式,并全能上拉电阻。

(2)检测参考通道值TR6,即检测P2.1端口通过电阻R6给电容C9充饱电的时长。

第一步,P2.0端口设置为输出模式,同时P2.0端口置0,即置为低电平,并延时1毫秒时间,让C9上的电荷通过100欧的小电阻R5从P2.0端口快速放掉;第二步,放电完成后,P2.0端口恢复为高阻输入模式,为检测C9是否已充饱电做准备;同时,P2.1端口设置为输出模式,端口置1,即置为高电平,P2.1端口电流开始通过5.1K的电阻R6给电容C9充电;第三步,检测判断P2.0端口是否为1(高电平状态),如果为0,表示电容C9尚未充饱电,则变量TR6的数值加上1,(TR6=TR6+1),然后重复第三步;如果检测P2.0的结果为1,表示P2.1端口电流已通过电阻R6给电容C9充饱电,此时TR6的大小值就是R6给电容C9的充电时长。

(3)类似于上面的3.4.2方法,检测记录出第1至4通道的充电时长TWR1、TWR2、TWR3、TWR4。

(4)数据处理

①根据参考通道时长TR6,修正计算出各电位器充电时长TW。

R1、R2、R3、R4为100欧的保护电阻,先算出给C9充电时100欧电阻所消耗的时长T100,TR6是5100欧(5.1k)所消耗的时长,所以5100:TR6=100:T100,T100=100*TR6/5100,5.1k=5k+100欧,故阻值为5k时所需时间TR5K=TR6-T100。因第一通道是W1串联R1,故TWR1=TW1+T100,得出TW1=TWR1-T100,同理,TW2=TWR2-T100,TW3=TWR3-T100,TW4=TWR4-T100。

②根据产品的精度要求,按比例换算出各电位器的模数转换结果ADW。

本实例的A/D转换精度要求为256级,从0~255间变化,即TR5K等效于255,故TR5K:TW1=255:ADW1,得出电位器W1的模数转换结果数值ADW1=255*TW1/TR5K,同 理 ADW2=255*TW2/TR5K,ADW3=255*TW3/TR5K,ADW4=255*TW4/TR5K。

4 结束语

本文介绍一种经过改良的单片机数模转换技术,其特点是低成本,高精度和实用性,目前本方案已应用在遥控航模飞机、遥控汽车、遥控船、四轴飞行器等多种玩具产品中,数量超百万套,产品已销往世界各地,历经严寒酷暑考验,性能稳定,本方案生产的电子产品,也已通过美国的FCC、欧盟的CE、RTTE、日本的PSE认证。本方案的物美价廉,成功帮助所在电子厂在激烈的市场中保持竞争优势。