宏晶科技STC15F系列单片机
用RC充放电实现检测外部电压
对于没有ADC的MCU,而又要测量外部的一个电压时,使用RC充放电的方式是比较容易实现并且低成本的方法。 STC15F系列是1T的MCU,其IO口有OPEN-DRAIN模式,此模式可以很容易用一个IO口配合一个定时器实现RC充放电来测量外部未知电压。如果没有空余的定时器,也可以使用指令循环的方式实现。本例使用定时器。 本范例使用P3.2(INT0)来做RC测量,电路和波形示意图如下: 操作流程: - 初始化程序将P3.2设置成OPEN-DRAIN模式, 并将P3.2输出0给电容放电。INT0设置成上升沿中断。Timer 0设置成16位自动重装定时器模式,时钟源为12T,允许中断。
- 测量时,先清Timer 0的TH0、TL0,然后将P3.2输出1开始对电容充电,接着设置TR0 = 1来启动Timer 0,然后在INT0中断里设置TR0 = 0来停止计数,并将P3.2输出0对电容放电。读出TH0、TL0的值就是RC充电时间。
由于MCU工作在5V时,IO口读到“1”的门限电压大约为2V,所以要求输入的电压高于2V,本例的测试数据从4~12.4V,测试结果参考后面的附录1。 假设输入电压为Ux,IO口门限电压为2V,则RC充电时间为: T = - R * C * ln ( 1 – 2 / Ux ) 按图示参数,当输入为10V时,RC时间大约为446uS,附录1中实测为447uS。 由于RC时间跟R和C有关,而R的温漂一般较小,但普通电容的温漂较大,所以要使用温漂小并且漏电也小的电容。 由充电公式或曲线图可知,Ux和RC值的关系是非线性的,所以实际项目使用时,要根据自己的实际电路做一些标定,这样可以得到比较准确的值。 本方法适用于对测量精度要求不是很高的场合。
附录1:测量结果和曲线
完整的Word格式文档51黑下载地址:
STC15F104W利用RC充放电使用IO口测量外部电压.DOC
(99.5 KB, 下载次数: 40)
|