找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14181|回复: 9
收起左侧

基于MSP430单片机的温度控制系统设计与实现

  [复制链接]
ID:361293 发表于 2018-6-28 20:03 | 显示全部楼层 |阅读模式
实习实训课程指导教程
——《单片机应用实践》
——《电子设计与应用实践》

基于单片机的温度控制系统
设计与实现


     2015年9月

整个系统通过单片机MSP430G2553控制DS18B20读取温度,采用LCD1602显示,温度传感器DS18B20与单片机之间通过串口进行数据传输.MSP430系列单片机具有超低功耗,且外围的整合性高,DS18B20只需一个端口即可实现数信,连接方便。

目录

1 项目要求
2项目分析和系统设计
3 硬件设计
3.1单片机选型模块
3.2温度测量模块
3.3 LCD液晶显示模块
3.4系统电源
4 软件设计
4.1主程序
4.2温度测量子程序
5 系统调试
5.1硬件调试
5.2程序调试
5.3联合调试
6项目演练
7项目总结
附录1电路设计原理图(参考)
附录2  PCB设计原理图(参考)
附录3 关键程序(参考)
基于单片机的温度控制系统设计与实现
1 项目要
此系统的主要功能:
● 可以测量一定摄氏度内的温度;
● 用液晶显示温度,精确到小数点后两位;
● 利用温度传感器(DS18B20)测量某一点环境温度;
● 至少有高、低两路限温控制输出接口控制外部电路。
● 高、低两路限温控制点可在一定范围内独立设置,通过发光二极管模拟显示其控制状态输出。
● 当温度达到高、低限温控制点发光报警;
● 提高温度测量精度,使分辨率不低于0.10C;
● 可以通过按键设置高、低两路限温控制点。
2项目分析和系统设计
此数字温度控制系统硬件部分利用了MSP430G2553芯片内部的ADC10功能配置,结合DS18B20温度传感器来测量环境中的温度,将所测数值在LCD1602串行显示;软件部分利用CCS软件来进行编译,并且根据实际需要来完成各模块程序的编写,再进行复杂的调试。
3 硬件设计
该温度控制系统在MSP430G2553芯片的功能配置和协调下,与其他模块搭建来完成。由MSP430控制温度传感器DS18B20实时测量环境中的温度,然后在LCD5110显示出来,当该温度超过了设定的最大或者最小温度值时,LED开始报警。


                       输入输入


3.1系统结构框图
3.1单片机选型模块
基于名为Launch Pad,MSP-EXP430G2低成本实验板是一款适用于TI最新MSP430G2XXX犀利产品的完整开发解决方案。基于USB的集成型仿真器可提供全系列MSP430G2XX器件开发应用所必备的所有软件、硬件。Lunch Pad具有集成的DIP目标插座,可支持多达20个引脚,从而使MSP430Value Line器件能够轻松插入LaunchPad实验板电路。
3.2单片机选型模块图
3.2温度测量模块
温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为-55℃~125℃,可编程为9位~12位A/D转换精度,测温分辨率达到0.0625℃,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。接口电路如图3.3所示。
3.3 DS18B20测量电路图
3.3 LCD液晶显示模块
LCD液晶显示模块采用LCD1602型号,性价比高,LCD1602可以显示32个字符,口相对简单。1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:
RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
其接线如图3.4所示
3.4 LCD显示电路
3.4系统电源
整个电路采用USB电源,为所有的USB 外设提供了单一的易于使用的标准的连接类型,简化了USB 外设的设计。整个的USB 的系统只有一个端口和一个中断节省了系统资源。
4 软件设计4.1主程序
本系统整体工作主要由单片机程序控制实现,其工作过程为:由MSP430控制温度传感器DS18B20实时测量环境中的温度,然后在LCD1602显示出来,当该温度超过了设定的最大或者最小温度值时,LED开始报警。
程序流程图如下:


