文档库 最新最全的文档下载
当前位置:文档库 › 基于单片机的温度控制系统设计

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

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

一、设计要求和条件

(一)要求

1、综合运用计算机、PLC、单片机、智能仪表、温度传感器等组成控制系统对模拟工

业对象的电加热锅炉进行控制。

2、掌握温度对象数学模型测试技术

3、掌握PID、PWM算法程序设计技术

4、掌握控制参数整定技术

5、掌握组态软件监控设计技术

6、提高要求:设计程序控温算法程序,实现锅炉温度升温—保温曲线控制。

(二)题目:

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

(三)条件:

1、实验设备:

硬件:(1)中央处理器:STM32

(2)模拟量输入模块:过程控制实验室开发的模拟量前向通道

(3)继电器输出模块:过程控制实验室开发的继电器输出模块(4)电源:可输出+-5V,+-12V电源

编程电缆

计算机

Pt100热电阻

空气开关DZ47LE C16

继电器(24v)3个

接触器型号:CJ20-10

加热锅炉

电源线若干

端子排两个

实验架

螺丝钉

电源

2、软件平台

STM32编程软件keil、三维力控组态软件

二、设计目的

设计锅炉温度电加热控制系统,温度设定在30—60℃可调,超调≦±1℃,稳态误差≦±0.5℃,用组态软件实现温度曲线监控。通过本次设计,掌握过程控制工程设计技术。

三、设计方案论证

(1)硬件方框图

(2)软件方框图

方案一:CPU自编PID算法,上位机修改参数

方案二:下位机(单片机)编写PWM,上位机(力控)编写PID程序修改下位机参数

四、设计结果和分析

结果分析:以上是PLC自编PID程序控制效果,可以看出总是存在余差1.7度左右。上升不是很快。说明PID参数还不是很好,但经多次调节,说明PID程序已经可以运行。

五、设计体会

六、参考文献

[1]胡寿松,自动控制原理[M]北京:高等教育出版社,1957.15-18.

附录:

(1)主程序

#include "includes.h"

float P=31.5,I=21.5,D=6.25,PV=12,SV=40,Step=0.1;

PID Boil_PID = { 40 ,12 ,31.5 ,21.5 ,6.25 ,0 ,0 ,0 ,0 ,0 ,0};

float Boil_PID_OUT = 0.0, Boil_PWM_OUT = 0.0 ;

float Current_Temperature=0.0;

void Device_init(void)

