基于AT89C51的冰柜温度控制系统的串联型PID算法程序

时间: 2023-08-24 14:07:28 浏览: 46
下面是基于AT89C51的冰柜温度控制系统串联型PID算法程序的示例代码: ``` #include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit EN=P3^2; //制冷机开关控制引脚 sbit K1=P3^0; //温度调节按键 sbit K2=P3^1; //温度调节按键 uint target_temp = 20; //目标温度 uint current_temp = 0; //当前温度 uint Kp = 10; //比例系数 uint Ki = 2; //积分系数 uint Kd = 0; //微分系数 uint last_error = 0; //上一次误差 uint integral = 0; //积分值 void InitTimer0(); //定时器0初始化 void InitADC(); //ADC初始化 void DisplayTemp(); //温度显示函数 void main() { InitTimer0(); //初始化定时器0 InitADC(); //初始化ADC while(1) { if(K1 == 0) //调节目标温度 { target_temp++; if(target_temp > 30) target_temp = 30; while(!K1); } if(K2 == 0) { target_temp--; if(target_temp < 0) target_temp = 0; while(!K2); } current_temp = ADC; //读取当前温度 uint error = target_temp - current_temp; //计算误差 integral += error; //积分 uint derivative = error - last_error; //微分 last_error = error; uint output = Kp * error + Ki * integral + Kd * derivative; //PID计算 if(output > 100) output = 100; //限制输出在0~100之间 if(output < 0) output = 0; if(current_temp < target_temp) //制冷机开关控制 EN = 1; else EN = 0; if(output > current_temp) //制冷机PWM控制 EN = 1; else EN = 0; DisplayTemp(); //温度显示 } } void InitTimer0() { TMOD |= 0x01; //定时器0工作在模式1 TH0 = 0xFC; //定时器0初值 TL0 = 0x67; ET0 = 1; //允许定时器0中断 EA = 1; //开启总中断 TR0 = 1; //启动定时器0 } void InitADC() { ADC_CONTR = 0x80; //使能ADC ADC_CONTR |= 0x0F; //选择ADC0通道 ADC_RES = 0; //清零ADC结果寄存器 ADC_RESL = 0; } void DisplayTemp() { uchar tempstr[4]; tempstr[0] = current_temp / 100 + '0'; //百位数字 tempstr[1] = current_temp % 100 / 10 + '0'; //十位数字 tempstr[2] = current_temp % 10 + '0'; //个位数字 tempstr[3] = '\0'; //字符串结束符 //在LCD上显示温度 } void Timer0_ISR() interrupt 1 //定时器0中断服务程序 { TH0 = 0xFC; //重新赋初值 TL0 = 0x67; DisplayTemp(); //温度显示 } ``` 在这个程序中,串联型PID算法的实现主要在主函数中完成,具体包括目标温度的调节、当前温度的读取、误差计算、积分、微分、PID计算和制冷机的开关控制和PWM控制。此外,还需要使用定时器0和ADC来实现温度的周期性检测和读取,以及LCD显示温度值。

相关推荐

最新推荐

recommend-type

基于AT89C51单片机的十进制计算器系统设计

本设计是基于AT89C51 单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除4 位无符号数字的简单四则运算,并在LED 上相应的显示结果。硬件方面从功能考虑,首先选择内部存储资源丰富的...
recommend-type

基于AT89C51单片机的交通灯控制系统设计与仿真

AT89C51单片机的交通灯控制系统是由AT89C51单片机、键盘电路、LED倒计时、交通灯显示等模块组成。系统除基本交通灯功能外,还具有通行时间手动设置、可倒计时显示、急车强行通过、交通特殊情况处理等相关功能,实验...
recommend-type

基于AT89C51单片机的变频调速控制系统设计

本文中,设计变频调速控制系统时,控制芯片采用单片机AT89C51,采用SA8281作为正弦波发生器,用IR2110芯片来驱动,另外考虑到系统的稳定性,设计了系统的保护电路,这样整个系统有成本低廉,功能齐全的特点,并具有...
recommend-type

基于PID算法和89C52单片机的温度控制系统

单片机作为控制系统中必不可少的部分,在各个领域得到了广泛的应用,用单片机进行实时系统数据处理和控制,保证系统工作在最佳状态,提高系统的控制精度,有利于提高...本系统采用单片机编程实现PID算法进行温度控制。
recommend-type

基于AT89C51和DS18B20的最简温度测量系统

本文介绍一种新型的可编程温度传感器DS18B20,他能代替模拟温度传感器和信号处理...DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

机器学习怎么将excel转为csv文件

机器学习是一种利用计算机算法和统计数据的方法来训练计算机来进行自动学习的科学,无法直接将excel文件转为csv文件。但是可以使用Python编程语言来读取Excel文件内容并将其保存为CSV文件。您可以使用Pandas库来读取Excel文件,并使用to_csv()函数将其保存为CSV格式。以下是代码示例: ```python import pandas as pd # 读取 Excel 文件 excel_data = pd.read_excel('example.xlsx') # 将数据保存为 CSV 文件 excel_data.to_csv('example.csv', index=
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。