微控制器应用及系统设计课程设计报告南京理工大学2010 年 5 月目次1 引言 (3)2 系统总体设计 (3)2.1 系统组成结构及工作原理 (3)2.2 系统工作流程 (3)2.3 系统核心器件选型 (4)3 系统硬件设计 (4)3.1 电源模块设计 (4)3.2 LED显示模块设计 (4)3.3 键盘输入模块设计 (5)3.4 温度采集模块设计 (5)3.5 报警模块设计 (6)4 系统软件设计 (6)4.1 系统软件总体结构及总流程图 (7)4.2 LED显示模块程序设计 (9)4.3 键盘输入模块程序设计 (9)4.4 温度采集模块程序设计 (10)4.5 报警模块程序设计 (10)4.6 主模块程序设计 (10)5 系统调试与结果分析 (10)5.1 系统调试步骤 (10)5.2 遇到的问题及解决方案 (12)5.3 实验结果 (13)6 结论与心得体会 (13)参考文献 (13)附录 (14)1 引言温度是一个非常重要的物理量,因为它直接影响燃烧、化学反应、发酵、烘烤、煅烧、蒸馏、浓度、挤压成形、结晶以及空气流动等物理和化学过程。
温度控制失误就可能引起生产安全、产品质量、产品产量等一系列问题。
因此对温度的检测的意义就越来越大。
温度采集控制系统在工业生产、科学研究和人们的生活领域中,得到了广泛应用。
在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。
使用自动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。
温度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用,利用新型单总线式数字温度传感器实现对温度的测试与控制得到更快的开发。
现在的生活中,所用到的电器,家具设备,包括工业产品等对温度的要求日益增高,灵敏的温度控制报警系统已成为日常生活中必不可少的产品。
例如冰箱的温控系统,锅炉等等,无不都用到了这一功能部件。
对于此,我们设计了基于MSP430F149单片机的温度控制报警系统,来模拟实现现实中的温度控制系统。
此系统具有设计和布线简单,结构紧凑,体积小,重量轻,抗干扰能力强,性价比高,扩展方便,在大型仓库,工厂,智能化建筑等领域的多点温度检测中有广阔的应用前景。
2 系统总体设计2.1系统组成结构及工作原理该系统主要由5大模块组成,其中包括DS18B20温度传感器,MSP430F149微控制器,LED显示模块,4X4矩阵键盘输入模块,报警模块5大部分组成。
由温度传感器负责数据采集,经微处理器转换后由LED显示模块输出,同时由键盘模块负责输入温度报警的上下限。
当到达设定的温度限定值时就报警。
其组成框图如下所示:2.2 系统工作流程首先设定温度报警的上下限值,然后由温度传感器进行温度数据的采集,当微处理器检测到温度超过设定的范围值时就实行报警,提醒用户做相关操作。
2.3 系统核心器件选型MSP430F149单片机,DS18B20温度传感器,6个LED数码显示管,4x4矩阵键盘。
3 系统硬件设计3.1 电源模块设计整个系统采用3.3V供电,考虑到硬件系统对电源要求具有稳压功能和波纹小等特点,其使用LT1117芯片,将电压输出为3.3V。
其硬件电路原理图如下:3.2 LED显示模块设计考虑到系统的成本,同时由于综合设计的时间限制,我们采用了最简单的LED显示方式,这样的方式能满足该系统的要求,同时也可以减低系统的成本。
LED 显示器是由8只发光二极管构成的8段数码显示显示器。
其中a——g用于构成7笔字形,h用于构成小数点。
本次设计中采用的是共阳极数码管,当其接低电平时点亮相应LED灯。
其硬件原理图如下:其中共有6位,温度显示时显示2位整数,四位小数。
其位选端分别与MSP430F149的P6.2——P6.7相连,显示端分别与单片机的P4.0——P4.7相连。
3.3 键盘输入模块设计键盘输入电路主要用于输入数据,从而实现人机交互。
该系统的键盘设计是采用扫描方式实现的矩阵键盘。
其电路原理图如下:由上图可以看出该矩阵键盘由行线和列线组成,P1.0——P1.3为行线,P5.4——P5.7为列线。
键盘的行线作为键盘的控制输出端,键盘的列线作为键盘的输入端。
同时考虑到P1端口具有中断功能,因此键盘的处理程序可以由中断产生。
键盘的列线通过上拉电路将两个管脚拉高,这样在没有按键按下的情况下,该两个管脚的电平为高电平,如果有按键按下时,相应的列线管脚为低电平,这时通过设置P1口为中断方式,低电平就出发中断而进入中断服务子程序,从而获得输入的数据。
同注意到,键盘的扫描时间是很短的,仅仅几微妙的时间,然而按键的时间一次至少需要几十毫秒,所以只要有键按下的话是都可以被扫描到的,但是按键按下时有一定的时间抖动,一定要加入键盘的抖动处理。
3.4 温度采集模块设计本次系统设计采用的温度转换模块采用的是DS18B20温度传感器,其原理图如下:其只有一个端口要接,与单片机的P3.0口相接,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源测量温度范围为-55 ° C至+125 ℃。
华氏相当于是-67 ° F到257华氏度-10 ° C至+85 ° C范围内精度为±0.5 ° CDS18B20的初始化:(1)先将数据线置高电平“1”。
(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。
(4)延时750微秒(该时间的时间范围可以从480到960微秒)。
(5)数据线拉到高电平“1”。
(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。
据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8)将数据线再次拉高到高电平“1”后结束。
DS18B20的写操作:(1)数据线先置低电平“0”。
(2)延时确定的时间为15微秒。
(3)按从低位到高位的顺序发送字节(一次只发送一位)。
(4)延时时间为45微秒。
(5)将数据线拉到高电平。
(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7)最后将数据线拉高。
DS18B20的读操作:(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时15微秒。
(5)将数据线拉高“1”。
(6)延时15微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时30微秒。
3.5 报警模块设计该部分电路主要是驱动一个蜂鸣器,这样只需要将蜂鸣器的一段接地,另一端与单片机进行相接就可以了,其与单片机的P6.1口相接。
其电路原理图如下:同时考虑到可以分级警报,因此将LED灯加进去,从而在报警时也会将相应的LED灯点亮,以显示不同的报警级别。
4 系统软件设计4.1 系统软件总体结构及流程图(主程序流程图)(按键中断服务子程序流程图)4.2 LED显示模块程序设计本次实验的显示是由LED数码管显示的,而温度传感器返回的是11位的二进制数值,因此如何把这11位二进制数值转换为数码管的10进制数值是这块程序的重点。
经过查阅资料,了解到可以逐位进行转换。
一共11位数据,7位作为整数部分,4位作为小数部分,每次取出一位,若为第一位,若为1,则其值为0.0625,因此设置相应的数码管显示,再取出第二位,若为1,则其十进制0.125,累加上去,一次类推,最后完成整个温度的数码转换。
同时在显示温度时采用的是动显温度,是通过看门狗定时器来实现的,设置看门狗定时器为1.9ms中断,当时间到达时自动进入中断实现移位显示,由于时间间隔短,因此人眼看上去就像是数码管一起显示的一样。
4.3 键盘输入模块程序设计键盘的功能为输入数值,此次设计采用的是4x4矩阵键盘,其功能面板如下:其中0——9为10个数字键;UPSET为上限温度设定选择键,完成上限温度位选功能;DSET为下限温度设定选择键,完成上限温度位选功能;UPS为上限温度设定完成确定键,输入完成后按下;DWS为下限温度输入完成确定键,输入完成后按下。
按键输入程序设计时主要是确定输入的键的键值,然后与预先设定的键码表对照,在用一个选择判断语句switch,选择相应键时即执行相应的操作。
在确定键值时用的是行列式扫描法,同时考虑到如果不先按位选键,直接按其他键也会进入按键中断服务子程序,因此特别加入了消除此缺陷的语句,使得在按错键时系统也能执行显示温度的操作,使系统运行更可靠,更稳定。
其实现方法如下:default:{ //实现按其他键时不会出现死循环,无法正常显示温度 if((presskey11 == 0) && (presskey10 == 0)){IE1 |= WDTIE; //看门狗中断使能开TBCCTL0 |= CCIE; //定时器中断使能开}break;按键程序的主要思想是首先判断是否按下功能选择键,如果按下,则置相应的功能选择键标志为1,然后再判断是否是在功能选择键标志为1(即先按了功能选择键)的情况下再按了数字键,此时才能进入温度设定程序,否则按键无效,正常显示温度。
同时温度设定完后将相应的功能选择键标志位归0。
4.4 温度采集模块程序设计温度采集模块主要是运用了温度传感器DS18B20,这款温度传感器具有温度转换功能,能通过指令将电压值转换为当前的温度值,同时还可以多个传感器一起工作,由于本次系统设计只需要一个就行,因此忽略了取产品ID号的过程,在编程时,主要是根据传感器的芯片说明的流程来思考的,通过写入函数Write_18B20()将相应的指令写进去,同时通过读出函数ReadTemp()将相应的温度数值读出来,返回给系统,从而实现温度的转换和显示。
4.5 报警模块程序设计本次报警模块的处理相当简单,有两个部件组成,一个是蜂鸣器,通过I/O 口上送出数据来驱动蜂鸣器,而LED灯也是只要通过端口送出数据就可以。
此模块包括初始化端口和数据产生两个部分,初始化端口部分只要设置相应的端口为输出方向,数据输出只要执行相应的输出操作即可。
同时在扫描检测温度情况是用到了TimerB的中断处理,用3ms中断,每过3ms检测一下温度是否在设定的范围内,若不在,则实行相应的报警参数设置,返回后,主程序通过判断报警参数实行相应的报警操作。
4.6 主模块程序设计主模块程序的设计很简单,就包括各端口,键盘,还有时钟的初始化操作,然后就一个While()循环,此循环实现的是动显温度值,同时用于判断温度报警参数实现温度报警,其他就当相应的中断产生时转到相应的中断服务子程序中执行相应的操作。