历史上的今天
今天是:2024年10月30日(星期三)
2019年10月30日 | 在msp430上使用AWM3300
2019-10-30 来源:eefocus
属于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);
}
史海拾趣
|
本公司为相对论科技有限公司,拥有强大的开发团队和雄厚的经济实力。现从事ARM系列开发板研发,承揽自动化控制,数据采集、传输、处理、显示等应用工程开发项目及各种嵌入式系统工程的研发项目。出售MPEG4 编解码方案,同时公司还自主研发了GPS导航 ...… 查看全部问答> |
|
之前我基于PC机开发了一套在Linux系统下运行的自助终端系统, 数据库用的是mysql, 由于有大容量的硬盘,根本不用操心数据存储的问题。 现在我想把程序移植到ARM9的板子上,选用了嵌入式的数据库SQLite。板子上的存储单 ...… 查看全部问答> |
|
题目:说明1M×1位DRAM片子的刷新方法,刷新周期定为8ms。 解答:如果选择一个行地址进行刷新,刷新地址为A0——A8,因此这一行上的2048个存储元同时进行刷新,即在8ms内进行512个周期的刷新。按照这个周期数,512×2048=1048567,即对1M位的存储 ...… 查看全部问答> |
|
(求解答)中断函数特别是Tmr_TickISR_Handler 中断退出时必须加OSIntExit ()函数吗? 中断函数特别是Tmr_TickISR_Handler 中断退出时必须加OSIntExit ()函数吗? 但是我看到许多别人写的中断根本就没加,也就是中断后不做任何调度。 void Tmr_TickISR_Handler (void) { OSTimeTick(); /* Call ...… 查看全部问答> |
|
求助大神,看看我这个毕设有没有需要改进的地方,真心求提高啊! 基于at89s52的瓦斯浓度检测仪的设计 设计要求: (1)体积小,重量轻,易携带。在电路中采用单片机作为主控制器,采用电池供电,便于携带。 (2)功能强大。检测仪打破了常规的瓦斯检测仪表功能单一的缺点,加人了一些人性化的辅助 ...… 查看全部问答> |
|
本帖最后由 ddllxxrr 于 2014-8-19 13:21 编辑 在前面的mbed数字输入输出初步应用中,通过读取管脚的电平状态来判断用户的输入,但我们发现这种实现方式会浪费大量的MCU时间在检查管脚的状态上,应该说应用效果并不理想,那么有没有另外的方式无需 ...… 查看全部问答> |
|
长期以来,线性稳压器一直得到业界的广泛采用。在开关模式电源于上世纪60年代后成为主流之前,线性稳压器曾经是电源行业的基础。即使在今天,线性稳压器仍然在众多的应用中广为使用。下面我们来就针对线性稳压器的基本知 ...… 查看全部问答> |




