1、原理

51 系列单片机具有两个以上 16 位双通道定时器(TIME0 和 TIME1),每个通道可选择为输入捕获方式来测量脉宽。我们用片内 16 位的定时器外接运放、比较器实现双积分 A/D 转换。原理图如图 1 所示(电源和 5l 单片机外围电路同常规电路),TL082 是 JFETINPUT 运放;LM358 作为比较器;MC4066 是多路开关。51 单片机 P1 口的 P10、P11、P12 作为输出,控制 MC4066 多路开关的输入选择;INT0 作为中断输入口,捕捉 LM358 比较器的输出电平跳变。C1 为积分电容,常取 0.22μF 左右的聚丙烯电容,R2 为积分电阻,可取 500k 左右,U2A 为积分运放,U2A、C1、R2 构成了积分器,U2B 是过零检测运放。VIN 为输入电压,VREF 为基准电压,AGND 为转换器的参考零点。VREF 和参考零点以 R9、R10、R11 分压产生。


测量前,TK3=1、TK2=0、TK1=0,打开 U1C、U1D 模拟开关,使积分器输入等于 AGND,进入调零阶段,第一次启动转换的时间为 300ms;启动以后调零时间为 40ms。开始转换时,TK3=0、TK2=0、TK1=1,积分器输入接至输入电压,使 VIN 通过积分电阻 R2 向 C1 充电,设积分时间为 T。然后,将 TK3=0、TK2=1、TK1=0,即积分器输入接至基准电压 VREF,电容 C1 开始通过 R2 向 VREF 逆向放电。当运放的输出低于 C2 电容电压时,比较器输出反转。然后,TK3=1、TK2=0、TK1=0,打开 U1C、U1D 模拟开关,又进入调零阶段。设逆向充电的时间为 t,则有

 

 

上式中 VIN 是被测电压,T 是正向积分时间,t 是反向积分时间,VREF 是基准参考电压,AGND 是转换器的参考零点。积分器输出波形如图 2 所示。

 

 

 

2、软件结构

程序由初始化程序、输入捕捉中断服务程序、TIME0 中断服务程序和调用该程序模块的接口程序组成。

 

程序初始化时,置 TK3=1、TK2=0、TK1=0,软件 300ms 延时,进行初始调零;进行正向积分时,关闭 INT0,置 TK3=0、TK2=0、TK1=1,开 TIME0(设置 TIME0 工作在定时方式),进行定时正向积分;正向积分完毕,设置定时 TIME0 工作在输入捕获方式,打开 INT0,置 TK3=0、TK2=1、TK1=0,进行反向积分,TIME0 进行计时,利用另一个寄存器来计数定时器溢出次数;当比较器输出反转、INT0 中断产生时,单片机自动关断 TIME0,完成一次双积分 A/D 转换。AD 值(HEX)=寄存器计数值*100+TIME0。

 

源程序清单如下:

 

 

 

 

 

 

 

 

 

 

 

3、工艺上应注意的问题

(1)充放电时间(T 和 t)一般不能超过 2RC。超过时线性误差会增大。

 

(2)PCB 板设计时模数电源的地要分开,单点相接;AD 转换部分元件连线尽可能短,这部分元件应与数字部分元件分开;PCB 板应采用较厚铜箔的板材。

 

(3)保持 PCB 板和元件的清洁,模拟部分应涂上防水胶。

 

(4)积分电容应采用漏电小的聚丙烯电容,基准分压电阻和积分电阻应采用温度系数和噪声较小的电阻。