(转载)STM32单片机的酒精浓度探测仪设计

原文链接

引言
    酒后驾车是导致交通事故的一个重要原因,给人们的生活和生命安全带来巨大的危害。为了防止机动车辆驾驶人员酒后驾车,现场实时对人体呼气中酒精含量的检查已日益受到重视。本系统针对现有酒精传感器恢复时间较长的问题,通过计算斜率成功地实现了快速酒精浓度检测,缩短了检测间隔时间,大大提升了酒精检测的效率。

1 酒精浓度探测仪的整体结构
    
酒精浓度探测仪由单片机、酒精传感器、信号调理电路、语音报警模块、TFTLCD显示模块、通信模块、功放模块等部分组成,结构框图如图1所示。由于语音报警模块和TFTLCD显示模块对于单片机的处理速度和处理数据量要求高,再加上酒精检测反应速度较快,实时性较高,因此采用了ST公司的STM32系列的单片机作为主控端。ME3-C2H5OH电化学式气敏元件具有功耗低、精度高、灵敏度高、线性范围宽、抗干扰能力强、重复性优异和稳定性高等优点。

本文引用地址: http://www.21ic.com/app/mcu/201401/202794.htm

a.JPG



2 硬件设计
2.1 单片机及其外围接口的设计
    
单片机采用低功耗高速工业级芯片STM32F103VET6。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex—M3内核,STM32F103为“增强型”系列,时钟频率达到72MHz,具有512 KB ROM、64 KB RAM,普通I/O口为80个,具有8个定时/计数器,3个SPI、2个I2C总线、3个UART、1个USB、1个CAN总线等通信端口。具有2个I2S音频口、1μs的双12位ADC、4 Mbps的UART、18Mbps的SPI、18 MHz的I/O翻转速度,内部集成优异的安全时钟模式、带唤醒功能的低功耗模式、内部RC振荡器、内嵌复位电路等,完全满足本酒精浓度探测仪的设计需求。
    电源电路采用LM2596作为初级电压转换芯片,用来提供5 V电压给外围模块供电,采用AMS-3.3作为末级电压转换芯片,用来提供3.3 V电压给STM32供电。此芯片的输出电流可以达到1 A,输入电压调节率小于0.2%,负载调节率小于0.4%,输出电压稳定。
    看门狗电路采用美国IMP公司生产的系统μP监控芯片IMP706,IMP706能在上电、掉电期间或手动情况下产生复位信号,该器件内含有1个1.6 s的看门狗定时器和4.4 V的电源电压监视器。另外,IMP706还有1个1.25 V门限的电源故障报警电路,可用于检测电池电压和非5 V的电源。
2.2 酒精传感器
    
ME3-C2H5OH型酒精传感器根据电化学原理工作,利用待测气体在电解池中工作电极电位上的电化学氧化过程,待测气体电化学反应所产生的电流与其浓度成正比并遵循法拉第定律,通过检测电流的大小就可以确定待测气体的浓度。ME3-C2H5OH传感器检测处理电路如图2所示。对被测者呼出气体中酒精浓度的反应以采样电阻R1来获取采样电压,通过运放负反馈放大电路,对采样电压进行放大。电路中的RT是热电阻,用来抵消温度漂移,保证恒定的放大系数。放大后的电压信号送入STM32的ADC中,对经过A/D转化后的数据进行分析处理,最后计算出酒精浓度的大小,从而判断被测者是否饮酒。判断结果通过语音芯片进行语音提示,再通过LCD显示浓度值。

b.JPG


    图3酒精传感器为灵敏度、响应恢复及输出信号特性图,图4为浓度线性特征曲线图。由图3和图4可以看出,ME3-C2H5OH型电化学元件灵敏度高、响应速度快、零点漂移较小,而且此元件是线性的。因此,采用这类电化学元件来检测酒精浓度值精度较高,反应较快。

c.JPG


2.3 语音报警模块
    
XF-S4040-CN中文语音合成芯片,是安徽中科大讯飞信息科技有限公司推出的基于InterSound4.6中文语音合成系统而设计的一款全新的中文语音合成芯片。该芯片可以通过异步串口(UART)及I2C总线接口方式接收命令和待合成的文本,直接合成为语音输出,主要面向中高端应用领域,提供一套语音合成效果出色、体积极小的语音解决方案。语言合成模块电路如图5所示。

f.JPG


    XF-S4040-CN中文语音合成芯片针对嵌入式应用领域设计,具有合成任意中文文本及英文字母的能力。该芯片的主要特点是合成语音自然度高,控制接口简单方便,可调节功能强大。其操作命令格式如下所示。

d.JPG


    基于串口的操作例程如下:
   e.JPG
   g.JPG
2.4 功放模块
    
TDA7266是双路音频立体声放大器,以MULTI—WATT形式封装,专门为音乐设备和彩色电视机的高质量音频放大电路而设计。语音报警模块输出的左声道和右声道的语音信号通过电位器进入TDA7266放大器中,进行语音信号的放大,电位器用来调节音量大小,放大后输出两路音频信号,将这两路分别接到两个扬声器上。

h.JPG


    TDA7266功放电路简单,声音效果比较好,因此被广泛应用于高质量的音频放大上。功放模块电路如图6所示。
2.5 通信模块
    
要求通信距离为几十米到上千米时,广泛采用RS-485串行总线,RS-485采用平衡发送和差分接收的组合,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200 mV的电压,故传输信号能在千米以外得到恢复。RS-485接口总线上允许连接多达128个收发器,即具有多站能力,这样用户可以利用简单的RS-485接口方便地建立起设备网络。本设计中,正是考虑到酒精浓度探测仪的数据有可能要传回电脑上位机终端,要求传输距离比较远而且信号失真小,因此选择RS-485通信。
2.6 TFTLCD显示模块
    