4.2 温度测量子程序图
5 系统调试5.1硬件调试
主要根据系统框图和硬件原理设计进行原理的绘制、各参数的设置、电路板的制作,以及元器件的焊接等。具体如下:
5.1.1 各单元电路,确认各单元电路链接无误,尤其是关键元器件,一定要接保护电阻。
(1)在样机加电之前,首先用万用表等工具,根据硬件电器原理图和装配图仔细检查样机线路的正确性,并核对元器件的型号、规格和安装是否符合要求。应特别注意电源的走线,防止电源之间的短路和极性错误,电源连接是否正确测试LCD显示屏是否有输出,LCD显示屏上的温度的显示是否符合;
(2)运用MSP430单片机中简单的I/O口功能,优异在检查硬件是否正常工作时先检测单片机本身的I/O口设置,可以先不连接外部电路,使用单片机本身I/O口,测试程序是否正确,以免在软件调试中引起不必要的麻烦。
5.1.2 PCB设计注意事项:
在进行PCB设计时,必须遵守PCB设计的一般原则,并注意其要求。
(1)此系统采用的电阻和电容较多,注意在画PCB时注意各器件的封装,对照使用的实物选取封装,保证焊接硬件的正确性。
(2)此系统采用光敏电阻及较大的极性电容,介于成本的原因,采用的封装是是直插式的,在PCB设计时特别注意
(3)根据电路的模块布局,这样便于在出现问题时进行检查,尤其注意MSP430单片机系统中I/O口是否设置正确。
5.2程序调试
此程序设计中仅使用了MSP430单片机系统中I/O口资源,调试过程中,主要使用寄存器窗口,以及设置断点,观察系统程序主要实现对采集来的模拟信号进行模数转换,并对数字信号进行液晶显示,所以程序有采集模拟信号、DA转换和液晶显示三部分;在中断子程序设置断点,判断运行是否正确。在调试过程中,由局部到整体,判断程序可能出现的问题,认真分析逻辑,实现要求的功能,在简化程序。

5.2.1 CCSV5的打开步骤
  • 右键Code Composer Studio v5快捷方式,左键打开。会出现如图5.2所示界面:
5.1 Code Composer Studio v5软件加载界面
(2)加载完毕之后会有如图5.3所示界面出现:
5.2 Code Composer Studio v5软件打开界面
(3)选择Project->Import Existing CCS Eclipse Project,导入程序文件夹中的工程;具体操作如图5.4:
5.3 Code Composer Studio v5程序导入步骤图
5.2.2CCSV5的使用步骤               
  (1)CCS新建工程:
①首先打开CCS并确定工作区间,然后选择project-->New CCS Project
弹出图5.5对话框。,在简化程序。
5.4创建新工程主界面
②在project name中输入新建工程名称turang。
③在Device部分中,Variant中选择MSP430G××× Family,芯片选择MSP430G2553,其余选择默认。
④选择空工程,然后单击Finish,完成新工程的创建。
⑤创建工程如图5.6所示:
5.5ProjectExplorer界面
⑥然后选择File-->New-->Source File,新建一个C文件,并且命名为turang.C,并在工程名上右击选择Add Files,创建工程如图5.7:
5.6 新建工程界面
(2)CCS调试:
①调试之前,先确定目标配置文件是否已经创建并且配置正确。
②首先进行工程编译:选择Project-->Build Project,编译目标工程。编译结果如图5.8所示,表示没有错误,可以进行下载调试,如果有错误,知道调试到没错误为止。
5.7工程调试结果
③单击运行图标运行程序,可以观察显示的结果。在程序调试的过程中,也可通过设置断点来调试程序,选择需要设置断点的位置,右击鼠标选择Breakpoints-->Breakpoint,断点设置成功后显示图标可以通过双击该图标来取消该断点。程序运行的过程中还可以通过单步调试按钮进行调试。
5.3联合调试
整个系统的软硬件都完成后,需要进行联合调试,主要是针对系统设定的功能能否完成和完善进行调试。将电路线连接好,接入3V电源,LCD显示屏亮,且测得当前温度,如果当前温度超过给定的量程范围内LED等就会亮,此时就是发出警报,提示当前温度已超出给定温度范围。超出给定的温度(35°)LED灯就会亮,否则LED灯就会灭,如下图。
5.8联合调试图
1



6项目演练
对于本设计,尚可以进一步进行如下设想:
使用按键控制设定的温度的高低,设计思路如下:
系统主要包括16位单片机MSP430、温度采集模块DS18B20、液晶显示模块LCD1602、键盘控制和执行机构等几个部分。设计思路如下:
系统总体方案设计框图如下:



                       输入输入


6.1系统结构框图


7项目总结
此系统单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。430与51的最大区别在于430有很多的寄存器,较之51程序较为复杂。虽然与51单片机的组成都是差不多但还有很大的区别,就拿本次设计还说,虽说是之前是了解过还改用msp430设计还是有一点的难度,对于51单片机I/O口多,而现在我们用的msp430虽说是功能多,但编程起来还是很困难,可能是我知识的欠缺,之前所学的可能是最简单的,现在学习了这个16位的单片机还是有一点难度,不过我们还需多学习。
1



附录1电路设计原理图(参考)
1



附录2  PCB设计原理图(参考)