{

NVIC_Configuration();

SysTick_Init(72);

LCD_Init( );

USART1_Config( );//串口初始化不能放在TFT初始化之前否者串口不能用,不明白为什么.

LED_Init( );

LCD_CLEAR(0,320,320,240);

DS18B20_Init( );

Current_Temperature = DS18B20_Get_Temp() ;

Boil_PID.Present_Value = Current_Temperature ;

// Key_Board_Init( );

void Para_Speci_Show(void)

{

LCD_ShowString( 12,300,"P:",12 );

LCD_ShowString( 26,300,"I:",12 );

LCD_ShowString( 40,300,"D:",12 );

LCD_ShowString( 54,300,"PV:",12 );

LCD_ShowString( 68,300,"SV:",12 );

LCD_ShowString( 86,300,"WD:",12 );

}

void Parameter_Show(void)

{

LCD_Show_Float(12,220,P,12);

LCD_Show_Float(26,220,I,12);

LCD_Show_Float(40,220,D,12);

LCD_Show_Float(54,220,PV,12);

LCD_Show_Float(68,220,SV,12);

LCD_Show_Float(86,220,Current_Temperature,12);

}

void Frame_Show(void)

{

Para_Speci_Show( );

Parameter_Show( );

}

void Parameter_Init(void)

{

Operating_Paramrter[0] = 31.5; //P

Operating_Paramrter[1] = 21.5; //I

Operating_Paramrter[2] = 6.5; //D

Operating_Paramrter[3] = 0; //P_OUT

Operating_Paramrter[4] = 0; //I_OUT

Operating_Paramrter[5] = 0; //D_OUT

Operating_Paramrter[6] = 0; //PID_OUT

Operating_Paramrter[7] = 0; //PWM_OUT

Operating_Paramrter[8] = 12; //当前温度

Operating_Paramrter[9] = 40; //设定温度}

float Filter(float Current_Temperature)

{

float Current_Value=0.0;

float Temp=0.0;

Temp = DS18B20_Get_Temp( ) ;

Current_V alue = DS18B20_Get_Temp( );

Current_Value = ( Current_Value + Temp )/2.0;

return ( (1-Para) * Current_Temperature + Para * Current_Value );

}

void Data_Update( )

{

Boil_PID.Present_Value = Filter( Boil_PID.Present_Value );

Current_Temperature = Boil_PID.Present_Value;

P = Boil_PID.Proportion; // 比例常数Proportional Const

I = Boil_PID.Integral; // 积分常数Integral Const

D = Boil_PID.Derivative; // 微分常数Derivative Const

PV = Boil_PID.Present_Value;

Operating_Paramrter[3] = Boil_PID.P_OUT ; //P_OUT

Operating_Paramrter[4] = Boil_PID.I_OUT ; //I_OUT

Operating_Paramrter[5] = Boil_PID.D_OUT ; //D_OUT

Operating_Paramrter[6] = Boil_PID_OUT ; //PID_OUT

Operating_Paramrter[7] = Boil_PWM_OUT ; //PWM_OUT

Operating_Paramrter[8] = Boil_PID.Present_Value ; //当前温度

}

int main(void)

{

Device_init( );

Parameter_Init( );

Frame_Show( );

Data_Update( );

TIM3_PWM_Init(7200,39999);

TIM_SetCompare2(TIM3,3599);

while(1)

{

do{ Keyscan( ); Parameter_Show( ); } while(In_Flag);

Current_Temperature=DS18B20_Get_Temp();

Boil_PID_OUT=PIDCalc( &Boil_PID, Current_Temperature, 40 );

Boil_PWM_OUT=Boiler_Control( &Boil_PID, Current_Temperature, 40 );

Delay_ms(80);

LED4=~LED4;

Parameter_Show( );

Data_Delivery( );

Data_Update( );

}

}

(2)PID控制程序

#include "PID_Control.h"

/***************************单词示意************************************/

/*Previous: 早先的

*Prev_Error: 前一次误差

*增量式PID: Incremental_PID

*位置式PID: Positional_PID*/

/***************************单词示意************************************/

/**********************************************************************

Error:

a value of type "float" cannot be used to initialize an entity of type "PID"

一个值类型的“浮动”不能用来初始化一个实体类型的“PID”*

PID->Set_Value = Set_Point_Value;

******************************************************************************* *****/

/********************PID调节函数部分*************************************/

/******************************************************

* 函数名:Scale_Conv

* 描述:标度变换函数

* 输入: Converter_Value 转换变量

Direction 转换方向

* 输出:

* 举例:Direction:0:工程量> 数字量即由温度转换至AD值,Direction:1;数字量> 工程量即由AD值转换至温度值

******************************************************************************* /

float Scale_Conv( float Converter_Value,bool Direction)

{

float Result_Temp=0;

if(Direction)

{

if( (1538 < Converter_Value) && (Converter_Value <= 1762) ) Result_Temp = 0.032*(Converter_Value-1583)+85;

else if((583 < Converter_V alue) && (Converter_Value <= 1583) ) Result_Temp = 0.05 *(Converter_Value-583) +60;

else if((320 < Converter_V alue) && (Converter_Value <= 583) ) Result_Temp = 0.03 *(Converter_Value-320) +30;

else if((110 < Converter_Value) && (Converter_Value <= 320) ) Result_Temp = 0.02 *(Converter_Value-110) +12;

return Result_Temp;

}

else

{

if( (85 < Converter_Value) && (Converter_Value <= 100) ) Result_Temp =(Converter_V alue-85)/0.032+1538;

else if((60 < Converter_V alue) && (Converter_Value <= 85) ) Result_Temp =(Converter_V alue-30)/0.05 + 538;

else if((30 < Converter_V alue) && (Converter_Value <= 60) ) Result_Temp =(Converter_V alue-30)/0.03 + 320;

else if((12 < Converter_V alue) && (Converter_Value <= 30) ) Result_Temp =(Converter_V alue-12)/0.02 + 110;

return Result_Temp;

}

}

/******************************************************

* 函数名:PIDCalc

* 描述:PID计算函数

* 输入: PID *PP, float Pre_Value, float Set_Point_V alue

* 输出:PID_V alue

* 举例:

* Pre_Value: 当前值

* Prev_Error: 前一次误差

*********************************************************/

float PIDCalc( PID *PP, float Pre_Value, float Set_Point_Value )

{

float DError,Current_Error;

float PID_Value=0; // PID Response

(Output_Value)

PP->Set_Value = Set_Point_Value; // Set PID Set_Value

Current_Error = PP->Set_Value - Pre_Value; // 误差计算

PP->Sum_Error += Current_Error; // 积分

DError = PP->Last_Error - PP->Prev_Error; // 当前微分

PP->Prev_Error = PP->Last_Error; // 存储误差更新

PP->Last_Error = Current_Error; // 存储误差更新

if (PP->Sum_Error>1500) PP->Sum_Error=1500;

else if(PP->Sum_Error<-1500) PP->Sum_Error=-1500;

PP->P_OUT = PP->Proportion * Current_Error ; /*比例项*/

PP->I_OUT = PP->Integral * PP->Sum_Error ; /*积分项*/

PP->D_OUT = PP->Derivative * DError ; /*微分项*/

PID_Value = PP->P_OUT /*比例项*/

+ PP->I_OUT /*积分项*/

+ PP->D_OUT ; /*微分项*/

if ( PID_Value >= PWM_DA TA_MAX ) return PWM_DATA_MAX;

if ( PID_Value <= PWM_DA TA_MIN ) return PWM_DATA_MIN;

return PID_Value;

}

/******************************************************

* 函数名:Boiler_Control

* 描述:锅炉计算函数

* 输入: PID *PP, float Pre_Value, float Set_Point_V alue

* 输出:定时器3占空比

* 举例:

*********************************************************/

float Boiler_Control( PID *PP, float Pre_Temperature, float Set_Point_Temperature )

{

if ( Set_Point_Temperature - Pre_Temperature > 50 )

return (7199);

else if( Set_Point_Temperature - Pre_Temperature > 40 )

return (7199*0.9);

else if( Set_Point_Temperature - Pre_Temperature > 30 )

return (7199*0.8);

else if( Set_Point_Temperature - Pre_Temperature > 25 )

return (7199*0.65);

else if( Set_Point_Temperature - Pre_Temperature > 20 )

return (7199*0.45);

else if( ( 2 < Set_Point_Temperature - Pre_Temperature ) && \

( Set_Point_Temperature - Pre_Temperature < 15 ) )

return ( PIDCalc( PP, Pre_Temperature, Set_Point_Temperature ) );

else

return (0);

}

(3)通讯协议程序

#include "Modbus_ASCII.h"

#include "LED.h"

u8 Sendbuf[16] = { 0x40,0x30,0x31,0x30,0x31,0,0,0,0,0,0,0,0,0,0,0x0d };//单片机发送缓冲

u8 Answer[8] = { 0x40,0x30,0x31,0,0,0,0,0x0d };//下位机应答信息帧数组

u8 RecBuf[36] = { 0 };

u8 Tran_Data[36]= { 0 };

float Operating_Paramrter[12]={0.0};

u16 Integer_Paramrter[12]={0};

bool Run=false,Status_lamp=false,EP_lamp=false;

//Run:系统运行指示灯

//Status_lamp:状态指示灯

//EP_lamp:应急指示灯

void Upper_Computer_Update(PID *PP)

{

P = Operating_Paramrter[0];

I = Operating_Paramrter[1];

D = Operating_Paramrter[2];

SV = Operating_Paramrter[8];

PP->Proportion = Operating_Paramrter[0];

PP->Integral = Operating_Paramrter[1];

PP->Derivative = Operating_Paramrter[2];

PP->Set_Value = Operating_Paramrter[8];

}

void uartsends(u8 Buff[],u8 Data_len)

{

u8 i;

for(i=0;i

{

USART_SendData(USART1, Buff[i]);

while(USART_GetFlagStatus( USART1, USART_FLAG_TXE) == RESET) ;//等待一字节数据发送完

}

}

//ASCII到Hex的数据转换

u8 Dat_trans(u8 hight_v,u8 low_v)

{

u8 hight,low;//定义临时变量

if((hight_v>0x40)&&(hight_v<0x47))//如果是大写字母ABCDEF

hight=(hight_v-0x37)&0x0f;

else if((hight_v>0x60)&&(hight_v<0x67))//如果是小写字母abcdef

hight=(hight_v-0x57)&0x0f;//如果是ASCII中0x30~0x39

else

hight=(hight_v-0x30)&0x0f;

if((low_v>0x40)&&(low_v<0x47))//如果是大写字母ABCDEF

low=(low_v-0x37)&0x0f;

else if((low_v>0x60)&&(low_v<0x67))//如果是小写字母abcdef

low=(low_v-0x57)&0x0f;

else

low=(low_v-0x30)&0x0f;//如果是ASCII中0x30~0x39

return ( (hight<<4)+low );

}

//上位机标志判断上位机发送来的指令是读/写打包字节字浮点数

u8 Read_Or_Write(void)

{

u8 temp;

//temp=RecBuf[4]&0x0f;//这样写是错误的,ASCII与HEX转换不正确,一开始我用别人的程序这样做照成组态王不读浮点数,要引以为戒

temp=Dat_trans(RecBuf[3],RecBuf[4]);//区分读写不打包数据类型

return (temp&0x0f);

}

//单片机对的上位机写指令的应答

void write_inform(u8 dat)

{

u8 xordat;//异或值

u8 i,tmp1,tmp2;

u8 Temp=0;

tmp1=(Kingview_Slave_Device0_Addr>>4)&0x0f;

tmp2=Kingview_Slave_Device0_Addr&0x0f;

if(tmp1>9) Answer[1]=tmp1+0x37;

else Answer[1]=tmp1+0x30;

if(tmp2>9) Answer[2]=tmp2+0x37;

else Answer[2]=tmp2+0x30;

Answer[3]=dat;

Answer[4]=dat;

xordat=0;

for(i=1;i<3;i++) { xordat^=Answer[i]; }

Temp=xordat;

tmp1=(Temp>>4)&0x0f;

tmp2=Temp&0x0f;

if(tmp1>9) Answer[5]=tmp1+0x37;

else Answer[5]=tmp1+0x30;

if(tmp2>9) Answer[6]=tmp2+0x37;

else Answer[6]=tmp2+0x30;

uartsends(Answer,8);

}

/******************************************************

* 函数名:u8 check_CRC()

* 描述:对组态王发送过来的数据帧进行CRC校验

* 输入:

* 输出:

* 举例:

*********************************************************/

u8 check_CRC()

{

u8 xordat,i,ctmp1,ctmp2,temp;

u8 WR_Temp=0;

WR_Temp=Read_Or_Write();

//读数据时,校验的数据长度一致

//读写数据校验长度一定要写正确,我就因为数据校验长度没写正确结果使程序延迟完工一个星期,悲剧啊!

if((WR_Temp&0x01)==Kingview_Read) { temp=10; /*读数据时需要异或的位时10位*/ }

if((WR_Temp&0x0D)==Kingview_Write) { temp=12; /*写字节时需要异或的位时12位*/ }

if((WR_Temp&0x0D)==Kingview_Write_Word) { temp=14; /*写字时需要异或的位时14位*/ }

if( ((WR_Temp&0x0D)==Kingview_Write_Float) ||

((WR_Temp&0x0D)==Kingview_Write_Float1) )

{

temp=18; /*写浮点数时需要异或的位时18位*/

}

xordat=0;

for(i=1;i<=temp;i++)

xordat^=RecBuf[i];

ctmp1=(xordat>>4)&0x0f;

ctmp2=xordat&0x0f;

if(ctmp1>9) ctmp1=ctmp1+0x37;

else ctmp1=ctmp1+0x30;

if(ctmp2>9) ctmp2=ctmp2+0x37;

else ctmp2=ctmp2+0x30;

if((ctmp1==RecBuf[temp+1])&&(ctmp2==RecBuf[temp+2])) return 1;

else

return 0;

}

//浮点数到ASCII码的转换

void Float_to_ASC(u8 * c,float d)

{

u8 i = 0,j = 0;

u8 temp=0;

bool ShuFu = false, JieFu = false;

int inbyte2 = 0, inbyte3 = 0, inbyte4 = 0;

float F_afterbyte2 = 0, F_afterbyte3 = 0;

if(d == 0) { for( j = 0; j < 8; j++) c[j] = 0x30; return; }

if(d < 0) { ShuFu = true; d = (-1) * d; }

while(d > 1) { d =(float)(d / 2.0); i++ ; }

while(d <= 0.5) { JieFu = true; d = (float)(d * 2.0); i++; }

if(JieFu) { if(i > 0x3f) i =

0x3f ; }

else if(i > 0x32) i = 0x32 ;

if(ShuFu) i = i | 0x80;

if(JieFu) i = i | 0x40;

temp=i/16;

if(temp<=9) c[0] = temp+0x30;

else c[0] = temp+0x37;

temp=i%16;

if(temp<=9) c[1] = temp+0x30;

else c[1] = temp+0x37;

if(d == 1) { for( j = 2; j < 8; j++) c[j] =

0x46; }

else

{

inbyte2 = (int)(d * 256);

F_afterbyte2 = (d * 256) - (int)(d * 256);

inbyte3 = (int)(F_afterbyte2 * 256);

F_afterbyte3 = (F_afterbyte2 * 256) - (int)(F_afterbyte2 * 256);

inbyte4 = (int)(F_afterbyte3 * 256);

temp=inbyte2/16;

if(temp<=9) c[2] = temp+0x30;

else c[2] = temp+0x37;

temp=inbyte2%16;

if(temp<=9) c[3] = temp+0x30;

else c[3] = temp+0x37;

temp=inbyte3/16;

if(temp<=9) c[4] = temp+0x30;

else c[4] = temp+0x37;

temp=inbyte3%16;

if(temp<=9) c[5] = temp+0x30;

else c[5] = temp+0x37;

temp=inbyte4/16;

if(temp<=9) c[6] = temp+0x30;

else c[6] = temp+0x37;

temp=inbyte4%16;

if(temp<=9) c[7] = temp+0x30;

else c[7] = temp+0x37;

}

}

//ASCII码到浮点数的格式转换

float ASC_to_Float(u8 *c)

{

u8 Hd[8], Jiema[3];

float DTc[3];

float Decimal = 0;

float returnflo = 0.0;

bool ShuFU = false, JieFU = false;

if((c[7] > 0x40) && (c[7] < 0x47))

Hd[7] = ((c[7] - 0x37) & 0x0f);

else if((c[7] > 0x60) && (c[7] < 0x67))

Hd[7] = ((c[7] - 0x57) & 0x0f);

else

Hd[7] = ((c[7] - 0x30) & 0x0f);

if((c[6] > 0x40) && (c[6] < 0x47))

Hd[6] = ((c[6] - 0x37) & 0x0f);

else if((c[6] > 0x60) && (c[6] < 0x67))

Hd[6] = ((c[6] - 0x57) & 0x0f);

else

Hd[6] = ((c[6] - 0x30) & 0x0f);

DTc[2] = (float)(((float)(Hd[6] * 16.0) + (float)(Hd[7])) / 256.0);

if((c[5] > 0x40) && (c[5] < 0x47))

Hd[5] = ((c[5] - 0x37) & 0x0f);

else if((c[5] > 0x60) && (c[5] < 0x67))

Hd[5] = ((c[5] - 0x57) & 0x0f);

else

Hd[5] = ((c[5] - 0x30) & 0x0f);

if((c[4] > 0x40) && (c[4] < 0x47))

Hd[4] = ((c[4] - 0x37) & 0x0f);

else if((c[4] > 0x60) && (c[4] < 0x67))

Hd[4] = ((c[4] - 0x57) & 0x0f);

else

Hd[4] = ((c[4] - 0x30) & 0x0f);

DTc[1] = (float)((((float)(Hd[4] * 16.0) + (float)Hd[5]) + DTc[2]) / 256.0);

if((c[3] > 0x40) && (c[3] < 0x47))

Hd[3] = ((c[3] - 0x37) & 0x0f);

else if((c[3] > 0x60) && (c[3] < 0x67))

Hd[3] = ((c[3] - 0x57) & 0x0f);

else

Hd[3] = ((c[3] - 0x30) & 0x0f);

if((c[2] > 0x40) && (c[2] < 0x47))

Hd[2] = ((c[2] - 0x37) & 0x0f);

else if((c[2] > 0x60) && (c[2] < 0x67))

Hd[2] = ((c[2] - 0x57) & 0x0f);

else

Hd[2] = ((c[2] - 0x30) & 0x0f);

Decimal = (float)(((float)(Hd[2] * 16) + (float)(Hd[3]) + DTc[1])/ 256.0);

if((c[1] > 0x40) && (c[1] < 0x47)) Jiema[1] = ((c[1] - 0x37) & 0x0f);

else if((c[1] > 0x60) && (c[1] < 0x67)) Jiema[1] = ((c[1] - 0x57) & 0x0f);

else Jiema[1] = ((c[1] - 0x30) & 0x0f);

if((c[0] > 0x40) && (c[0] < 0x47)) Jiema[0] = ((c[0] - 0x37) & 0x0f);

else if((c[0] > 0x60) && (c[0] < 0x67)) Jiema[0] = ((c[0] - 0x57) & 0x0f);

else Jiema[0] = ((c[0] - 0x30) & 0x0f);

ShuFU = ((Jiema[0] & 0x08) >> 3) > 0;

JieFU = ((Jiema[0] & 0x04) >> 2) > 0;

Jiema[2] = (Jiema[0] & 0x03) * 16 + Jiema[1];

if(JieFU) returnflo = (float)pow(2, (-1) * Jiema[2]) * Decimal;

else returnflo = (float)pow(2, Jiema[2]) * Decimal;

if(ShuFU) returnflo = (-1) * returnflo;

return returnflo;

}

/*

* 函数名:Read_Byte_Response

* 描述:组态王为读指令时单片机的应答

* 输入:无

* 输出:无

* 调用:外部调用

*/

void Read_Byte_Response()

{

u8 ctmp1,ctmp2,xordat,i;

u8 Temp=0;

u8 Data_Addr=0;//数据地址

u8 F_Temp[8]={0x30};//浮点数的ASCII暂存文件

if((Read_Or_Write()&0x0C)==0x00) //读字节,不打包

{

Sendbuf[0]=0x40;//开始字头

ctmp1=(Kingview_Slave_Device0_Addr>>4)&0x0f;

ctmp2=Kingview_Slave_Device0_Addr&0x0f;

if(ctmp1>9) Sendbuf[1]=ctmp1+0x37;

else Sendbuf[1]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[2]=ctmp2+0x37;

else Sendbuf[2]=ctmp2+0x30;

Sendbuf[3]=0x30;

Sendbuf[4]=0x31;//数据字节数:1

Data_Addr=Dat_trans(RecBuf[5],RecBuf[6])*256+Dat_trans(RecBuf[7],RecBuf[8])-Char_Base_ Address;

Temp=Tran_Data[Data_Addr]; //由地址寻址数据

ctmp1=(Temp>>4)&0x0f;

ctmp2=Temp&0x0f;

if(ctmp1>9) Sendbuf[5]=ctmp1+0x37;

else Sendbuf[5]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[6]=ctmp2+0x37;

else Sendbuf[6]=ctmp2+0x30;

xordat=0;

for(i=1;i<7;i++)

{

xordat^=Sendbuf[i];

}

Temp=xordat;

ctmp1=(Temp>>4)&0x0f;

ctmp2=Temp&0x0f;

if(ctmp1>9) Sendbuf[7]=ctmp1+0x37;

else Sendbuf[7]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[8]=ctmp2+0x37;

else Sendbuf[8]=ctmp2+0x30;

Sendbuf[9]= 0x0d;

uartsends(Sendbuf,10);

}

else if((Read_Or_Write()&0x0C)==0x04) //读字,不打包

{

Sendbuf[0]=0x40;//开始字头

ctmp1=(Kingview_Slave_Device0_Addr>>4)&0x0f;

ctmp2=Kingview_Slave_Device0_Addr&0x0f;

if(ctmp1>9) Sendbuf[1]=ctmp1+0x37;

else Sendbuf[1]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[2]=ctmp2+0x37;

else Sendbuf[2]=ctmp2+0x30;

Sendbuf[3]= 0x30;

Sendbuf[4]= 0x32;//数据字节数:2

Data_Addr=(Dat_trans(RecBuf[5],RecBuf[6])*256+Dat_trans(RecBuf[7], RecBuf[8])-Integer_Base_Address )/2;

for(i=0; i<2; i++)

{

Temp=Integer_Paramrter[Data_Addr]>>(8*(1-i));

ctmp1=(Temp>>4)&0x0f;

ctmp2=Temp&0x0f;

if(ctmp1>9) Sendbuf[5+2*i]=ctmp1+0x37;

else Sendbuf[5+2*i]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[6+2*i]=ctmp2+0x37;

else Sendbuf[6+2*i]=ctmp2+0x30;

}

xordat=0;

for(i=1;i<9;i++)

{

xordat^=Sendbuf[i];

}

Temp=xordat;

ctmp1=(Temp>>4)&0x0f;

ctmp2=Temp&0x0f;

if(ctmp1>9) Sendbuf[9]=ctmp1+0x37;

else Sendbuf[9]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[10]=ctmp2+0x37;

else Sendbuf[10]=ctmp2+0x30;

Sendbuf[11]= 0x0d;

uartsends(Sendbuf,12);

}

else if( ((Read_Or_Write()&0x0C)==0x08) ||

((Read_Or_Write()&0x0C)==0x0C) ) //读浮点数,不打包

{

Sendbuf[0]=0x40;//开始字头

ctmp1=(Kingview_Slave_Device0_Addr>>4)&0x0f;

ctmp2= Kingview_Slave_Device0_Addr&0x0f;

if(ctmp1>9) Sendbuf[1]=ctmp1+0x37;

else Sendbuf[1]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[2]=ctmp2+0x37;

else Sendbuf[2]=ctmp2+0x30;

Sendbuf[3]= 0x30;

Sendbuf[4]= 0x34;//数据字节数:4

Data_Addr=(Dat_trans(RecBuf[5],RecBuf[6])*256+Dat_trans(RecBuf[7], RecBuf[8])-Float_Base_Address )/4;

//浮点数到ASCII码的转换

Float_to_ASC( F_Temp , Operating_Paramrter[Data_Addr]);

for(i=0;i<8;i++)

{

Sendbuf[5+i]=F_Temp[i];

}

xordat=0;

for(i=1;i<13;i++)

{

xordat^=Sendbuf[i];

}

Temp =xordat;

ctmp1=(Temp>>4)&0x0f;

ctmp2=Temp&0x0f;

if(ctmp1>9) Sendbuf[13]=ctmp1+0x37;

else Sendbuf[13]=ctmp1+0x30;

if(ctmp2>9) Sendbuf[14]=ctmp2+0x37;

else Sendbuf[14]=ctmp2+0x30;

Sendbuf[15]= 0x0d;

uartsends(Sendbuf,16);

}

else write_inform('#');

}

/*

* 函数名:Write_Byte_Response

* 描述:组态王欲写数据到单片机时单片机的应答

* 输入:无

* 输出:无

* 调用:外部调用

*/

void Write_Byte_Response()

{

u8 temp[8];

u8 c[8];

u8 Data_Addr=0;//数据地址

u8 i=0;

if((Read_Or_Write()&0x0D)==0x01) //写字节,不打包

{

Data_Addr=Dat_trans(RecBuf[5],RecBuf[6])*256+Dat_trans(RecBuf[7],R ecBuf[8])- Char_Base_Address;//获取目标数据在数组中的偏移量

temp[0]=Dat_trans(RecBuf[11],RecBuf[12]);

Tran_Data[Data_Addr]=temp[0]; //将此数据放到此地址中

}

else if((Read_Or_Write()&0x0D)==0x05)//写字,不打包

{

温度控制器的设计与制作共13页

温度控制器的设计与制作 一、功能要求 设计并制作一个温度控制器,用于自动接通或断开室内的电加热设备,从而使室内温度达到设定温度要求,并能实时显示室内温度。当室内温度大于等于设定温度时,控制器断 ?时,控制器接通电加热设备。 开电加热设备;当室内温度比设定温度小2C 控温范围:0~51C? 控温精度:≤1C? 二、硬件系统设计 1.硬件系统由七部分组成,即单片机及看门狗电路、温度检测电路、控制输出电路、键盘电路、显示电路、设置温度储存电路及电源电路。 (1)单片机及看门狗电路 根据设计所需的单片机的内部资源(程序存储器的容量、数据存储器的容量及I/O口数量),选择AT89C51-24PC较合适。为了防止程序跑飞,导致温度失控,进而引起可怕的后果,本设计加入了硬件看门狗电路IMP813L,如果它的WDI脚不处于浮空状态,在1.6秒内WDI不被触发(即没有检测到上什沿或下降沿),就说明程序已经跑飞,看门狗输出端WDO将输出低电平到手动复位端,使复位输出端RST发出复位信号,使单片机可靠复位,即程序重新开始执行。(注:如果选用AT89S51,由于其内部已具有看门狗电路,就不需外加IMP813L) (2)温度检测电路 温度传感器采用AD590,它实际上是一个与绝对温度成正比的电流源,它的工作电压为4~30V,感测的温度范围为-550C~+1500C,具有良好的线性输出,其输出电流与温度成正比,即1μA/K。因此在00C时的输出电流为273.2μA,在1000C时输出电流为373.2μA。温度传感器将温度的变化转变为电流信号,通过电阻后转变电压信号,经过运算放大器JRC4558运算处理,处理后得到的模拟电压信号传输给A/D转换部分。A/D转换器选用ADC0804,它是用CMOS集成工艺制成的逐次逼近型模数转换芯片,分辨率8位,转换时间100μs,基准电压0~5V,输入模拟电压0~5V。 (3)控制输出电路 控制信号由单片机的P1.4引脚输出,经过光耦TLP521-1隔离后,经三极管C8550直接驱动继电器WJ108-1C-05VDC,如果所接的电加热设备的功率≤2KW,则可利用继电器的常开触点直接控制加热设备,如果加热设备的功率>2KW,可以继电器控制接触器,由接触器直接控制加热设备。 (4)键盘电路 键盘共有四个按键,分别是S1(设置)、S2(+)、S3(-)、S4(储存)。通过键盘来设置室内应达到的温度,键盘采用中断方式控制。 (5)显示电路 显示电路由两位E10501_AR数码管组成,由两片74LS164驱动,实现静态显示,74LS164所需的串行数据和时钟由单片机的P3.0和P3.1提供。对于学过“串行口”知识的班级,实习时,可以采用串行口工作于方式0,即同步移位寄存器的输出方式,通过串行口输出显示数据(实时温度值或设置温度值);对于没学过“串行口”知识的班级,实习时,可以采用模拟串行口的输出方式,实现显示数据的串行输出。 (6)设置温度存储电路 为了防止设定温度在电源断电后丢失,此设计加入了储存电路,储存器选用具有I2C总线功能的AT24C01或FM24C01均可。每次通过键盘设置的室内设定温度都通过储存器储存起来,即使是电源断电,储存器存储的设定温度也不丢失,在电源来电后,单片机自动将设

基于单片机的温度控制系统设计文献综述

文献综述 题目基于单片机的温度控制 系统设计 学生姓名 X X X 专业班级自动化07-2 学号20070x0x0x0x 院(系) xxxxxxxxxxxxxxxx 指导教师 x x x 完成时间 2011年06月10日

基于单片机的温度控制 系统设计文献综述 1.前言 温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量。而且随着现代工业的发展,人们需要对工业生产中有关温度系统进行控制,如钢铁冶炼过程需要对刚出炉的钢铁进行热处理,塑料的定型及各种加热炉、热处理炉、反应炉和锅炉中温度进行实时监测和精确控制。而有很多领域的温度可能较高或较低,现场也会较复杂,有时人无法靠近或现场无需人力来监控。如加热炉大都采用简单的温控仪表和温控电路进行控制, 存在控制精度低、超调量大等缺点, 很难达到生产工艺要求。且在很多热处理行业都存在类似的问题,所以,设计一个较为通用的温度控制系统具有重要意义。这时我们可以采用单片机控制,这些控制技术会大大提高控制精度,不但使控制简捷,降低了产品的成本,还可以和计算机通讯,提高了生产效率. 单片机是指芯片本身,而单片机系统是为实现某一个控制应用需要由用户设计的,是一个围绕单片机芯片而组建的计算机应用系统,这是单片机应用系统。单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,应用日益广泛,并且正在逐步取代现有的

多片微机应用系统。 2.历史研究与现状 在工业生产温控系统中采用的测温元件和测量方法不相同,产品的工艺不同,控制温度的精度也不相同,因此对数据采集的精度和采用的控制方法也不相同。 通常由位式或时间比例式温度调节仪控制的工业加热炉温度控制系统,其主回路由接触器控制时因为不能快速反应,所以控温精度都比较低,大多在几度甚至十几度以上。随着电力电子技术及元器件的发展,出现了以下几种解决的方案: (1)主回路用无触点的可控硅和固态继电器代替接触器,配以PID或模糊逻辑控制的调节仪构成的温度控制系统,其控温精度大大提高,常在±2℃以内,优势是采用模糊控制与PID 控制相结合,对控制范围宽、响应快且连续可调系统有巨大的优越性。 (2)采用单片机温度控制系统。用单线数字温度传感器采集温度数据,打破了传统的热电阻、热电偶再通过A/D 转换采集温度的思路。用单片机对数字进行处理和控制,通过RS - 232 串口传到PC 机对温度进行监视与报警,设置温度的上限和下限。其优势是结构简单,编程不需要用专用的编程器,只需点击电脑鼠标就可以把编好的程序写到单片机中,很方便且调试、修改和升级很容易。 (3)ARM(Advanced RISC Machine)嵌入式系统模糊温度控制。利用ARM处理器的强大功能,通过读取温度传感器数据,并与设定值进行比较,然后对温度进行控制。通过内嵌的操作系统μCLinux获得极好的实时性,并且通过TCP/IP协议能与PC机

基于51单片机的温度控制系统

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王*

毕业论文设计 基于51单片机的温度控制系统

摘要 在日常生活中温度在我们身边无时不在,温度的控制和应用在各个领域都有重要的作用。很多行业中都有大量的用电加热设备,和温度控制设备,如用于报警的温度自动报警系统,热处理的加热炉,用于融化金属的坩锅电阻炉及各种不同用途的温度箱等,这些都采用单片机技术,利用单片机语言程序对它们进行控制。而单片机技术具有控制和操作使用方便、结构简单便于修改和维护、灵活性大且具有一定的智能性等特 点,可以精确的控 制技术标准,提高了温控指标,也大大的提高了产品的质量和性能。 由于单片机技术的优点突出,智能化温度控制技术正被广泛地采用。本文介绍了基于单片机AT89C51 的温度控制系统的设计方案与软硬件实现。采用温度传感器DS18B20 采集温度数据,7段数码管显示温度数据,按键设置温度上下限,当温度低于设定的下限时,点亮绿色发光二极管,当温度高于设定的上限时,点亮红色发光二极管。给出了系统总体框架、程序流程图和Protel 原理图,并在硬件平台上实现了所设计功能。 关键词:单片机温度控制系统温度传感器

Abstract In daily life, the temperature in our side the ever-present, the control of the temperature and the application in various fields all have important role. Many industry there are a large number of electric heating equipment, and the temperature control equipment, such as used for alarm automatic temperature alarm systems, heat treatment furnace, used to melt metal crucible resistance furnace, and all kinds of different USES of temperature box and so on, these using single chip microcomputer, using single chip computer language program to control them. And single-chip microcomputer technology has control and convenient in operation, easy to modify and maintenance of simple structure, flexibility is large and has some of the intelligence and other characteristics, we can accurately control technology standard to improve the temperature control index, also greatly improve the quality of the products and performance. Because of the advantages of the single chip microcomputer intelligent temperature control technology outstanding, is being widely adopted. This paper introduces the temperature control based on single chip microcomputer AT89C51 design scheme of the system and the hardware and software implementation. The temperature sensor DS18B20 collection temperature data, 7 period of digital pipe display, the upper and lower limits of temperature button when temperature below the setting of the lower limit, light green leds, when the temperature is higher than the set on the limit, light red leds. Given the system framework and program flow chart and principle chart, and in Protel hardware platform to realize the function of the design. Keywords:SCM Temperature control system Temperature sensors

单片机课程设计(温度控制系统)

温度控制系统设计 题目: 基于51单片机的温度控制系统设计姓名: 学院: 电气工程与自动化学院 专业: 电气工程及其自动化 班级: 学号: 指导教师:

2015年5月31日 摘要: (3) 一、系统设计 (3) 1.1 项目概要 (3) 1.2设计任务和要求: (4) 二、硬件设计 (4) 2.1 硬件设计概要 (4) 2.2 信息处理模块 (4) 2.3 温度采集模块 (5) 2.3.1传感器DS18b20简介 (5) 2.3.2实验模拟电路图 (7) 2.3.3程序流程图 (6) 2.4控制调节模块 (9) 2.4.1升温调节系统 (9) 2.4.2温度上下限调节系统 (8) 2.43报警电路系统 (9) 2.5显示模块 (12) 三、两周实习总结 (13) 四、参考文献 (13) 五、附录 (15)

5.1原理图 (15) 摘要: 在现代工业生产中,温度是常用的测量被控因素。本设计是基于51单片机控制,将DS18B20温度传感器实时温度转化,并通过1602液晶对温度实行实时显示,并通过加热片(PWM波,改变其占空比)加热与步进电机降温逐次逼近的方式,将温度保持在设定温度,通过按键调节温度报警区域,实现对温度在0℃-99℃控制的自动化。实验结果表明此结构完全可行,温度偏差可达0.1℃以内。 关键字:AT89C51单片机;温控;DS18b20 一、系统设计 1.1 项目概要 温度控制系统无论是工业生产过程,还是日常生活都起着非常重要的作用,过低或过高的温度环境不仅是一种资源的浪费,同时也会对机器和工作人员的寿命产生严重影响,极有可能造成严重的经济财产损失,给生活生产带来许多利的因素,基于AT89C51的单片机温度控制系统与传统的温度控制相比具有操作方便、价价格便宜、精确度高和开展容易等优点,因此市场前景好。

温度控制器的设计

目录 第一章课程设计要求及电路说明 (3) 1.1课程设计要求与技术指标 (3) 1.2课程设计电路说明 (4) 第二章课程设计及结果分析 (6) 2.1课程设计思想 (6) 2.2课程设计问题及解决办法 (6) 2.3调试结果分析 (7) 第三章课程设计方案特点及体会 (8) 3.1 课程设计方案特点 (8) 3.2 课程设计心得体会 (9) 参考文献 (9) 附录 (9)

第一章课程设计要求及电路说明 1.1课程设计要求与技术指标 温度控制器的设计 设计要求与技术指标: 1、设计要求 (1)设计一个温度控制器电路; (2)根据性能指标,计算元件参数,选好元件,设计电路并画出电路图; (3)撰写设计报告。 2、技术指标 温度测量范围0—99℃,精度误差为0.1℃;LED数码管直读显示;温度报警指示灯。

1.2课程设计电路说明 1.2.1系统单元电路组成 温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。 1.2.2设计电路说明 主控制器:CPU是整个控制部分的核心,由STC89C52芯片连同附加电路构成的单片机最小系统作为数据处理及控制模块. 显示电路:显示电路采用4个共阳LED数码管,用于显示温度计的数值。报警电路:报警电路由蜂鸣器和三极管组成,当测量温度超过设计的温度时,该电路就会发出报警。 温度传感器:主要由DS18B20芯片组成,用于温度的采集。 时钟振荡:时钟振荡电路由晶振和电容组成,为STC89C52芯片提供稳定的时钟频率。

第二章课程设计及结果分析 2.1课程设计 2.1.1设计方案论证与比较 显示电路方案 方案一:采用数码管动态显示 使用一个七段LED数码管,采用动态显示的方法来显示各项指标,此方法价格成本低,而且自己也比较熟悉,实验室也常备有此元件。 方案二:采用LCD液晶显示 采用1602 LCD液晶显示,此方案显示内容相对丰富,且布线较为简单。 综合上述原因,采用方案一,使用数码管作为显示电路。 测温电路方案 方案一:采用模拟温度传感器测温 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。 方案二:采用数字温度传感器 经过查询相关的资料,发现在单片机电路设计中,大多数都是使用传感器,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。 综合考虑,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。 2.1.2设计总体方案 根据上述方案比较,结合题目要可以将系统分为主控模块,显示模块,温度采集模块和报警模块,其框图如下:

模电课设—温度控制系统的设计

目录 1.原理电路的设计 (1) 1.1总体方案设计 (1) 1.1.1简单原理叙述 (1) 1.1.2设计方案选择 (1) 1.2单元电路的设计 (3) 1.2.1温度信号的采集与转化单元——温度传感器 (3) 1.2.2电压信号的处理单元——运算放大器 (4) 1.2.3电压表征温度单元 (5) 1.2.4电压控制单元——迟滞比较器 (6) 1.2.5驱动单元——继电器 (7) 1.2.6 制冷部分——Tec半导体制冷片 (8) 1.3完整电路图 (10) 2.仿真结果分析 (11) 3 实物展示 (13) 3.1 实物焊接效果图 (13) 3.2 实物性能测试数据 (14) 3.2.1制冷测试 (14) 3.2.2制热测试 (18) 3.3.3性能测试数据分析 (20) 4总结、收获与体会 (21) 附录一元件清单 (22) 附录二参考文献. (23)

摘要 本课程设计以温度传感器LM35、运算放大器UA741、NE5532P及电压比较器LM339N 为电路系统的主要组成元件,扩展适当的接口电路,制作一个温度控制系统,通过室温的变化和改变设定的温度,来改变电压传感器上两个输入端电压的大小,通过三极管开关电路控制继电器的通断,来控制Tec制冷片的工作。这样循环往复执行这样一个周期性的动作,从而把温度控制在一定范围内。学会查询文献资料,撰写论文的方法,并提交课程设计报告和实验成品。 关键词:温度;测量;控制。

Abstract This course is designed to a temperature sensor LM35, an operational amplifier UA741, NE5532P and a voltage comparator LM339N circuit system of the main components. Extending the appropriate interface circuit, make a temperature control system. By changing the temperature changes and set the temperature to change the size of the two input ends of the voltage on the voltage sensor, an audion tube switch circuit to control the on-off relay to control Tec cooling piece work. This cycle of performing such a periodic motion, thus controlling the temperature in a certain range. Learn to query the literature, writing papers, and submitted to the curriculum design report and experimental products. Key words: temperature ; measure ;control

基于单片机的温控器

天津理工大学 课程设计报告 题目:基于单片机的温控器设计 学生姓名李天辉学号 20101009 届 2013 班级电气4班 指导教师专业电气工程及其自动化

说明 1. 课程设计文本材料包括设计报告、任务书、指导书三部分,其中 任务书、指导书由教师完成。按设计报告、任务书、指导书顺序装订成册。 2. 学生根据指导教师下达的任务书、指导书完成课程设计工作。 3. 设计报告内容建议主要包括:概述、系统工作原理、系统组成、设计内容、小结和参考资料。 4. 设计报告字数应在3000-4000字,采用电子绘图、采用小四号宋 体、1.25倍行距。 5.课程设计成绩由平时表现(30%)、设计报告(30%)和提问成绩(40%) 组成。

课程设计任务书、指导书 课程设计题目: Ⅰ.课程设计任务书 一、课程设计的内容和要求(包括原始数据、技术要求、工作量) 当今社会,温控器已经广泛应用于电冰箱、空调和电热毯等领域中。其优点是控制精度高,稳定性好,速度快自动化程度高,温度和风速全自动控制,操作简单可靠,对执行器要求低,故障率低,效果好。目前国内外生产厂家正在研究开发第三代智能型室温空调温控器,应用新型控制模型和数控芯片实现智能控制。现在已有国内厂家生产出了智能型室温空调温控器,并已应用于实际工程。 本课程设计要求设计温度控制系统,主要由温度数据采集、温度控制、按键和显示、通讯等部分组成。温度采集采用NTC或PTC热敏电阻(或由电位器模拟)或集成温度传感器、集成运算放大器构成的信号调理电路、AD转换器组成。温控部分采用交流开关BT136通过改变导通角进行调压限流达到控制加热丝温度的目的。 温度控制算法采用PID控制,可以采用普通PID或模糊PID。对控制PID参数进行整定,进行MATLAB仿真,说明控制效果。进行程序编制。 设计通讯协议,并能够通过RS485总线将数据传回上位机。2.课程设计的要求 1、选择相应元器件设计温度控制系统原理图并绘制PCB版图。 2、进行PID控制算法仿真,设计PID参数,或模糊PID规则。 3、系统功能要求:a要能够显示实时温度;b能够进行温度设置;c 能够进行PID参数设定;d能够把数据传回上位机;e可以设定本机地址。F温度控制范围0~99.9度。 4、编制程序并调试通过,并有程序流程图。

温度控制器课程设计要点

郑州科技学院 《模拟电子技术》课程设计 题目温度控制器 学生姓名 专业班级 学号 院(系)信息工程学院 指导教师 完成时间 2015年12月31日

郑州科技学院 模拟电子技术课程设计任务书 专业 14级通信工程班级 2班学号姓名 一、设计题目温度控制器 二、设计任务与要求 1、当温度低于设定温度时,两个加热丝同时通电加热,指示灯发光; 2、当水温高于设定温度时,两根加热丝都不通电,指示灯熄灭; 3、根据上述要求选定设计方案,画出系统框图,并写出详细的设计过程; 4、利用Multisim软件画出一套完整的设计电路图,并列出所有的元件清单; 5、安装调试并按规定格式写出课程设计报告书. 三、参考文献 [1]吴友宇.模拟电子技术基础[M]. 清华大学出版社,2009.52~55. [2]孙梅生.电子技术基础课程设计[M]. 高等教育出版社,2005.25~28. [3]徐国华.电子技能实训教程[M]. 北京航空航天大学出版社,2006.13 ~15. [4]陈杰,黄鸿.传感器与检测技术[M].北京:高等教育出版社,2008.22~25. [5]翟玉文等.电子设计与实践[M].北京:北京中国电力出版社,2005.11~13. [6]万嘉若,林康运.电子线路基础[M]. 高等教育出版社,2006.27 ~29. 四、设计时间 2015 年12月21 日至2015 年12 月31 日 指导教师签名: 年月日

本设计是一种结构简单、性能稳定、使用方便、价格低廉、使用寿命长、具有一定的实用性等优点的温度控制电路。本文设计了一种温度控制器电路,该系统采用模拟技术进行温度的采集与控制。主要由电源模块,温度采集模块,继电器模块组成。 现代社会科学技术的发展可以说是突飞猛进,很多传统的东西都被成本更低、功能更多、使用更方便的电子产品所替代,本课程设计是一个以温度传感器采用LM35的环境温度简易测控系统,用于替代传统的低精度、不易读数的温度计。但系统预留了足够的扩展空间,并提供了简单的扩展方式供参考,实际使用中可根据需要改成多路转换,既可以增加湿度等测控对象,也能减少外界因素对系统的干扰。 首先温度传感器把温度信号转换为电流信号,通过放大器变成电压信号,然后送入两个反向输入的运算放大器组成的比较器电路,让电位器来改变温度范围的取值,最后信号送入比较器电路,通过比较来判断控制电路是否需要工作。此方案是采用传统的模拟控制方法,选用模拟电路,用电位器设定给定值,反馈的温度值与给定的温度值比较后,决定是否加热。 关键词:温度传感器比较器继电器

温度控制系统毕业设计

摘要 在日常生活及工农业生产中,对温度的检测及控制时常显得极其重要。因此,对数字显示温度计的设计有着实际意义和广泛的应用。本文介绍一种利用单片机实现对温度只能控制及显示方案。本毕业设计主要研究的是对高精度的数字温度计的设计,继而实现对对象的测温。测温系数主要包括供电电源,数字温度传感器的数据采集电路,LED显示电路,蜂鸣报警电路,继电器控制,按键电路,单片机主板电路。高精度数字温度计的测温过程,由数字温度传感器采集所测对象的温度,并将温度传输到单片机,最终由液晶显示器显示温度值。该数字温度计测温范围在-55℃~+125℃,精度误差在±0.5℃以内,然后通过LED数码管直接显示出温度值。数字温度计完全可代替传统的水银温度计,可以在家庭以及工业中都可以应用,实用价值很高。 关键词:单片机:ds18b20:LED显示:数字温度. Abstract In our daily life and industrial and agricultural production, the detection and control of the temperature, the digital thermometer has practical significance and a wide range of applications .This article describes a programmer which use a microcontroller to achieve and display the right temperature by intelligent control .This programmer mainly consists by temperature control sensors, MCU, LED display modules circuit. The main aim of this thesis is to design high-precision digital thermometer and then realize the object temperature measurement. Temperature measurement system includes power supply, data acquisition circuit, buzzer alarm circuit, keypad circuit, board with a microcontroller circuit is the key to the whole system. The temperature process of high-precision digital thermometer, from collecting the temperature of the object by the digital temperature sensor and the temperature transmit ted to the microcontroller, and ultimately display temperature by the LED. The digital thermometer requires the high degree is positive 125and the low degree is negative 55, the error is less than 0.5, LED can read the number. This digital thermometer could

基于单片机的温控系统设计

本科学年论文(设计) 蔬菜大棚温控系统设计 系别信管系专业电子信息工 程 届别2012级班级12级电子信息工程 学生姓名唐姣学号2012550525 指导教师刘超群职称副教授 二O一五年六月

摘要 温度控制是蔬菜大棚最重要的一个管理因素,温度过高或过低,都会影响蔬菜的生长。主要介绍一种基于ST89C52单片机的温室蔬菜大棚温度控制系统,系统利用DS18B20温度传感器实现对温室大棚温度的测量,通过按键设置需要报警的上下限值。实验证明,该系统具有性价比高,使用寿命长等优点,具有一定实用价值。 【关键词】温度控制;继电器;温度检测

Abstract Temperature control is the most important vegetable greenhouse management factor, the temperature is too high or too low, will affect the growth of vegetables. Mainly introduces a control system based on the temperature in of the vegetable greenhouses in SCM st89c52, system using DS18B20 temperature sensor to realize the greenhouse temperature measurement, through the key set to alarm limit value. Experiments prove that the system has the advantages of high performance ratio, long service life, etc., and has some practical value. [Keywords]Temperature control; Relay; Temperature detection

《基于单片机的温度控制系统的设计》

序号(学号):040930727 长春大学光华学院 毕业设计(论文) 姓名魏明岩 系别 专业 班级0409307 指导教师马春龙 年月日

目录 摘要 (1) 第一章前言 (3) 1.1课题背景和意义 (3) 1.2温度控制系统的使用 (3) 1.3毕业设计任务 (4) 第二章系统方案 (5) 2.1水温控制系统设计任务和要求 (5) 2.2水温控制系统部分 (5) 2.3控制方式 (7) 第三章系统硬件设计 (8) 3.1总体设计框图及说明 (8) 3.2外部电路设计 (8) 3.3单片机系统电路设计 (9) 第四章系统软件设计和调试 (13) 4.1 程序框架结构 (13) 4.2程序流程图及部分程序 (13) 4.3 系统安装调试和测试 (17) 第五章结论 (18) 致谢 (19) 参考文献 (20) 附件1(程序代码) (20) 附件2(电路原理图) (27)

基于单片机的水温控制系统 【摘要】温度是工业控制对象主要被控参数之一,在温度控制中,由于受到温度被控对象特性(如惯性大、滞后大、非线性等)的影响,使得控制性能难以提高,有些工艺过程其温度控制的好坏直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。为了实现高精度的水温测量和控制,本文介绍了一种以Atmel公司的低功耗高性能CMOS单片机为核心,以PID算法控制以及PID参数整定相结合的控制方法来实现的水温控制系统,其硬件电路还包括温度采集、温度控制、温度显示、键盘输入以及RS232接口等电路。该系统可实现对温度的测量,并能根据设定值对温度进行调节,实现控温的目的。 【关键词】单片机AT89C51;温度控制;温度传感器PT1000;PID 调节算法 The summary: Temperature is the main control of industrial control of parameters,In temperature control, due to temperature controlled object properties (such as inertia big, big, lagging effect of nonlinear, etc.), to improve performance, some process temperature control of its direct impact on the quality of the product, and designed a kind of ideal temperature control system is a very valuable.In order to realize high precision temperature measurement and control, this paper introduces a meter taking Atmel company low-power high-performance CMOS chip as the core, and the PID control algorithm with PID parameters combination of control method to realize the temperature control system, the hardware circuit including temperature, temperature

(完整word版)基于51单片机的温度控制系统设计

基于51单片机的水温自动控制系统 0 引言 在现代的各种工业生产中 ,很多地方都需要用到温度控制系统。而智能化的控制系统成为一种发展的趋势。本文所阐述的就是一种基于89C51单片机的温度控制系统。本温控系统可应用于温度范围30℃到96℃。 1 设计任务、要求和技术指标 1.1任务 设计并制作一水温自动控制系统,可以在一定范围(30℃到96℃)内自动调节温度,使水温保持在一定的范围(30℃到96℃)内。 1.2要求 (1)利用模拟温度传感器检测温度,要求检测电路尽可能简单。 (2)当液位低于某一值时,停止加热。 (3)用AD转换器把采集到的模拟温度值送入单片机。 (4)无竞争-冒险,无抖动。 1.3技术指标 (1)温度显示误差不超过1℃。 (2)温度显示范围为0℃—99℃。 (3)程序部分用PID算法实现温度自动控制。 (4)检测信号为电压信号。 2 方案分析与论证 2.1主控系统分析与论证 根据设计要求和所学的专业知识,采用AT89C51为本系统的核心控制器件。AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器。其引脚图如图1所示。 2.2显示系统分析与论证 显示模块主要用于显示时间,由于显示范围为0~99℃,因此可采用两个共阴的数码管作为显示元件。在显示驱动电路中拟订了两种设计方案: 方案一:采用静态显示的方案 采用三片移位寄存器74LS164作为显示电路,其优点在于占用主控系统的I/O口少,编程简单且静态显示的内容无闪烁,但电路消耗的电流较大。 方案二:采用动态显示的方案 由单片机的I/O口直接带数码管实现动态显示,占用资源少,动态控制节省了驱动芯片的成本,节省了电 ,但编程比较复杂,亮度不如静态的好。 由于对电路的功耗要求不大,因此就在尽量节省I/O口线的前提下选用方案一的静态显示。

模电课设—温度控制系统设计

目录 1.原理电路的设计 (11) 1.1总体方案设计 (11) 1.1.1简单原理叙述 (11) 1.1.2设计方案选择 (11) 1.2单元电路的设计 (33) 1.2.1温度信号的采集与转化单元——温度传感器 (33) 1.2.2电压信号的处理单元——运算放大器 (44) 1.2.3电压表征温度单元 (55) 1.2.4电压控制单元——迟滞比较器 (66) 1.2.5驱动单元——继电器 (88) 1.2.6 制冷部分——Tec半导体制冷片 (99) 1.3完整电路图 (1010) 2.仿真结果分析 (1111) 3 实物展示 (1313) 3.1 实物焊接效果图 (1313) 3.2 实物性能测试数据 (1414) 3.2.1制冷测试 (1414) 3.2.2制热测试 (1818) 3.3.3性能测试数据分析 (2020) 4总结、收获与体会 (2121) 附录一元件清单 (2222) 附录二参考文献. (2323)

摘要 本课程设计以温度传感器LM35、运算放大器UA741、NE5532P及电压比较器LM339 N为电路系统的主要组成元件,扩展适当的接口电路,制作一个温度控制系统,通过室温的变化和改变设定的温度,来改变电压传感器上两个输入端电压的大小,通过三极管开关电路控制继电器的通断,来控制Tec制冷片的工作。这样循环往复执行这样一个周期性的动作,从而把温度控制在一定范围内。学会查询文献资料,撰写论文的方法,并提交课程设计报告和实验成品。 关键词:温度;测量;控制。

Abstract This course is designed to a temperature sensor LM35, an operational amplifier UA741,NE5532P and a voltage comparator LM339N circuit system of the main components. Extending the appropriate interface circuit, make a temperature control system. By changing the temperature changes and set the temperature to change the size of the two input ends of the voltage on the voltage sensor, an audion tube switch circuit to control the on-off relay to control Tec cooling piece work. This cycle of performing such a periodic motion, thus controlling the temperature in a certain range. Learn to query the literature, writing papers, and submitted to the curriculum design report and experimental products. Key words: temperature ; measure ;control

基于51单片机的温度控制系统的设计

基于单片机的温度控制系统设计 1.设计要求 要求设计一个温度测量系统,在超过限制值的时候能进行声光报警。具体设计要求如下: ①数码管或液晶显示屏显示室内当前的温度; ②在不超过最高温度的情况下,能够通过按键设置想要的温度并显示;设有四个按键,分别是设置键、加1键、减1键和启动/复位键; ③DS18B20温度采集; ④超过设置值的±5℃时发出超限报警,采用声光报警,上限报警用红灯指示,下限报警用黄灯指示,正常用绿灯指示。 2.方案论证 根据设计要求,本次设计是基于单片机的课程设计,由于实现功能比较简单,我们学习中接触到的51系列单片机完全可以实现上述功能,因此可以选用AT89C51单片机。温度采集直接可以用设计要求中所要求的DS18B20。报警和指示模块中,可以选用3种不同颜色的LED灯作为指示灯,报警鸣笛采用蜂鸣器。显示模块有两种方案可供选择。 方案一:使用LED数码管显示采集温度和设定温度; 方案二:使用LCD液晶显示屏来显示采集温度和设定温度。 LED数码管结构简单,使用方便,但在使用时,若用动态显示则需要不断更改位选和段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态显示则又需要更多硬件支持。LCD显示屏可识别性较好,背光亮度可调,而且比LED 数码管显示更多字符,但是编程要求比LED数码管要高。综合考虑之后,我选用了LCD显示屏作为温度显示器件,由于显示字符多,在进行上下限警戒值设定时同样可以采集并显示当前温度,可以直观的看到实际温度与警戒温度的对比。LCD 显示模块可以选用RT1602C。

3.硬件设计 根据设计要求,硬件系统主要包含6个部分,即单片机时钟电路、复位电路、键盘接口模块、温度采集模块、LCD 显示模块、报警与指示模块。其相互联系如下图1所示: 图1 硬件电路设计框图 单片机时钟电路 形成单片机时钟信号的方式有内部时钟方式和外部时钟方式。本次设计采用内部时钟方式,如图2所示。 单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为此放大器的输入端和输出端,其频率范围为~12MHz ,经由片外晶体振荡器或陶瓷振荡器与两个匹配电容一 起形成了一个自激振荡电路,为单片机提供时钟源。 复位电路 复位是单片机的初始化操作,其作用是使CPU 和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作,以防止电源系统不稳定造成CPU 工作不正常。在系统中,有时会出现工作不正常的情况,为了从异常状态中恢复,同时也为了系统调试方便,需要设计一个复位电路。 单片机的复位电路有上电复位和按键复位两种形式,因为本次设计要求需要有启动/复位键,因此本次设计采用按键复位,如图3。复位电路主要完成系统 图2 单片机内部时钟方式电路 图3 单片机按键复位电路

基于单片机的温度控制器附程序代码

生产实习报告书 报告名称基于单片机的温度控制系统设计姓名 学号0138、0140、0141 院、系、部计算机与通信工程学院 专业信息工程10-01 指导教师 2013年 9 月 1日

目录 1.引言.................................. 错误!未定义书签。 2.设计要求.............................. 错误!未定义书签。 3.设计思路.............................. 错误!未定义书签。 4.方案论证.............................. 错误!未定义书签。方案一................................................. 错误!未定义书签。方案二................................................. 错误!未定义书签。 5.工作原理.............................. 错误!未定义书签。 6.硬件设计.............................. 错误!未定义书签。单片机模块............................................. 错误!未定义书签。 数字温度传感器模块 .................................... 错误!未定义书签。 DS18B20性能......................................... 错误!未定义书签。 DS18B20外形及引脚说明............................... 错误!未定义书签。 DS18B20接线原理图................................... 错误!未定义书签。按键模块............................................... 错误!未定义书签。声光报警模块........................................... 错误!未定义书签。数码管显示模块......................................... 错误!未定义书签。 7.程序设计.............................. 错误!未定义书签。主程序模块............................................. 错误!未定义书签。 读温度值模块.......................................... 错误!未定义书签。 读温度值模块流程图: ................................. 错误!未定义书签。

相关文档
相关文档 最新文档