酒精浓度探测仪在使用中,需要显示酒精浓度值大小、报警信息,同时还需要输入酒精浓度报警点预设值,用来设定酒精浓度报警的范围。因此,本设计中采用TFTLCD来显示酒精浓度值,TFTLCD具有触摸功能,可用于输入酒精浓度预设值。
    TFTLCD采用了26万色的TFTLCD屏幕,分辨率为320×240,可以实现友好的人机接口界面显示。TFTLCD采用了Ilitek公司生产的ILI9320,它可以通过多种并行通信方式与单片机通信。TFTLCD屏幕自带电阻式触摸屏,利用压力感应进行控制,采用TI公司生产的ADS7846作为触摸屏控制芯片。ADS7846内部集成了12位逐次逼近型A/D转换器,转换频率为125 kHz。使用时,ADS7846通过两次A/D转换得到触点位置的X、Y
坐标,通过SPI总线与STM32通信,完成控制信息的输入。

3 软件设计
3.1 总体软件设计方案
    
系统初始化完毕后,首先采集酒精浓度传感器的值,采用do…while()等待传感器初始化,直到最佳状态,否则就一直等待。传感器初始化完成之后,就开始进入循环检测模式,当有人吹气时,可根据斜率的变化范围检测到,然后判断其是否喝酒。当检测到酒精气体时,传感器的电导率将会随着气体浓度的增大而增大,导致与传感器连接的分压电阻的电压增大,单片机A/D接口的第7个通道将会采集此电压。当电压值增大到一定程度,即酒精浓度达到设定的值时,就会将标志位置为喝酒状态;如果电压降低,即酒精浓度为零,此时标志位置为正常状态。根据以上两种不同状态,蜂鸣器、语音模块以及LED指示灯进行不同的报警。单片机不停地进行定时的A/D转换,在转换结束中断中进行滤波、比较,两次A/D测量值的差值既是电压的变化率,也就是所需要的斜率值,将此值与之前设定的斜率范围值进行比较,从而也可以判断出被测者是否饮酒。LCD会一直将采集到的值进行滤波和取均值后的值进行动态显示。
3.2 斜率算法设计
    
斜率算法的设计中主要使用到了单片机的定时A/D转换资源,根据前文所述,需要计算电压变换的斜率,即电压在一定时间内的变化范围,使用定时A/D转换功能可轻易地实现这一需求。

i.JPG


    图7为A/D转换中断程序流程图,在主程序中只要根据此中断设置的标志位即可作出相应的操作,比如语音播放的控制、蜂鸣器报警、LED灯的闪烁等。

结语
    
本文详细介绍了基于STM32的酒精浓度探测仪设计方法。该探测仪具有高精度、高灵敏度、友好的人机交互、智能化的语音报警、携带方便等优点,可适用于各种需要对人体酒精含量进行检测的场合,尤其适用于酒后驾车的检测,具有广阔的应用前景。

  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
紫外线探测仪是一种用于检测紫外线辐射的仪器。它广泛应用于许多领域,如医学、环境监测、化学分析等。本文将介绍基于stm32单片机的紫外线探测仪设计过程。 一、硬件设计 1.紫外线传感器 紫外线传感器是紫外线探测仪的核心部件,它能够将光能转化为电信号输出。常用的紫外线传感器有光电二极管、硅光电池、石英玻璃光管等。本设计采用的是硅光电池,其特点是灵敏度高,响应速度快,成本低廉。 2.滤光片 由于紫外线的波长范围广,为了提高紫外线传感器的选择性,需要在光路中加入一个滤光片,以滤除不需要的波长。常用的滤光片有钴玻璃、石英玻璃等。本设计采用的是石英玻璃滤光片。 3.放大电路 为了提高紫外线传感器的信号输出,需要设计一个放大电路。本设计采用的是运算放大器放大电路,其具有放大倍数高、精度高等优点。 4.显示电路 为了方便用户观察测量结果,需要设计一个显示电路。本设计采用的是128×64点阵液晶显示屏,能够显示测量结果和一些基本参数。 二、软件设计 1.系统框图 本系统的软件框图如下所示: ![image-20210928170119167](https://gitee.com/liuyang0001/blogimage/raw/master/img/image-20210928170119167.png) 2.程序流程 主程序流程如下所示: ``` while(1) { ReadSensor(); //读取传感器数据 Calculate(); //计算紫外线强度 Display(); //显示测量结果 } ``` 3.关键代码 读取传感器数据的代码如下所示: ``` u16 ReadSensor(void) { u16 adc_value; ADC_Cmd(ADC1, ENABLE); //使能ADC1 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); //配置ADC通道0 ADC_SoftwareStartConv(ADC1); //开始转换 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); //等待转换完成 adc_value = ADC_GetConversionValue(ADC1); //读取转换结果 return adc_value; } ``` 计算紫外线强度的代码如下所示: ``` float Calculate(void) { float uv_value; u16 adc_value = ReadSensor(); uv_value = (float)adc_value / 4096 * 3.3 / 0.1; //计算紫外线强度 return uv_value; } ``` 显示测量结果的代码如下所示: ``` void Display(float uv_value) { char buf[16]; LCD_Clear(); //清屏 sprintf(buf, "UV Value: %.2f", uv_value); //格式化字符串 LCD_ShowString(0, 0, buf); //显示字符串 } ``` 三、总结 本设计基于stm32单片机实现了紫外线探测仪设计,具有测量精度高、响应速度快、成本低廉等优点。在实际应用中,还可以进一步优化设计,提高系统的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值