在msp430上使用AWM3300

在msp430上使用AWM3300

属于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);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值