赞
踩
提示:记录毕设
基于STM32的温度控制系统,主控使用STM32F103ZET6,在正点原子的精英板上开发(本人也在野火板子上测试成功)。
我们研究一种基于STM32的智能温度控制系统。该系统以STM32F103作为主控芯片﹐配备了PTC加热器、测温模块﹑等一系列模块。本文设计的温度控制系统主要目标是实现温度的设定值显示、实际值实时测量及显示,通过单片机连接的温度调节装置由软件与硬件电路配合来实现温度实时控制 ;显示可由软件控制在 LCD1602 中实现 ;比较采集温度与设定阈值的大小,然后进行循环控制调控,做出降温或升温处理 ;同时也可根据判断发出警报,用以提高系统的安全性。同时,单片机通过esp8266无线传输到手机上,以便管理人员查看。
1、题目的意义;
2、各种传感器及设备的一般技术和特殊技术的学习:
3、通信以及控制器的技术要求;
4、总体方案的选型设计;
5、STM32单片机及其外围设备的软硬件系统的技术开发:
6、系统的调试和总体运行原理
7、其他设计内容;具体要求:
1、硬件要求1张1号以上的大图:
2、软件以流程图方式表示:
3、有调试的说明。
打开定时器4,作为系统运行时间;
为了保证通讯:ESP8266每1S刷新一次;
#include "ds18b20.h" #include "delay.h" //复位DS18B20 void DS18B20_Rst(void) { DS18B20_IO_OUT(); //设置为输出 DS18B20_DQ_OUT=0; //拉低DQ delay_us(750); //拉低750us DS18B20_DQ_OUT=1; //DQ=1 delay_us(15); //15US } //等待DS18B20的回应 //返回1:未检测到DS18B20的存在 //返回0:存在 u8 DS18B20_Check(void) { u8 retry=0; DS18B20_IO_IN(); //设置为输入 while (DS18B20_DQ_IN&&retry<200) { retry++; delay_us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN&&retry<240) { retry++; delay_us(1); }; if(retry>=240)return 1; return 0; } //从DS18B20读取一个位 //返回值:1/0 u8 DS18B20_Read_Bit(void) { u8 data; DS18B20_IO_OUT(); //设置为输出 DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN(); //设置为输入 delay_us(12); if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data; } //从DS18B20读取一个字节 //返回值:读到的数据 u8 DS18B20_Read_Byte(void) { u8 i,j,dat; dat=0; for (i=1;i<=8;i++) { j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat; } //写一个字节到DS18B20 //dat:要写入的字节 void DS18B20_Write_Byte(u8 dat) { u8 j; u8 testb; DS18B20_IO_OUT(); //设置为输出 for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) // 写1 { DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; delay_us(60); } else //写0 { DS18B20_DQ_OUT=0; delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); } } } //开始温度转换 void DS18B20_Start(void) { DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0x44);// convert } //初始化DS18B20的IO口 DQ 同时检测DS的存在 //返回1:不存在 //返回0:存在 u8 DS18B20_Init(void) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟 GPIO_Initure.Pin=GPIO_PIN_12; //PB12 GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速 HAL_GPIO_Init(GPIOB,&GPIO_Initure); //初始化 DS18B20_Rst(); return DS18B20_Check(); } //从ds18b20得到温度值 //精度:0.1C //返回值:温度值 (-550~1250) short DS18B20_Get_Temp(void) { u8 temp; u8 TL,TH; short tem; DS18B20_Start (); //开始转换 DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc); // skip rom DS18B20_Write_Byte(0xbe); // convert TL=DS18B20_Read_Byte(); // LSB TH=DS18B20_Read_Byte(); // MSB if(TH>7) { TH=~TH; TL=~TL; temp=0;//温度为负 }else temp=1;//温度为正 tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得底八位 tem=(double)tem*0.625;//转换 if(temp)return tem; //返回温度值 else return -tem; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。