基于MSP430单片机的热敏电阻温度测量设计

2010-12-18 09:24:45 来源:《半导体器件应用》2010年01-02月刊 点击:1381
1 引言
测量温度一般采用热敏电阻传感器,测量的方法有R-V转换电压测量法和R-F转换频率测量法。这两种方法的电路复杂且成本高,电路中很多元器件直接影响测量精度。本文论述一种类R-F转换频率的测量法,用NE555定时器和热敏电阻等器件构成振荡器,由MSP430单片机的捕获功能来捕获多谐振荡器输出信号的高低电平并计数,热敏电阻Rt与捕获高低电平时的计数值的差值成正比关系。该方法电路简单、成本低,系统流程框图如图1所示。
2  负温热敏电阻
PT-25E2热敏电阻温度、阻值变化曲线如图2所示。PSB型负温热敏电阻由Co、Mn、Ni等过渡金属元素的氧化物组成,经高温烧制成半陶瓷,利用半导体毫微米的精密加工工艺,采用玻璃管封装,耐温性好,可靠性高,反应速度快且灵敏度高。它采用轴向型结构,便于安装,能承受更高温度,且玻璃封装耐高低温(-50℃~350℃)。
3  MSP430单片机计数法测温原理
以NE555定时器为核心组成典型的多谐振荡器,把被测热敏电阻Rt作为定时元件之一接入电路中,NE555定时器输出引脚接MSP430单片机的P1.2脚(Timer_A:捕获、CCI1A输入引脚)。系统电路如图3所示。
由NE555工作原理可知,多谐振荡器输出信号(周期性矩形波)的高电平时间(1个周期内)为:
tH=ln2·(R1+R2+Rt)·C1                                               (1)
输出信号的低电平时间为:
tL=ln2·R2·C1                                 (2)
若控制MSP430单片机的定时器A计数时钟的频率设置为f,则捕获到高电平时间内的计数值为NH,捕获到低电平时间内的计数值为NL,所以有:
NH=tH f      NL=tL f                                 (3)
从而得到两次捕获到的时间段的计数差值为:
N=NH-NL=tH f-tL f                              (4)
由上4个式子可算出:
                                (5)
因为f、C1、R1均为定值,所以Rt与N成正比,且增大f还可以提高测量精度。查表可得温度值。
由上述测量原理可知,误差主要来源为:R1、R2精度,单片机的定时器和电容器的精度以及稳定度。这里选用高精度(±0.001%)、温度系数小于±0.3×10-6/℃的精密金属箔电阻器。因此当选用高精度、高稳定度的电容器,且单片机的工作频率足够高时,就可以得到较好的测温精度。
4  MSP430单片机捕获原理
捕获计数法的原理如图4所示。通过MSP430单片机TACTL寄存器给定时器A设置一个固定的时钟频率和计数模式(本系统设为连续模式)。又知Timer A工作在连续计数模式时,TAR(16位)计数范围是O-FFFFH值。定时器A连续模式计数启动后,TAR的值开始从O-FFFFH-O-FFFFH……不断重复计数,直至软件控制其停止计数为止;同时设置TACCTL寄存器的CMx、CAP、CCIE位,在多谐振荡器输出方波的上升沿和下降沿都触发捕捉并中断。这样当每次沿到来,进入中断并捕获上升沿和下降沿时刻的值(如TACCRla、ACCR1b、TAC-CRlc、TACCR1d......),然后用此次捕获的值减去上次捕获的值即可得高或低电平时间内的计数值NH、NL。例如:NH=TACCR1b-TACCRla、NL=TACCR1c-TACCR1b,代入式4、式5便可得出Rt的值,查表即得温度值。
TASSELx:4种时钟源供选择。
IDx:4种预分频选择。
MCx:TAR计数模式选择,MCx=11,上升沿和下降沿都捕获。
TAIE:Timer_A中断使能,为“1”中断使能。
CMx:捕获触发信号选择。
SCS:捕获同步或异步选择,“0”同步、“1”异步。
CAP:捕获模式选择,“0”比较、“1”捕获。
CCIE:捕获/比较中断选择,为“1”中断使能。
4  软件设计
基于MSP430单片机捕获中断测温程序流程如图5、图6所示,包括主程序流程、捕获中断和溢出中断流程。  Timer_A初始化代码如下(MSP430F149):
void init_timerA(void) {
     P1SEL | = BIT2;
          //设置P1.2端口为功能模块(捕获:CCI1A输入)使用
     TACTL | = TASSEL1+ID1+ID0+TAIE+MC1;
     //定时器A时钟信号选择SMCLK/8分频,同时设置
     //定时器A计数模式为连续增计模式
    CCTL1 |=CM1+CM0+SCS+CAP+CCIE;
    //输入上升沿和下降沿都捕获,CCI0b为捕获信号源
}
捕获终端和溢出中断函数代码如下:
#pragma vector=TIMERA1_VECTOR  //定时器A中断处理
__interrupt void timer_a(void) {
    switch(TAIV){  //向量查询
case2:  //捕获中断入口
   {
       if(measure_flag==1) { //判断是否允许捕获
          temp[0]=temp[1];
          temp[1]=TACCR1;
                            //捕获上升沿或下降沿时刻的TAR值
          enter_times++;
          if(enter_times!=1) {
              pulse_time[enter_times-2]=temp[1]-temp[0]
              +overflow*65536;
              overflow=0;
              //保存捕获高电平或电平时间段计数值并将
              //捕获时的TAR溢出次数清掉
              if(enter_times==3) {
                 enter_times=0;
                 if(pulse_time[0]<pulse_time[1]) {
                     temp[0]=pulse_time[0];
                     pulse_time[0]=pulse_time[1];
                     pulse_time[1]=temp[0];
                } //uplse_time[0]存高电平计数值
                  //pulse_time[1]存低电平计数值
                measure_flag=0;
                CCTL1 &=~CCIE;//捕获中断关闭
          }
          } 
             } break;
        }
case 10://溢出中断入口
{
distance_time++;
if(measue_flag==1) overflow++;
                                       //捕获时TAR溢出次数
if(distance_time==10) {
//未允许捕获时TAR是否溢出10次(即定时捕获)
  CCTL1 | =CCIE+CAP;//开启捕获中断
distance_time=0;
     measure_flag=1;//置允许捕获标志位
enter_times=0
}break;
      }
   }
}
完成一次测量,根据,可得:

代入常量f、C1、R2的值,即可得热敏电阻阻值,通过查表可得温度值。查表温度间隔一般为1℃,如果忽略热敏电阻1℃以内的非线性误差,可以将两个摄氏度之间取线性计算,这样可以得到0.01℃的分辨率。
6  结语
由测量原理可知:被测电阻的阻值越大,测量误差越小。笔者已应用该方法设计出一款温度计,测量范围为0℃~80℃,分辨率达到0.01℃,误差在0.3℃以内。该设计充分利用了MSP430单片机的捕获功能和低功耗功能,使得电路功耗低、电路简洁、价格低廉、精度高。
本文为哔哥哔特资讯原创文章,未经允许和授权,不得转载,否则将严格追究法律责任;
Big-Bit 商务网

请使用微信扫码登陆

x
凌鸥学园天地 广告