×
单片机 > 单片机程序设计 > 详情

在msp430上使用AWM3300

发布时间:2020-05-26 发布时间:
|

属于msp430的ad采样的应用。由于项目需要,在中断中对AWM3300模拟输入做了阈值检测。一般使用ad采样时,不需要在中断中做此处理。


使用器件型号:msp430F169/msp430F149,AWM3300@honeywell

典型应用电路:具体看AWM3300使用手册


#include "msp430x16x.h"

#include"AWM.h"

//标注CO2的代码与AWM3300无关

double CO2_o,ADC_CO2;//CO2


double ADC_Vol_speed=0,sum,ADC_temp;

int i,gas_rate;


double gas_flow_rate(double voltage)

{

  if(voltage > VOL_SP800)                                                                                                                                            

    return (800 + (voltage - VOL_SP800)*200/(VOL_SP1000 - VOL_SP800));

  if(voltage > VOL_SP700)

    return (700 + (voltage - VOL_SP700)*100/(VOL_SP800 - VOL_SP700));

  if(voltage > VOL_SP500)

    return (500 + (voltage - VOL_SP500)*200/(VOL_SP700 - VOL_SP500));

  if(voltage > VOL_SP400)

    return (400 + (voltage - VOL_SP400)*100/(VOL_SP500 - VOL_SP400));

  if(voltage > VOL_SP300)

    return (300 + (voltage - VOL_SP300)*100/(VOL_SP400 - VOL_SP300));

  if(voltage > VOL_SP200)

    return (200 + (voltage - VOL_SP200)*100/(VOL_SP300 - VOL_SP200));

  if(voltage > VOL_SP100)

    return (100 + (voltage - VOL_SP100)*100/(VOL_SP200 - VOL_SP100));

  if (voltage > VOL_SP0)

    return (voltage - VOL_SP0)*100/(VOL_SP100 - VOL_SP0);

else

return 0;

}

void AWM3300_init(void)

{

  WDTCTL=WDTPW+WDTHOLD;

  P6SEL|=BIT0;//P6.0模拟ADC输入(上电后默认0为输入)

  ADC12CTL0 &=~ ENC;

  ADC12CTL0=SHT0_2+ADC12ON;//采样转换时间,默认参电1.5V

  ADC12CTL0|=REFON+REF2_5V;//参电选择2.5V

 // for ( i=0; i<0x3600; i++);

  ADC12CTL1=SHP;//选用采样定时器作为触发信号

  ADC12IE=BIT0;//使能1中断

  ADC12MCTL0=SREF_1;

  ADC12CTL0 |=ENC;//AD转换使能

}

int main(void)

{

  AWM3300_init();

  for(;;)

  {

    ADC12CTL0|=ADC12SC;//开始转换

    _BIS_SR(CPUOFF+GIE);

    if(ADC_Vol_speed!=0){

      gas_rate=(int)gas_flow_rate(ADC_Vol_speed*1000);

      ADC_Vol_speed=0;

    }

    

//    if(gas_rate!=0)

//    {

//     return 0;

//   }

  }

}


#pragma vector=ADC_VECTOR

__interrupt void ADC12_ISR(void)                                                          

{

  ADC_temp=(double)ADC12MEM0/(double)0xfff*2.5*2;

  if((double)ADC12MEM0>=2818){                    //ad:2818-->vol:3.44/2

    i++;

    sum+=(double)ADC12MEM0;

  }

  

  if(i>=19){

    ADC_Vol_speed=(sum/(double)0xfff)/20*2.5*2;

    sum=0;

    i=0;

  }

  ADC_CO2=(double)ADC12MEM0/(double)0xfff*2.5;//CO2

  CO2_o=ADC_CO2*5000.0/3.0;//CO2

//  ADC_Vol_speed=((double)ADC12MEM0/(double)0xfff)*2.5*2;

  //if(ADC12MEM0<0x7ff)//max:0xfff,half:0x7ff 小于1/2AVCC

  _BIC_SR_IRQ(CPUOFF);

}


关键字:msp430  AWM3300  ad采样

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机电子密码锁仿真 可修改密码