内容发布更新时间 : 2024/12/22 18:57:15星期一 下面是文章的全部内容请认真阅读。
龙源期刊网 http://www.qikan.com.cn
基于STM32单片机的多路温度检测系统
作者:魏迎军 闫亚超 韩洁
来源:《科学与财富》2011年第09期
[摘 要] 本文介绍了一种基于STM32F103xB单片机的多路温度监测系统。该系统采用的STM32单片机内部集成了双12位ADC,大大简化了硬件装置。采用集成型温度传感器AD590采集温度信号,不仅适合近距离的温度监测,而且同样适合远距离测量控制。8路温度可以循环显示,也可以固定显示某一路的实时温度。能对8路分别设定不同的温限,超温限自动报警。采用LED数码管显示有关信息,利用4*4矩阵键盘进行各种操作,使得人机对话更加方便。该系统结构简单、性能稳定、工作可靠、维护方便、抗干扰能力强,具有广阔的应用前景。
[关键词] 温度检测 AD590 单片机 报警 1、绪论
环境温度在现代生产生活中担任着非常重要的角色,而目前人们还不能很好的控制温度,因此对温度的实时监测控制就变得尤为重要。例如:蔬菜大棚中的室温和土壤的温度都会影响蔬菜的生长;粮仓、弹药库中的温度都是要检测的重要对象[1];冶金工业中温度对产品性能的影响至关重要等等。本文介绍的温度检测报警系统适用于所有的需要对常温进行检测的场合。本系统即能循环显示各通道温度及相应通道号,还能通过键盘在任意通道间切换,使人机对话更加方便灵活。 2、总体原理框图
如图1所示,本系统共分为电源、模拟采集、键盘、单片机、LED显示、报警等六个部分。模拟采集部分安装在测试点,将温度信号转换为电信号,并送给单片机进行数据处理;单片机通过内部的模数转换器,将模拟电压信号转换成为数字信号;键盘模块负责通道切换、温度范围设置;LED数码管模块显示当前测试点温度。FLASH存储模块存储模拟采集模块采集到的温度信号和预先设定的温限值。当某测试点温度超出预先设定的温限时,报警模块发出报警信号通知工作人员。
3、硬件电路设计
龙源期刊网 http://www.qikan.com.cn
3.1微控制器与存储器部分
STM32F103xB采用LQFP64封装[4],GPIO中PA0(ADC_IN0)~PA7(ADC_IN7)引脚接收8路测量电路输入的电压模拟信号,使用内部的12位ADC将模拟信号转化为数字信号[5],然后送到CPU进行处理并通过LED数码管显示;PC0~PC2输出信号接到数码管驱动器MAX7219,由MAX7219驱动数码管显示相应的信息。PB0~PB3和PB4~PB7分别作为矩阵键盘的行列控制端子;PB14和PB15引脚为串行输入输出,和PB7~PB9一起控制
E2PROM25LC1024的数据读取、存储等操作。STM32完成当前温度值与设定的温限的比较,一旦当前温度值超出设定范围,由PC3输出高电平,控制555构成的多谐振荡电路工作,推动扬声器发出报警声音信号。 3.2模拟采集电路
温度传感器对整个系统的参数起到非常重要的作用。本系统对传感器的测量精度和线性度的要求较高,而且信号采集点和处理器的距离变化大,所以采用美国模拟器件公司生产的单片集成型温度传感器AD590。由于流过AD590的电流(以μA为单位)在数值上等于所处环境的热力学温度(以K为单位),所以在T℃下流过AD590的电流为(273+T)μA[2]。如图2所示[3],电阻R1将电流I转换为电压,经过电压跟随器隔离后得到UO1=(2.73+T)×R1×10-6V;在此处电压跟随器的作用是利用其高输入阻抗使I不分流。调节电位器W1使U1=2.73V,与U2同相输入端的电压信号相互抵消,当T=0℃时,使
3.3键盘部分
本系统采用4*4矩阵式键盘,通道选择中0~7号按键分别对应1~8路的温度实时采集通道;8号键作为温限调整标志信号,9号按键作为调整位左移信号;10号按键作为调整位右移信号,11、12号按键分别为数值的增大、减小信号,13号按键为确定键。14号按键作为调整结束(信号采集开始)信号,15号按键作为报警复位信号键。当有按键被按下时产生中断申请,按键的识别采用线反转法[6]。 3.4 LED显示
温度显示由8位LED数码管组成。第1位显示当前测试点的号码,第2位显示超温限的测试点的号码,第3、4、5位显示当前测试点的温度,第6、7、8位显示预先设定的当前测试
龙源期刊网 http://www.qikan.com.cn
点的温限。正常情况下,第2位熄灭;当按下“调整”键后,除第2位外,所有数码管显示数字“0”,同时通道号码显示位闪烁;按下“0~7”号通道选择键后,通道号显示位静态显示所选择的通道号,其他数码管仍然显示数字“0”;按下“调整位右移(10号)”键后,第6位数码管开始闪烁;按下“增大(11号)”、“减小(12号)”按键,调整每一位的数值,每一通道的温限设定完成后,按“确定(13号)”按键后,将温限数值存入相应的存储单元中,同时通道号显示位闪烁,进行下一测试点温限值的设定。当8个测试点的温限值设定完成后,按下“扫描开始(14号)”按键,电路开始工作。当某一测试点的温度超出温限之后,数码管2显示报警通道号码,同时报警电路发出声音信号,知道按下“报警复位(15号)”按键后,数码管2熄灭。 3.5报警电路
报警电路是由555电路构成的多谐振荡器组成;当测试点温度在预先设定的温限范围内时,PC3输出低电平,多谐振荡器不工作;当测试点温度超出温限时,PC3输出高电平,多谐振荡器开始工作,推动扬声器发出报警信号[7]。 4、温度检测系统主要软件设计 4.1主程序流程图
单片机上电后,首先进行初始化操作;初始化结束后,通过按键扫描程序判断是否有按键被按下,如果有,马上保存现场,进入中断;如果没有,自动选择第一通道,进行模拟采样,A/D转换,将转换后的数据存入存储器,与设定值进行比较,如果当前温度超出设定值,报警并显示通道号和当前温度值,如果没有超出设定值,将当前温度值送入显示模块。然后判断是否有按键被按下,如果没有,选择下一通道进行采样。 4.2中断程序流程图
当主程序判断出有按键按下时,程序进入中断INT0。进入中断之后,首先确定按键的键值,然后通过查表判断被按下的键是什么类型的按键。如果是通道选择按键,将被按下的键所代表的通道号,送入相应的寄存器,中断返回,主程序根据中断程序得到的通道号检测测试点的温度;如果被按下的键是“调整”按键,则立即调用温度值设定函数,进行温限的设置,温限设置完成后,中断程序返回,主程序继续进行检测。 4.3矩阵键盘扫描程序
进入键盘扫描程序后,首先置PB口低8位为0E0H。然后读取置PB口低8位为0E0H,如果读到的数据是0E0H,说明没有按键被按下;如果不是0E0H,就说明可能有按键被按下。延时20ms去抖之后,读取PB口低8位的数据,如果读到的数据还是0E0H,就可以肯定确实有按键被按下了。为了确定被按下的按键的位置,调用字节重组函数,将0E0H和读取到的数据重新组合,得到被按下的键的键值。