基于MSP430G2231实现的温度控制器.doc_第1页
基于MSP430G2231实现的温度控制器.doc_第2页
基于MSP430G2231实现的温度控制器.doc_第3页
基于MSP430G2231实现的温度控制器.doc_第4页
基于MSP430G2231实现的温度控制器.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MSP430G2系列Launchpad开发板应用实例作品基于MSP430G2211实现的温度控制器美国德州仪器半导体技术上海(有限)公司西安电子科技大学MSP430单片机联合实验室2011年12月目录第一章 作品概述- 2 -1.1 作品基本情况介绍- 2 -1.1.1 MSP430G2231简介- 2 -1.1.2 作品功能简介- 2 -1.1.3 作品应用意义与设计要求- 2 -1.2 总体方案介绍- 3 -1.2.1 系统硬件结构- 3 -1.2.2 系统软件结构- 4 -第二章 硬件系统设计- 5 -2.1MSP430G2系列Launchpad开发板组成及硬件资源介绍- 5 -2.2 传感器选型及性能指标参数介绍- 5 -2.3 各单元电路介绍- 7 -2.3.1 传感器及信号调理电路- 7 -2.3.2 电源模块- 7 -2.3.3 继电器控制电路- 8 -2.3.4 LCD接口及Launchpad接口部分- 9 -2.4 系统原理图及元器件清单- 9 -2.4.1 整体电路- 9 -2.4.2 元器件清单- 10 -2.5PCB板设计要求和注意事项- 11 -2.6 硬件安装调试注意事项和调试、测试说明- 15 -3.1 监控程序总体流程图介绍- 17 -3.2 各功能子程序在CCS环境下的设计与调试方法介绍- 18 -3.2.1 初始化程序- 18 -3.2.2 LCD显示程序- 18 -3.2.3 AD采样程序- 21 -3.2.4 继电气控制程序- 22 -3.2.5 定时器中断- 23 -3.3 完整监控软件程序的调试方法介绍- 25 -第四章 总结与思考- 27 -4.1 技术总结- 27 -4.2 问题与思考- 28 -第一章 作品概述1.1 作品基本情况介绍1.1.1 MSP430G2231简介本实例使用芯片为MSP430G2231,其内部主要资源包括:低功耗16位MSP430微处理器;2KB的Flash存储器,128B的RAM,一个带两路捕获功能的定时器模块TA2,支持SPI和I2C通信的通用串行接口USI,8通道10位ADC(6路外部输入+1路内部温度传感器+1路内部电压),LF、DCO、VLO组成的时钟系统,10个通用IO口(P1.0P1.7,P2.6,P2.7)。该款单片机继承了MSP430系列单片机的优点:低供电电压范围:1.8V3.6V;超低功耗:活动模式-220 A at 1 MHz, 2.2 V,待机模式-0.5 A, 关机模式(保留RAM)-0.1 A;拥有五种节电模式;低于1us的待机唤醒速度;16位精简指令集,指令周期可达62.5ns;基本时钟模块配置:高达16MHz的带校准的内部时钟,内部超低功耗的低频振荡器,32KHz的晶振,外部数字时钟源;串行板上编程;2线制JTAG接口的在线仿真逻辑等。本实例中主要使用到的单片机资源包括ADC10,定时器TA2和通用IO口。软件上用到ADC中断和定时器中断。具体内容将在以下章节加以介绍。1.1.2 作品功能简介本作品为温度控制器,利用热电阻温度传感器进行温度检测,并通过设置上下限对温度进行继电器加电/断电的温度控制,并对当前温度和继电器状态在LCD上进行显示。1.1.3 作品应用意义与设计要求本作品要求使用Launchpad开发板配合简单的模拟电路扩展板实现对温度的测量,要求采用热电阻温度传感器,尽量提高测温精度及灵敏度,通过液晶显示当前温度,并根据既定的温度上下限,判断当前温度是否超限。若温度低于下限,则将继电器状态设为开,即接通外部用电器;此时,温度会逐渐升高,而当温度升至上限,单片机则会使继电器断开,即关掉用电器。通过功能要求可以看出,本作品非常适于简单的温度控制器应用,如饮水机加热系统、空调温度控制系统、工业加工过程的温度控制器以及热水器等等,加上G2单片机低廉的价格,应用前景十分广泛。1.2 总体方案介绍1.2.1 系统硬件结构系统硬件结构如图1.1所示,其中,电源模块为其他各模块提供3.3V和5V电压。测温电路采集到的温度信号交由单片机进行温度采样,而继电器控制部分则由单片机的一个普通I/0提供控制信号,即时钟脉冲,I/O口每发一个脉冲则继电器状态翻转一次。而液晶部分由单片机两个I/O作为串行显示方式的时钟线和数据线。各模块具体设计将在第二章进行详细说明。图中的电源模块、温度测量、继电器控制和LCD显示模块做在了一块板子上,再通过插针与Launchpad相连。图1.1 系统硬件结构1.2.2 系统软件结构本实例软件结构较为简单,如图1.2所示,系统首先进行初始化,包括进行时钟源选择,看门狗的关闭,AD模块和定时器模块的工作方式设置,单片机各I/O口的初始化即液晶初始化和初始显示等工作。在系统初始化完成以后,进入主循环。在主循环以中断方式进行AD采样,采样结束唤醒CPU,每采样八次计算一次平均值并进行采样结果读取和数据处理过程,主要包括电压电阻和温度值的计算。此过程持续进行直到定时器1s定时中断的到来,在定时中断中,重新写入定时初始值,进行温度比较并根据比较结果控制继电器动作,然后,刷新LCD显示结果,即每一秒钟刷新一次显示结果。图1.2 软件流程图第二章 硬件系统设计2.1 MSP430G2系列Launchpad开发板组成及硬件资源介绍名为 LaunchPad 的 MSP-EXP430G2 低成本试验板是一款适用于TI 最新 MSP430G2xx 系列产品的完整开发解决方案。其基于 USB 的集成型仿真器可提供为全系列 MSP430G2xx 器件开发应用所必需的所有软、硬件。LaunchPad 具有集成的 DIP 目标插座,可支持多达 20 个引脚,从而使 MSP430 Value Line 器件能够简便地插入 LaunchPad 电路板中。此外,其还可提供板上Flash 仿真工具,以直接连接 至 PC 轻松进行编程、调试和评估。LaunchPad 试验板还能够对 eZ430-RF2500T 目标板、eZ430-Chronos 手表模块或eZ430-F2012T/F2013T 目标板进行编程。此外,它还提供了从 MSP430G2xx 器件到 主机 PC 或相连目标板的 9600 波特 UART 串行连接。MSP-EXP430G2 采用 IAR Embedded Workbench 集成开发环境 (IDE) 或 Code Composer Studio (CCS)编 写、下载和调试应用。调试器是非侵入式的,这使用户能够借助可用的硬件断点和单步操作全速运行应用, 而不耗用任何其他硬件资源。MSP-EXP430G2 LaunchPad 特性: USB 调试与编程接口无需驱动即可安装使用,且具备高达 9600 波特的 UART 串行通信速度 支持所有采用 PDIP14 或 PDIP20 封装的 MSP430G2xx 和 MSP430F20xx 器件 分别连接至绿光和红光 LED 的两个通用数字 I/O 引脚可提供视觉反馈 两个按钮可实现用户反馈和芯片复位 器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板 高质量的 20 引脚 DIP 插座,可轻松简便地插入目标器件或将其移除。2.2 传感器选型及性能指标参数介绍本模块采用WZP-Pt100型铂电阻传感器进行测温,PT后的100即表示它在0时阻值为100欧姆,在100时它的阻值约为138.5欧姆。铂电阻PT100分度表如下:-50度 80.31欧姆 -40度 84.27欧姆 -30度 88.22欧姆 -20度 92.16欧姆 -10度 96.09欧姆 0度 100.00欧姆 10度 103.90欧姆 20度 107.79欧姆 30度 111.67欧姆 40度 115.54欧姆 50度 119.40欧姆 60度 123.24欧姆 70度 127.08欧姆 80度 130.90欧姆 90度 134.71欧姆 100度 138.51欧姆 110度 142.29欧姆 120度 146.07欧姆 130度 149.83欧姆 140度 153.58欧姆 150度 157.33欧姆 160度 161.05欧姆 170度 164.77欧姆 180度 168.48欧姆 190度 172.17欧姆 200度 175.86欧姆 阻值会随着温度的变化有规律的增长,其具体规律如下:Rt=R0(1+A*t+B*t*t+C*t*t*t), R0=100, A=3.950*10-3, B=-5.850*10-7,C=-4.22*10-22.Pt100铂电阻技术数据 (采用EN 60751 B类标准 传感器类) 0.1K DC 1.3mA热响应系数 10m/K,0时传感器的阻值 1000.12下面是几种常见Pt100的实物图片,本文中使用的传感器为第三个。 2.3 各单元电路介绍2.3.1 传感器及信号调理电路铂电阻随温度变化的阻值经直流双臂电桥转化为微弱的电压信号,一路经仪用运放AD620AN放大约20倍后单端输入到单片机ADC0,一路直接双端输入到单片机ADC1,由单片机内部自带放大电路放大20倍。另外,ADC2接内部温度传感器以为室温测量提供选择。具体电路如图2.1,其中,滑动变阻器用于电桥平衡调节,电源由5V精确稳压电路提供。图2.1 传感器及信号调理电路2.3.2 电源模块电源模块主要由三部分构成,来自变压器的5V电压,3.3V稳压电路和-5V产生电路。另外还有常用的电源指示灯和电源开关。具体电路如图2.2所示。图2.2 电源模块2.3.3 继电器控制电路由于本模块设计为控制家用用电器的通断,故采用5VDC8A,250VAC继电器。单片机I/O口输出经JK触发器扩流,经光耦隔离,再用ULN2003D驱动,并且使用LED指示继电器的通断。两端子分别为220V电压输入和输出端。具体电路如图2.3所示。图2.3 继电器驱动电路2.3.4 LCD接口及Launchpad接口部分由于G2系列单片机I/O口较少,本模块LCD采用串行工作方式,仅需两个I/O口就能完成复杂的现实过程。板子通过引出插针与Launchpad主板相连。具体连接如图2.4.图2.4 LCD接口及Launchpad接口电路2.4 系统原理图及元器件清单2.4.1 整体电路总的原理图如图2.5所示,即为以上四部分的叠加。图2.5 系统总体电路图2.4.2 元器件清单表一为元器件清单,图2.6位使用的传感器及液晶实物图。表一:元器件清单名称编号大小或型号数量封装贴片电阻R1-R8,R10-R14101,151,331,501,272,103,203,104130805电位器R920313PIN_1无极性电容C4,C5,C10104,50130805钽电容C1-C3,C6-C9,C11,C12105,106,1079C1206LEDDS0,DS1直插,红色2LED-0插针10PIN-1,J3普通型3SPI-10端子L1,L2,J4自选3根据实物自绘电源插口POWERCONTER普通圆口1Powerconter1电源开关J15脚单刀单掷开关1根据实物自绘继电器J2HF115F1根据实物自绘运放U6AD620AN1DIP8光耦U3PC8171DIP4JK触发器U574LS1121DIP16继电器驱动U4ULN2003D1SO-G163.3V稳压U1LM1117-3.31DSO-G3-5V生成U2ICL76601DIP8图2.6 液晶及传感器实物图2.5 PCB板设计要求和注意事项为保持系统的小巧美观及降低成本,本模块将PCB做成5cm*5cm以内,并将其置于Launchpad实验板上方。由于本实例使用硬件较多,应尽量选用贴片封装器件,注意画板子前应先采购器件,对照实物画板子,以保证封装的正确性以及所选器件及封装易于获得。本实例中采用的JK触发器74LS113已停产,现多使用74LS112代替,功能相同但封装不同,前者为14脚,后者为16脚,且管脚排布略有差别,笔者发板后采购的元器件,该错误造成许多不便,值得警戒。考虑到安装外壳等需要,布局时要注意将电源接插件、开关、指示灯、端子等排布在板子边缘,端子根据实际需要掌握好位置,力求做到符合人们的习惯。为方便布线,应尽可能将同一模块的器件排布在一起,各模块相连处也应尽量靠近,这样可减小布线长度,减少噪声和反射等的影响。图2.6和2.7为根据以上原则绘制的PCD文件图。另外布线时可参考如下规则:一连线精简原则连线要精简,尽可能短,尽量少拐弯,力求线条简单明了,特别是在高频回路中,当然为了达到阻抗匹配而需要进行特殊延长的线就例外了,例如蛇行走线等。安全载流原则铜线的宽度应以自己所能承载的电流为基础进行设计。二地线的设计原则1、正确的单点和多点接地在低频电路中,信号的工作频率小于1MHZ,它的布线和器件间的电感影响较小,而接地电路形成的环流对干扰影响较大,因而应采用一点接地。当信号工作频率大于10MHZ 时,如果采用一点接地,其地线的长度不应超过波长的1/20,否则应采用多点接地法。 2、 数字地与模拟地分开 若线路板上既有逻辑电路又有线性电路,应尽量使它们分开。3、 接地线应尽量加粗若接地线用很细的线条,则接地电位会随电流的变化而变化,使抗噪性能降低。因此应将地线加粗,使它能通过三倍于印制板上的允许电流。如有可能接地线应在23mm 以上。 4、 接地线构成闭环路 只由数字电路组成的印制板,其接地电路布成环路大多能提高抗噪声能力。因为环形地线可以减小接地电阻,从而减小接地电位差。三、 过孔设计在高速PCB 设计中,看似简单的过孔也往往会给电路的设计带来很大的负面效应,为了减小过孔的寄生效应带来的不利影响,在设计中可以尽量做到: 从成本和信号质量两方面来考虑,选择合理尺寸的过孔大小。对于电源或地线的过孔则可以考虑使用较大尺寸,以减小阻抗。 使用较薄的PCB 板有利于减小过孔的两种寄生参数。 PCB 板上的信号走线尽量不换层,即尽量不要使用不必要的过孔。 电源和地的管脚要就近打过孔,过孔和管脚之间的引线越短越好。 在信号换层的过孔附近放置一些接地的过孔,以便为信号提供最近的回路。甚至可以在PCB 板上大量放置一些多余的接地过孔。四、 降低噪声与电磁干扰的一些经验能用低速芯片就不用高速的,高速芯片用在关键地方。可用串一个电阻的方法,降低控制电路上下沿跳变速率。尽量为继电器等提供某种形式的阻尼,如RC 设置电流阻尼。使用满足系统要求的最低频率时钟。时钟应尽量靠近到用该时钟的器件,石英晶体振荡器的外壳要接地。用地线将时钟区圈起来,时钟线尽量短。石英晶体下面以及对噪声敏感的器件下面不要走线。 时钟、总线、片选信号要远离I/O 线和接插件。时钟线垂直于I/O 线比平行于I/O 线干扰小。 I/O 驱动电路尽量靠近PCB 板边,让其尽快离开PCB。对进入PCB 的信号要加滤波,从高噪声区来信号也要加滤波,同时用串终端电阻的办法,减小信号反射。MCU 无用端要接高,或接地,或定义成输出端,集成电路上该接电源、地的端都要接,不要悬空。闲置不用的门电路输入端不要悬空,闲置不用的运放正输入端接地,负输入端接输出端。印制板尽量使用45 折线而不用90 折线布线,以减小高频信号对外的发射与耦合。印制板按频率和电流开关特性分区,噪声元件与非噪声元件呀距离再远一些。单面板和双面板用单点接电源和单点接地、电源线、地线尽量粗。模拟电压输入线、参考电压端要尽量远离数字电路信号线,特别是时钟。对A/D 类器件,数字部分与模拟部分不要交叉。元件引脚尽量短,去藕电容引脚尽量短。关键的线要尽量粗,并在两边加上保护地,高速线要短要直。对噪声敏感的线不要与大电流,高速开关线并行。弱信号电路,低频电路周围不要形成电流环路。任何信号都不要形成环路,如不可避免,让环路区尽量小。 每个集成电路有一个去耦电容。每个电解电容边上都要加一个小的高频旁路电容。用大容量的钽电容或聚酷电容而不用电解电容做电路充放电储能电容,使用管状电容时,外壳要接地。对干扰十分敏感的信号线要设置包地,可以有效地抑制串扰。图2.6 PCB正面图2.7 PCB反面图2.6 硬件安装调试注意事项和调试、测试说明首先,由于功能扩展板要为Launchpad实验板供电,在将两个板子连接前一定要确保功能板输出的正确性,测试各点电压是否正常,有无短路现象,测试AD输入部分信号,确保其处于合适的范围,以免连接后对单片机造成损伤。本款单片机AD采样电压范围为0-参考电压(1.5/2.5V), 电压范围较大但不能采负压,其他型号单片机如MSP430F425,采样电压范围为-0.2V+0.6V,使用时应该注意。本实例温度测量部分电桥在温度低于0度时可输出负压,但ADC模块无法采集,会产生乱码,所以只可用于0度以上的温度测量,使用时需要注意。当不接传感器时,测试点的电压值过高,高于AD采样值范围,因此,会输出乱码,甚至对单片机造成损伤,调试时要注意传感器接插件间的良好接触性,避免接触不良造成的断路现象等,并谨记上电前务必将传感器连接好。对于LCD部分,我们采用12864液晶显示器。目前市面上的液晶大同小异,但调试液晶时或多或少都会出现问题。在测试程序正确的前提下,一般都是对比度的问题。有些液晶自带对比度调节电位器,硬件设计时可以不予考虑。对于没有自带电位器的液晶,可以添加电位器,或者将VO与VEE端直接相连,也可将VO直接接到5V电源上,对比度=VO/VEE,VEE约为5V。我使用的液晶用3.3V供电,VEE仍约为5V,应该是内部带有稳压电路,不同型号可能会有不同,使用时需注意。另外,调液晶时初始化过程很重要,要谨记初始化液晶前先完成I/O功能设置,顺序搞错会导致初始化失败,液晶无法正常显示。总之,调液晶时要在软硬件上同时找原因,逐个排查。硬件调试过程中应结合简单的I/O控制程序,查看硬件是否正常工作。本实例中,另单片机P1.5口输出一脉冲,观察继电器指示灯状态是否发生变化,如不变化,电路可能出现故障,分析电路,查找原因,给予修正。也可利用P1.6口的小灯,通过外接连线来测试个I/O口的输出状态是否正常。另外,在线调试过程中,由于传感器、运放和继电器部分都是5V供电,注意要闭合电源开关,以免因供电问题导致的错误被误判为硬件错误。图2.8和图2.9为装配好的实物图。图2.8 实物图1图2.9 实物图2第三章 软件系统设计3.1 监控程序总体流程图介绍本实例软件结构较为简单,如图1.2所示,在系统初始化完成以后,进入主循环。在主循环以中断方式进行AD采样,采样结束唤醒CPU,进行采样结果读取和数据处理过程。并等待定时器1s定时中断的到来,在定时中断中,进行温度比较并根据比较结果控制继电器动作,然后,刷新LCD显示结果。其中,初始化程序主要对系统时钟、ADC工作方式、定时器工作方式进行设定,对I/O口进行初始化,对液晶进行初始化并令其显示初始字符并使能相关中断。AD采样采用单通道单次采样,每采样8次取平均值,计算一次温度值。采样过程是单片机进入低功耗休眠状态,在ADC中断中唤醒CPU。定时器设置为定时1s中断一次,在中断中刷新LCD显示,并根据当前温度值控制继电器动作。各部分具体程序代码参见第三章。图3-1 程序流程图3.2 各功能子程序在CCS环境下的设计与调试方法介绍3.2.1 初始化程序初始化函数主要完成对系统时钟和各寄存器的初始化设置工作,包括各I/O功能设定,ADC和定时器及工作模式系统中断模式设置及LCD初始内容显示等。程序框架借鉴TI实例,具体代码如下:ConfigWDT(); /配置看门狗 ConfigClocks(); /配置时钟 ConfigureAdcTempSensor(); /设置ADC工作模式 ConfigTimerA2(); /定时器设置 ConfigLCD(); /LCD接口初始化 ConfigECtrl(); /继电器控制电路初始化_enable_interrupt(); /使能中断/ LCD初始显示 set_position(0,0); /显示位置:第一行第一列 send_str(dis_sbf0); /显示数组内容,下同 set_position(1,0); send_str(dis_sbf1); set_position(2,0); send_str(dis_sbf2); set_position(3,0);send_str(dis_sbf3);3.2.2 LCD显示程序系统时钟设置为1MHz,故时钟周期约为1us,可直接将LCD自带的51例程移植过来,只需简单修改硬件设置,将P1.6和P1.7口设置为输出,然后调用初始化和各显示程序即可。各LCD函数主要是根据时序要求,写相应指令,具体可参照LCD数据手册。注意,由于使用了P1.6口,需将板子上相应跳线帽取下。具体的LCD子程序如下:基本写指令或数据函数:void wr_lcd (uchar dat_comm,uchar content)uchar data,i,j,CF;delay (50); /延时,等待内部动作完成data=content;sclk_l;std_h;for(i=0;i5;i+) /写入5个1,作为启动位 sclk_h; sclk_l;std_l;sclk_h;sclk_l;if(dat_comm) /判断写数据还是指令 std_h; /dataelse std_l; /commandsclk_h;sclk_l;std_l; /写入1个0sclk_h;sclk_l;for(j=0;j2;j+) for(i=0;i4;i+) /分别写入高四位和低四位 CF=data&0x80; if(CF=0x80) std_h; else std_l; sclk_h; sclk_l; data=data1; std_l; /写入4个0 for(i=0;i4;i+) sclk_h; sclk_l; 初始化函数:void init_lcd (void)wr_lcd (comm,0x30); /30-基本指令动作wr_lcd (comm,0x01); /清屏,地址指针指向00Hdelay (5000); /清屏需较长时间 wr_lcd (comm,0x06); /光标的移动方向 wr_lcd (comm,0x0c); /显示打开,光标关,反白关设置显示坐标函数:void set_position(unsigned int xx,unsigned int yy) unsigned int line; wr_lcd (comm,0x30); /30-基本指令动作 switch(xx) case 0:line=0x00;break; case 1:line=0x10;break; case 2:line=0x08;break; case 3:line=0x18;break; default:break; wr_lcd(comm,0x80+line+yy); /设定地址 显示汉字或字符函数: void send_str(uchar const *cc) unsigned int i; wr_lcd (comm,0x30); for(i=0;(i16)&*(cc+i);i+) wr_lcd(dat,*(cc+i);调试时,将LCD程序独立出来,先定义一个常量数组,关闭一切中断,初始化后(主要是时钟和LCD初始化)调用显示程序将数组中的内容先是在LCD的某一位置上。可先尝试整屏显示,再显示单独一行,再尝试在某一位置显示一个字。在尝试在某一位置显示一个变量,注意显示位置与数组长度问题,当数组不够长时,空余部分可能会显示乱码。3.2.3 AD采样程序AD采样程序采用TI所给的范例中的函数,并稍加修改。包括初始化,主程序中采样八次取平均,AD中断等。初始化函数:void ConfigureAdcTempSensor(void)P1SEL|=BIT4; / P1.4设为第二功能 ADC10CTL1 = INCH_4 + ADC10DIV_3; / 通道四,八分频ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;/ VR+ = VREF+ and VR- = VSS, 采样保持时间64 ADC10CLKs,开启内部参考源,开启AD,使能中断 _delay_cycles(1000); / 等待ADC参考源稳定 ADC10CTL0 |= ENC + ADC10SC; / 开始取样和转换过程 _bis_SR_register(CPUOFF + GIE); / 开总中断并进入LPM0模式ADC中断处理函数:#pragma vector=ADC10_VECTOR_interrupt void ADC10_ISR (void) _bic_SR_register_on_exit(CPUOFF); /回到活动模式,即唤醒CPU主循环:while(1) ADC10CTL0 |= ENC + ADC10SC; / 开始取样和转换过程 _bis_SR_register(CPUOFF + GIE); / 开总中断并进入LPM0模式 tempMeasuredtempMeasuredPosition+ = ADC10MEM; if (tempMeasuredPosition = 8) tempMeasuredPosition = 0; tempAverage = 0; for (i = 0; i = 3; / 除8获取平均值 tav=(int)tempAverage; / 强整为整形 vo=VoltExc(tav); / 采样值转化为电阻值res=ResExc(vo); / 电压值转化为电阻值 delay(10); tep=TemperatureExc(res); / 电阻值转化为温度值、 temp0=tep/100; / 将温度值保存在数组中,温度整数部分,两位小数 temp1=tep%100; / 温度小数部分 调试过程中,要注意利用CCS的寄存器窗口和观察窗口。在程序中设置断点,观察ADC10MEM的值,是否有值,电压变化时采样值是否随之改变,采样值是否正确等,我在调试中发现ADC10MEM的值一直为0,而测量发现电压不为0且可以正常变化,检查程序发现忘记将P1.4的第二功能开启,故采不到电压值,修改后该寄存器值正常。在观察窗口中观察数据处理过程中的变量tav、vo、res、tep和数组tem,在求得均值后设置断点,然后单步执行程序,观察数据变化情况。我在调试过程中发现采样值正常时显示结果不对,通过以上过程找到错误,因数据处理函数是从4系列移植过来的,4系列的ADC为16位,切满度电压为0.6V,移植过来不改变参数导致转换过来的电阻值小于100欧,温度为负值,故出现乱码。仔细修改参数后,恢复正常。3.2.4 继电器控制程序继电器控制较为简单,只需进行简单的I/O操作,即将I/O输出拉高稍加延时再拉低形成脉冲,作为JK触发器的时钟源,使其输出状态翻转即可。程序代码如下,主要包括初始化和脉冲产生。初始化函数:void ConfigECtrl(void)P1OUT|=BIT5;P1DIR|=BIT5;根据温度控制继电器动作:if(temp0=30)&(status=on) /温度比较与当前继电器状态读取 /高于上限且继电器当前状态为开 status=off; /继电器状态翻转 clk_l; delay(5); clk_h; / delay(100);else if(temp0=30)&(status=on) status=off; clk_l; delay(5); clk_h; / delay(100);else if(temp020)&(status=off)status=on;clk_l; delay(5); clk_h; / delay(100); /将测量结果转化为字符并存于数组中,以便LCD显示temp10=temp0/100+0x30; temp11=temp0%100/10+0x30;temp12=temp0%10+0x30;temp13=0x2e;temp14=(temp1/10)+0x30;temp15=(temp1%10)+0x30;if(temp10=0x30) / 消隐无效0 temp10=0x20;if(temp10=0x20)&(temp11=0x30) temp11=0x20; set_position(2,5);send_str(temp1); if(status=off) sta0=0xb9; sta1=0xd8; sta2=0x20; sta3=0x20; else if(status=on) sta0=0xbf; sta1=0xaa; sta2=0x20; sta3=0x20; set_position(3,6); send_str(sta);set_position(1,0); /重写第二行,因为刷新数据时此处出现乱码,未找到原因,只能重写覆盖send_str(dis_sbf1); 3.3 完整监控软件程序的调试方法介绍将各个模块程序调通后,就可组合起来,实现整体功能。程序框架参考TI示例程序Lab2中的Temperature_Sense_Demo例程,当然结构要简单得多。TI的程序框架大都较为成熟实用,值得借鉴。根据显示效果,适当改变函数调用位置,出于功耗的考虑,也可变换函数位置,减少运算量,尽量少的使用CPU,降低功耗。另外,由于该款单片机存储空间有限,程序编译时,可能会出现RAM或Flash空间不足的情况,RAM不足时,注意检查个函数变量使用,去掉可以不用的变量,在不冲突的前提下多使用全局变量,避免重复定义变量等;Flash不足时,注意精简语段,去掉不必要的软件延时,用宏定义代替函数,较短且仅使用一次的函数直接用语句替代,去掉不必要的操作,精简常量数组等措施。本程序由于包含LCD显示函数且数据处理过程较复杂,对内存消耗较大,使用的存储空间Code Size - Text: 1844 bytes Data: 136 bytes。调试方法前面已经大致介绍过,主要是寄存器窗口和观察窗口的使用,以及断点、单步、全速、数据探针的使用等。总之,调试程序就是一个出现问题,采用排除法确定问题所在,解决问题的过程。由局部到整体,出现错误的机会就会小得多。再由整体回归局部,主要解决个程序间逻辑调用等问题,整体功能实现后,再考量各部分,精简,优化程序,使程序达到最优。可以说Launchpad让我学会了节俭,然我体会到了最优,这正是我们在校学生最欠缺的。图3.2 程序调试界面第四章 总结与思考4.1 技术总结一个14脚的芯片能实现什么功能?是时序逻辑运算、信号放大还是模数转换、定时比较?G2系列单片机让我们见识了他的多才多艺。可以采集数据,可以做简单的数据处理,可以控制外设状态,可以精确定时,可以驱动液晶,可以与计算机通信,这款超低价位的单片机值得我们动手动脑玩一玩。本作品利用单片机片内AD资源对传感器的电压信号经行采集,并计算出对应温度,当温度超限时做出相应的继电器加电断点控制,实现了简单的温度控制器功能。本作品采用最基本的热电阻传感器测温,测温电路简单,温度计算过程也相对简单。继电气控制采取了隔离措施和几级功率放大,控制方便电路稳定安全。通过液晶显示也简单直观,交互性强。另外充分利用了G2的内部资源及TI程序范例,可以说做到了物尽其用。同时本模块依然存在许多缺点有待改进。如供电部分,可以进一步简化,只需将选取一款低功耗3.3V单端供电运放,这样,可省掉电路中的-5V芯片,进一步降低成本。另外,对于低功耗设计,可去掉液晶背光,选取一款白屏液晶,还可将电源芯片换成带使能端的,可人工控制通断,程序上也可进一步更改,如每秒钟只让AD采样8次,只进行一遍计算,这样在温度实时性要求不高的情况下也可进一步降低功耗。另外,本作品测温范围有限,尤其无法测量负温度,且测温精度不够,可以通过选用精密电阻,添加稳压电路等方法提高其精度。最后,本作品温度上下限固定,可以添加按键设计菜单程序调节上下限,这样可实现一机多用的效果,当然,具体应用场合可能不需要改变上下限,G2有限的内存资源能否支持菜单程序的开销也还需要实验考证。读者可根据自己的应用需求进行更改。学习一款单片机首先要了解它的内部资源,了解他能干什么,要实现我们的功能要用到他的什么资源,怎么用。参考数据手册深入了解该资源,设计出符合其要求的硬件电路,参考厂商提供的程序范例,写出稳定可靠的程序。当你把个模块都用会了,证明你学懂了。本实例教你怎样使用ADC10,当然,AD可以采集的数据不止温度信息一种,使用不同传感器,你能感知的是整个世界。学会使用LCD,把你的感知的信息分享给大家,这一直观的表现形式让交流变得简单。定时器,更是必需品,通过计时控制进程,同时解放CPU,资源得到充分利用的前提。中断的使用,教我们节能与环保,时代的必然要求,收获颇丰,不是么?本实例的开发过程,单片机的学习,原理图的设计,PCB的绘制,软硬件的调试,数据手册、程序范例的利用,都是技术。学会学习,让我们在过程中学习吧!4.2 问题与思考1. 本模块只是用了4个I/O口,试利用剩余I/O口,接多个按键,以便对温度上下限进行设置。2. 如何测负压?3. 试编写函数,利用LCD绘制温度变化曲线(使用LCD绘图函数,已给出)。4. 如何进一步降低功耗及降低成本,提出电路改进方案。5. 如何提高测温精度?袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论