A/D模数转换器在很多微处理器系统中是必需的,对于内部没有集成A/D模块的某些MSP430单片机,利用其片内集成的比较器和定时器;采用Slope(斜边)A/D实现信号的数字化。本文利用MSP430F413内部集成的比较器和定时器实现SlopeA/D转换,通过测量外部热敏电阻阻值的方法实现超低功耗温度控制仪的设计,同时将获得的温度值和设定值进行比较来点亮LED,表示所操作的状态,最后对系统功耗进行评估和分析。
SlopeA/D原理
SlopeA/D技术是利用比较器而不是标准的ADC模块实现A/D转换,通过对已知容量的电容进行充、放电,记录电容放电时间,然后计算出实际的电压值达到对电压数字化。可以通过测量具有变化阻抗元件如热敏电阻进行电压数字化,若电阻不变则电压和放电时间存在V-T指数函数关系,也可以进行电阻数字化,电压不变则电阻和放电时间存在线性关系,而微控制器完成线性关系转换比计算V—T指数函数关系转换更容易,本文采用后一种方法。
MCU通过SIopeA/D转换测量阻抗的电路原理图如下图所示,
通过被测电阻Rsens和参考电阻Rref对电容进行放电,测量两者放电时间得出两者关系,具体测量方法如下:
测量Rsens阻值,首先将P1.4口置为高电平,对电容Cm进行充电,定时器TAR开始计时,然后将P1.4口置为低电平,电容Cm通过电阻Rsens放电,当电容电压降到比较器参考电压Vcaref时,比较器输出端(CAOUT)跳变,同时捕捉定时器TAR值并保存到寄存器CCR1中,该值即为被测电阻Rsens的放电时间tsens,同理对电阻Rref重复以上过程,得出参考电阻的放电时间tref,两种放电情况下Vcaref值不变,计算出唯一的未知量Rsen,大多数利用SlopeA/D测量阻值的方案都采用该方法,比指数运算计算量小且精度高。
温控仪原理以MSP430F413微控制器的DEMO板为例,结合上述介绍的阻值测量方法实现超低功耗温控仪。首先热敏电阻的阻值通过SlopeA/D转换得到,查表获得环境温度,MCU通过设置按键改变不同工作模式和设定温度值,再根据不同工作模式驱动LCD显示当前温度、设定温度及设定时间等值。
硬件设计温控仪的原理框图和原理图分别如下图所示,
包括MSP430F413、LCD显示、实时时钟和设置按键输入,由中断触发主循环每秒运行一次,执行完毕后进入LPM3模式实现系统超低功耗。
工作模式MCU的DEMO板设置有两个按键,一个“模式”按键切换不同的工作模式,另一个“设置”按键实现不同工作模式下的某些功能设置。
1.模式按键(MODE_KEY)每按一次MODE_KEY键,显示当前工作模式的内容,从模式1到模式8按下面的顺序工作:
模式1显示当前温度值(默认的显示状态),LCD显示采样的当前温度,DEMO板华氏温度测量范围为60~95F,摄氏温度测量范围为14~50℃,如果测量时超出范围值或传感器出现短路、断路,LCD上显示测温溢出提示符“---”标志,如果当前温度值低于设定温度值,LED控制指示灯点亮。
模式2设置目标温度,显示用户设定的目标温度,LCD以O.5s的频率闪烁,通过“SET_KEY”按键设置设定温度值,每按一次“SET_KEY”键目标温度在调整范围内增加1F或1℃,同时将设定的温度值保存到MCU内部“InformationA”里。
模式3显示12制实时系统时钟(时、分),此模式下如果没有“SET_KEY”或“MODE_KEY”键按下超过5s自动切换到模式1默认的显示状态下。
模式4设置系统时钟“分”,LCD显示系统时钟“分”,以O.5s的频率闪烁,通过设置“SET_KEY”键,每按一次系统时钟“分”,在调整范围内加1分钟。
模式5设置系统时钟“时”,LCD显示系统时钟“时”,以0.5s的频率闪烁,通过设置“SET_KEY”键,每按一次系统时钟“时”在调整范围内加1小时。
模式6显示系统时钟“秒”。
模式7测试低功耗状态A(LPM3+LCD显示),进入此模式后系统关闭2s,定时测温处于LPM3模式,RTC时钟运行并定时刷新LCD显示,LCD显示“LPXX”,其中“LP”为低功耗,“XX”为时钟“秒”。
模式8测试低功耗状态B(LPM3),进入此模式后系统关闭2s,定时测温,同时关闭LCD显示,仅RTC时钟运行系统处于LPM3模式下。
2.设置按键(SET_KEY)在模式2、模式4和模式5状态下, “SET_KEY”键有效,用来调整当前模式的内容。模式2状态时每按一次“SET_KEY”键,温度增加1℃或1F,以℃为单位时在14-50℃范围内调整,以F为单位时在60~95F范围内调整:模式4状态时每按一次“SET_KEY”键,时钟“分”在0~59范围内调整增加1;模式5状态时每按一次“SET_KEY”键,时钟“时”在O-12范围内增加1。
中断和低功耗模式分配A-CLK为系统时钟源,为充分体现低功耗,程序要求分时工作的同时尽可能进入合理的睡眠模式,并利用中断模式唤醒。简单列举睡眠模式和中断唤醒:LPMO模式时5ms电容充电中断,LPM3模式时O.5s定时中断,20ms键盘消抖中断,放电检测中断;同时1s内可以分时完成如修改时钟、测量温度、修改显示、扫描键盘以及温度设定和时钟设定等工作。
温控仪的实物图如下图所示。
软件设计各中断服务程序及主程序流程图分别如下图所示。
功耗分析
系统功耗分析图如下图所示,
图中近似相等的时间和电流均用统一的状态标号,不同状态标号对应的电流值和意义如下表所示,
状态标记 | 功能描述 | 执行时间 | 工作状态 | 电流耗损 |
1 | 主程序运行活动模式 | 70μs(每次) | LCD显示CPU运行 | 1μA+300μA=301μA |
2 | 电容充电 | 5.000ms(每次) | LCD显示CPU睡眠(LPMO) | 1μA+94μA=95μA |
3 | 电容放电 | 1.400ms(每次) | 比较器A运行LCD显示CPU运行 | 47UA+IUA+94UA=142μA |
4 | 主程序放电处理 | 310μS | LCD显示CPU运行 | 1μA+300μA=301μA |
5 | 睡眠 | 985.955ms | LCD显示CPU睡眠(LPM3) | 1μA+0.9μA=1.9μA |
6 | 每秒钟修改时钟并显示 | 247μs(每次) | LCD显示CPU运行 | 1μA+300μA=301μA |
7 | 睡眠 | 999.753ms(每次) | LCD显示CPU睡眠(LPM3) | 1μA+O.9μA=1.9μA |
系统运行时主程序循环一次所消耗的功率值如下表所示,
状态标记 | 执行次数 | 电流(典型值) | 持续时间 | 总时间 | μA-ms |
1 | 4 | 301μA | 0.070ms | 0.28ms | 84.28 |
2 | 2 | 95μA | 5.000ms | 10.000ms | 950 |
3 | 2 | 142μA | 1.400ms | 2.800ms | 397.6 |
4 | 1 | 301μA | 0.310ms | 0.310ms | 93.31 |
5 | 1 | 1.9μA | 986.61ms | 986.61ms | 1874.559 |
6 | 1 | 301μA | 0.720ms | 0.720ms | 216.72 |
7 | 1 | 1.9μA | 999.280ms | 999.280ms | 1898.632 |
2s | 5515.101 | ||||
2.757μA/s |
其中电容,二极管和I/O口的漏电流忽略不计。