附录3 关键程序(参考)
  1. 主程序:
  2. void main()
  3. {
  4.                 WDTCTL=WDTPW+WDTHOLD;         //关闭看门狗
  5.                 BCSCTL1=CALBC1_1MHZ;          //BCSCTL1 Calibration Data for 1MHz
  6.                 DCOCTL=CALDCO_1MHZ;           //DCOCTL  Calibration Data for 1MHz
  7.                 BCSCTL2=SELM_1+DIVM_0;        //设置MCLK为1MHZ
  8.               // __enable_interrupt();      // 中断控制开启

  9.                 P1SEL&=0X00;            //设置P1口为I/O模式
  10.                 P2SEL&=0X00;            //设置P2口为I/O模式
  11.                 P1DIR|=0XFF;            //设置P1口为输出模式
  12.                 P2DIR|= (BIT0+BIT1+BIT2+BIT4);            //设置P2口为输出模式

  13.                 P1OUT&= 0X00;              //P1口清零
  14.                 P2OUT&=~(BIT0+BIT1+BIT2);  //P2.0 2.1 2.2 清零
  15.                 init();
  16.                 DS18B20_Init();
  17.                 //_EINT();

  18.                 while(1)
  19.                 {
  20.                               DS18B20_ReadTemp();
  21.                               xianshi();
  22.                               baojing ();
  23.                 }
  24. }


  25. 显示子程序:
  26. void xianshi()
  27. {
  28.               float n;              unsigned long value;
  29.               n=Temper*1000;
  30.               value = (unsigned long int)n;

  31.               temp_display[1] = digit[value/100000];          //100位
  32.               value = value%100000;

  33.               temp_display[2] = digit[value/10000];           //10位
  34.               value = value%10000;

  35.               temp_display[3] = digit[value/1000];            //1位
  36.               value = value%1000;

  37.               temp_display[5] = digit[value/100];             //0.1位
  38.               value = value%100;

  39.               temp_display[6] = digit[value/10];              //0.01位
  40.               value = value%10;

  41.               temp_display[7] = digit[value/1];               //0.001位
  42. }


  43. 报警子程序:
  44. void baojing ()
  45. {
  46.               t=35;
  47.               if(Temper>t)
  48.               {

  49.                             P2OUT|=BIT4;
  50.                             DispStr(0,0,LCDBuf3);
  51.                             DispStr(0,1,temp_display);
  52.                             Disp1Char(8,1,0XDF);

  53.               }
  54.               else
  55.                             {
  56.                             P2OUT&=~BIT4;
  57.                             DispStr(11,0,"     ");
  58.                             DispStr(0,0,LCDBuf1);
  59.                             DispStr(0,1,temp_display);
  60.                             Disp1Char(8,1,0XDF);

  61.                             }
  62. }


  63. 外延子程序:
  64. //按键中断函数
  65. #pragma vector=PORT2_VECTOR
  66. __interrupt void Port_2(void)
  67.               {


  68.                 if((P2IN&BIT4)==0)
  69.                 {
  70.                               delay_ms(10);
  71.                               if((P2IN&BIT4)==0)
  72.                               {
  73.                                t=t-1;
  74.                               }
  75.                               P2IFG&=~((BIT4+BIT5));
  76.                 }

  77.                 if((P2IN&BIT5)==0)
  78.                 {

  79.                               delay_ms(10);
  80.                               if((P2IN&BIT5)==0)
  81.                               {
  82.                               t=t+1;
  83.                               }
  84.                               P2IFG&=~((BIT4+BIT5));
  85.                 }
  86.                 P2IFG&=~((BIT4+BIT5));
  87.               }
复制代码

完整的Word格式文档51黑下载地址:
基于单片机的温度控制系统设计与实现.docx (1.45 MB, 下载次数: 143)
回复

使用道具 举报

ID:370204 发表于 2018-7-12 14:57 | 显示全部楼层
好东西 莫非是石油大学校友?
回复

使用道具 举报

ID:440497 发表于 2018-12-5 22:36 | 显示全部楼层
你好,老哥,这个是我的结课作业,你能告诉我要买什么元器件吗?谢谢!
回复

使用道具 举报

ID:491793 发表于 2019-3-16 20:35 | 显示全部楼层
你好,有完整代码吗?
回复

使用道具 举报

ID:499186 发表于 2019-3-27 15:35 | 显示全部楼层

你好,有完整代码吗?
回复

使用道具 举报

ID:516895 发表于 2019-4-20 09:32 | 显示全部楼层
楼主,大佬有完整版吗?跪求
回复

使用道具 举报

ID:634706 发表于 2019-12-7 15:30 | 显示全部楼层
感谢老哥
回复

使用道具 举报

ID:410729 发表于 2020-2-24 15:38 | 显示全部楼层
楼主有程序源码吗
回复

使用道具 举报

ID:760639 发表于 2020-5-25 14:46 | 显示全部楼层
求一份完整版程序
回复

使用道具 举报

ID:786453 发表于 2020-6-22 15:05 | 显示全部楼层
楼主,求完整代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表