MCS-51单片机温度控制系统的设计
一、项目介绍
注塑机是一种常用的制造设备,用于生产塑料制品。在注塑机的工作过程中,溶胶必须达到一定的温度才能被注入模具中进行成型。因此,在注塑机的生产过程中,温度控制是非常重要的一环。
本项目基于MCS-51单片机设计了一款温度控制系统,主控芯片采用STC89C52,温度传感器采用铂电阻。该系统主要应用于注塑机的溶胶射嘴头上进行加热控制,利用继电器控制加热器实现温度加热,控制系统检测温度是否到达设定阀值来控制继电器。
本项目的设计思路是,利用铂电阻温度传感器对溶胶进行实时温度监测,并将监测到的温度值通过LCD显示屏实时显示。控制器采用PID算法对溶胶温度进行精准控制,当温度低于设定阀值时,控制器将通过继电器控制加热器进行加热操作,直到温度达到设定阀值后停止加热操作。
通过本项目的应用,可以实现对注塑机的溶胶温度进行精准控制,从而提高注塑机的生产效率和产品质量。同时,该系统控制方式简单,易于操作和维护,具有较高的实用性和可靠性。
二、技术说明和功能描述
【1】STC89C52单片机作为主控芯片,具有高性能和丰富的外设接口。
【2】铂电阻温度传感器用于测量溶胶射嘴头的温度,并将数据传输给单片机。
【3】继电器用于控制加热器的通断,实现温度加热。
【4】温度控制系统可以根据设定的温度阈值来判断是否需要进行加热,从而控制继电器的状态。
【5】系统可以通过LCD显示屏显示当前温度和设定的目标温度。
【6】当温度超过或低于设定的阈值时,系统可以触发报警装置进行警示。
三、系统设计思路
3.1 硬件选型说明
【1】主控芯片:STC89C52单片机
- STC89C52是一款具有高性能和丰富外设接口的经典51系列单片机,适合中小型嵌入式系统应用。
- 它具有8位CPU、8KB的内部FLASH存储器、256字节的RAM、3个定时器/计数器、串行通信接口等功能。
- 这款单片机运算速度快,响应迅速,可满足本项目对性能和实时性的要求。
【2】温度传感器:铂电阻温度传感器
- 铂电阻温度传感器是一种常见的温度传感器,具有稳定性好、精度高的特点。
- 它的工作原理是通过测量电阻值的变化来确定温度变化,传感器的电阻值与温度呈线性关系。
- 在本项目中,铂电阻温度传感器被用于测量溶胶射嘴头的温度,提供实时的温度数据给单片机进行控制。
【3】继电器:用于控制加热器
- 继电器是一种电子开关设备,能够在小电流的控制信号下控制大电流的通断。
- 在本项目中,继电器被用来控制加热器的通断状态,根据温度控制的需要进行加热或停止加热操作。
【4】LCD显示屏:用于显示温度和设定值
- LCD显示屏是一种常见的数字显示装置,具有低功耗、可视角度广、反应快速等特点。
- 在本项目中,LCD显示屏用于显示当前实际温度和设定的目标温度阈值,方便操作员进行观察和设置。
【5】按钮开关:用于设定目标温度阈值
- 按钮开关是一种常用的输入设备,用于实现用户与系统的交互。
- 在本项目中,按钮开关用于更新设定的目标温度阈值,供操作员根据需要进行调整。
【6】报警装置:用于温度异常警示
- 报警装置能够发出声音或光信号,用于警示操作员温度超过或低于设定的阈值。
- 在本项目中,报警装置用于提醒操作员注意温度异常,保证工作安全和质量。
3.2 设计思路
【1】硬件连接:将铂电阻温度传感器连接到单片机的模拟输入端口,将LCD显示屏连接到单片机的数据口,将继电器接在单片机的输出端口,通过继电器控制加热器的电源。
【2】温度采集:通过铂电阻温度传感器实时采集溶胶的温度信号,将信号转换为数字信号,通过单片机的模拟输入端口输入到单片机中。
【3】温度控制:使用PID算法对溶胶的温度进行精准控制。PID算法是一种经典的控制算法,通过对比实际温度和设定温度的差异,计算出控制器输出控制信号的大小来控制继电器的开关状态,从而实现对加热器的控制。
【4】温度显示:将温度值通过LCD显示屏实时显示,方便操作人员监测温度变化。
【5】控制器编程:使用C语言编写单片机的控制程序,实现温度采集、PID算法控制、温度显示等功能。
本项目的设计思路是基于MCS-51单片机和PID算法实现温度控制系统,通过铂电阻温度传感器实时采集温度信号,通过PID算法实现温度控制,通过LCD显示屏实现温度显示,最终通过继电器控制加热器实现温度加热控制。
四、代码实现
4.1 温度控制系统实现(PID算法)
使用STC89C52单片机、铂电阻温度传感器、PCF8591模数转换器和PID算法实现温度控制并控制继电器:
#include <reg52.h>#define RELAY_PIN P1 // 继电器控制引脚// 温度传感器连接引脚
sbit TEMP_SENSOR_PIN = P2^0;// PCF8591模数转换器连接引脚
sbit PCF_SDA = P2^1; // I2C数据线
sbit PCF_SCL = P2^2; // I2C时钟线
sbit PCF_EOC = P2^3; // 转换结束标志// PID参数
float kp = 1.0; // 比例系数
float ki = 0.5; // 积分系数
float kd = 0.2; // 微分系数// 温度目标值
float targetTemp = 100.0;// PID控制误差相关变量
float error = 0.0;
float prevError = 0.0;
float integral = 0.0;
float derivative = 0.0;// PID控制输出
float output = 0.0;// 设置PWM占空比函数
void setPwmDutyCycle(unsigned char dutyCycle) {TH0 = 256 - dutyCycle; // 设置高位TL0 = 256 - dutyCycle; // 设置低位
}// 定时器0初始化函数
void timer0Init() {TMOD = 0x01; // 定时器0工作在模式1(16位定时器)TH0 = 0; // 最初赋初值TL0 = 0;TR0 = 1; // 定时器0开始计时
}// I2C总线开始信号函数
void i2cStart() {PCF_SDA = 1;PCF_SCL = 1;PCF_SDA = 0;PCF_SCL = 0;
}// I2C总线停止信号函数
void i2cStop() {PCF_SDA = 0;PCF_SCL = 1;PCF_SDA = 1;
}// I2C写数据函数
void i2cWriteByte(unsigned char dat) {unsigned char i;for (i = 0; i < 8; i++) {PCF_SDA = (dat & 0x80) ? 1 : 0;PCF_SCL = 1;PCF_SCL = 0;dat <<= 1;}PCF_SCL = 1;PCF_SCL = 0;PCF_SDA = 1;
}// 从PCF8591读取温度值
unsigned char readTemperatureValue() {unsigned char tempValue;i2cStart();i2cWriteByte(0x90); // PCF8591地址 + 写操作i2cWriteByte(0x00); // 设置输入通道为0i2cStart();i2cWriteByte(0x91); // PCF8591地址 + 读操作tempValue = P0; // 读取温度值i2cStop();return tempValue;
}// PID控制函数
void performPIDControl() {error = targetTemp - readTemperatureValue(); // 计算误差integral += error; // 积分项derivative = error - prevError; // 微分项output = kp * error + ki * integral + kd * derivative; // PID输出if (output < 0) {output = 0;} else if (output > 255) {output = 255;}setPwmDutyCycle((unsigned char)output); // 设置PWM占空比prevError = error; // 更新上一次误差
}void main() {timer0Init(); // 初始化定时器0setPwmDutyCycle(0); // 初始化PWM占空比为0while (1) {performPIDControl(); // 进行PID控制if (readTemperatureValue() >= targetTemp) {RELAY_PIN = 0; // 继电器断开,停止加热} else {RELAY_PIN = 1; // 继电器闭合,进行加热}}
}
以上代码是温度控制系统实现代码,使用PID算法根据目标温度和当前温度进行控制,并通过继电器控制加热器的通断。需要通过I2C总线与PCF8591模数转换器进行通信,读取铂电阻温度传感器的数据。
4.2 LCD1602显示屏
下面是使用STC89C52单片机和LCD1602液晶显示屏实现数字显示并封装为函数调用的代码:
#include <reg52.h>#define LCD_RS P2_0 // 液晶RS引脚
#define LCD_RW P2_1 // 液晶RW引脚
#define LCD_EN P2_2 // 液晶EN引脚
#define LCD_DATA P0 // 液晶数据总线// 延时函数
void delay(unsigned int t) {unsigned int i, j;for (i = 0; i < t; i++) {for (j = 0; j < 110; j++);}
}// 液晶写命令函数
void lcdWriteCmd(unsigned char cmd) {LCD_RS = 0; // 设置为写命令模式LCD_RW = 0; // 设置为写入模式LCD_DATA = cmd; // 写入命令LCD_EN = 1; // 使能delay(1); // 延时LCD_EN = 0; // 禁止delay(1); // 延时
}// 液晶写数据函数
void lcdWriteData(unsigned char dat) {LCD_RS = 1; // 设置为写数据模式LCD_RW = 0; // 设置为写入模式LCD_DATA = dat; // 写入数据LCD_EN = 1; // 使能delay(1); // 延时LCD_EN = 0; // 禁止delay(1); // 延时
}// 液晶初始化函数
void lcdInit() {lcdWriteCmd(0x38); // 设置16x2显示,5x7点阵,8位数据接口lcdWriteCmd(0x0C); // 显示开,光标关闭lcdWriteCmd(0x06); // 光标右移lcdWriteCmd(0x01); // 清屏
}// 在液晶上显示数字函数
void lcdDisplayNumber(unsigned int num) {unsigned char i;unsigned char buffer[5]; // 缓冲区,最大支持5位数if (num == 0) {lcdWriteData('0'); // 数字0特殊处理return;}for (i = 0; i < 5; i++) {buffer[i] = num % 10; // 从低位到高位依次取余数num /= 10;}for (i = 5; i > 0; i--) {if (buffer[i - 1] != 0 || i == 1) { // 从高位开始显示直到遇到非零数字或者个位数lcdWriteData(buffer[i - 1] + '0'); // 显示数字}}
}void main() {lcdInit(); // 初始化液晶while (1) {unsigned int num = 12345; // 要显示的数字lcdWriteCmd(0x80); // 设置光标位置为第一行第一个字符lcdDisplayNumber(num); // 显示数字while (1); // 循环显示}
}
以上代码是LCD数字显示程序,使用LCD1602液晶显示屏和STC89C52单片机,通过封装函数调用来实现数字在液晶屏上的显示。需要进行液晶的初始化操作,使用lcdDisplayNumber
函数将要显示的数字传入。在main
函数中给出了一个例子,以连续循环显示数字12345为示例。
相关文章:

MCS-51单片机温度控制系统的设计
一、项目介绍 注塑机是一种常用的制造设备,用于生产塑料制品。在注塑机的工作过程中,溶胶必须达到一定的温度才能被注入模具中进行成型。因此,在注塑机的生产过程中,温度控制是非常重要的一环。 本项目基于MCS-51单片机设计了一…...

Xcode,swift:Error Domain=kCLErrorDomain Code=1 (null)问题解决
问题描述: iOS开发时,当使用用户的位置权限时,获取用户经纬度报错:Error DomainkCLErrorDomain Code1 "(null)",错误域kCLError域代码1“(null)” 解决方法: 打开模拟机的设置-通用-语言与地区 将地区设置为中国(如果你的开发位置在中国的话) 点击左上方Features,选择…...

0013Java程序设计-springboot教材图文内容审核系统
摘 要目 录第1章 绪论1.1 研究背景与意义1.2 研究内容1.3 论文组成结构 系统实现用户登录模块的实现后台管理系统登录模块的实现投稿信息的实现 开发环境 摘 要 《教材图文内容审核系统》课程案例库研究系统系统主要功能模块包括投稿信息、打卡记录、新闻资讯等,采…...

Unable to remove Temporary User Data
错误截图 原因 项目的临时数据目录是存在了未授权的盘符,当删除它的时候,遇到了权限问题,没有权限没法删除。 解决方法 增加字段:userDataDir 解决...

Rocky(Centos)安装中文字体(防止中文乱码)
1、查看字体列表 运行下列命令 fc-list 若出现,下面截图,则需要安装字体管理软件 安装字体库,运行: yum -y install fontconfig 当看到下图的提示信息时说明已安装成功: 二、添加中文字体 1)window…...

O2OA(翱途)开发平台 V8.1正式发布
尊敬的O2OA(翱途)平台合作伙伴、用户以及亲爱的开发小伙伴们,平台 V8.1版本已正式发布。正值8月的最后一周,我们以更安全、更高效、更好用的崭新面貌迎接9月的到来。 O2OA开发平台v8.1版本更注重于对系统级别的安全防护。其中重大的更新,是对…...

差异化竞争阵地的所在【周技术进阶】-从BS 项目C#最基础截取字符串方法开始
效果 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleAppNumberOneHelloWorld {class Program{static void Main(string[] args){Console.WriteLine("hello world…...

docker安装在linux下的docker安装操作步骤完整版
参考文档:http://wed.xjx100.cn/news/151901.html?actiononClick 第一步,卸载历史版本。这一步是可选的,如果之前安装过旧版本的Docker,可以使用如下命令进行卸载: yum remove docker \docker-client \docker-client…...

elasticsearch的搜索补全提示
当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项 拼音分词器 下载 要实现根据字母做补全,就必须对文档按照拼音分词,GitHub上有拼音分词插件 GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin…...

AJAX学习笔记7 AJAX实现省市联动
需求:网页上选择对应省份之后,动态的关联出该省份对应的市.选择对应的市之后,动态的关联出该市对应的区 关于省市区全国三级Mysql数据:全国省市区三级地区MySQL数据_biubiubiu0706的博客-CSDN博客 页面加载完毕显示所有省份 <!DOCTYPE html> <html lang&…...

国商佳美合作火山引擎数智平台 助推深圳餐博会及美博会数字化升级
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,深圳市国商佳美展览有限公司(以下简称“深圳国商佳美”)与火山引擎数智平台VeDI达成合作,双方将聚焦于2023年11…...

数据结构与算法学习(day4)——解决实际问题
前言 在本章的学习此前,需要复习前三章的内容,每个算法都动手敲一遍解题。宁愿学慢一点,也要对每个算法掌握基本的理解! 前面我们学习了简化版桶排序、冒泡排序和快速排序三种算法,今天我们来实践一下前面的三种算法。…...

PG库列类型转换
首先自定义两个函数,其中try_cast_numeric函数是将字符类型转成数字类型,try_cast_timestamp函数是将字符类型转成时间戳类型。 create or replace function try_cast_numeric(p_in text, p_default numeric default null)returns numeric as $$ beginb…...

vue3中的reactive赋值问题
问题 当通过方法对reactive变量修改的时候,发现页面上的值没有及时更新? 解决方法 具体原因: 上面这样赋值检测不到,因为响应式的是它的属性,而不是它自身. 方法1: 单个赋值 如下: let obj reactive({name: zha…...

thinkphp 操作远程oracle遇到的相关坑
坑一:没有内置oracle 解决方法: 1,下载think-oracle 扩展,资源很多,百度即可下载,分别放置于db下的connector 和 builder 文件夹下 2,安装oracle本地客户端,一搜一大把,核…...

流媒体之推流和拉流
推流:将直播内容推送至服务器的过程 拉流:为服务器已有直播内容,用指定地址进行拉取的过程 什么是推流? 推流,指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”…...

浏览器中怎样查看前后端传值
路径:F12–>Network -->Fetch/XHR,选择一个接口地址。 在payload里面是前端发送给后端的参数。也即客户端发送给服务端的请求数据,即接口地址入参。 Preview和Response里都是后端返回给前端的。Preview是格式化过的,比较容易看。Resp…...

计算机竞赛 基于深度学习的人脸表情识别
文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…...

虹科分享 | MKA:基于先进车载网络安全解决方案的密钥协议
MKA作为MACsec的密钥协议,具有安全、高效、针对性强的特点,为您的汽车ECU通讯创建了一个安全的通信平台,可以助力您的各种汽车创新项目! 虹科方案 | 什么是基于MACsec的汽车MKA 一、MACsec在汽车行业的应用 在以往的文章中&#…...

jmeter 常数吞吐量定时器
模拟固定吞吐量的定时器。它可以控制测试计划中各个请求之间的时间间隔,以达到预期的吞吐量。 参数包括: Target Throughput:目标吞吐量(每分钟请求数)Calculate Throughput based on:吞吐量计算基准&…...

【大数据Hive】hive 加载数据常用方案使用详解
目录 一、前言 二、load 命令使用 2.1 load 概述 2.1.1 load 语法规则 2.1.2 load语法规则重要参数说明 2.2 load 数据加载操作演示 2.2.1 前置准备 2.2.2 加载本地数据 2.2.3 HDFS加载数据 2.2.4 从HDFS加载数据到分区表中并指定分区 2.3 hive3.0 load 命令新特性 …...

计及电池储能寿命损耗的微电网经济调度(matlab代码)
目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型,以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数,创新考虑储能寿命损耗约束、放电深度约束和储能循环次…...

DP读书:鲲鹏处理器 架构与编程(十四)ACPI与软件架构具体调优
一分钟速通ACPI和鲲鹏软件移植 操作系统内核鲲鹏软件移植鲲鹏软件移植流程 编译工具选择编译参数移植案例源码修改案例鲲鹏分析扫描工具 Dependency Advisor鲲鹏代码迁移工具 Porting Advisor 鲲鹏软件性能调优鲲鹏软件性能调优流程CPU与内存子系统性能调优网络子系统性能调优磁…...

4.正则提取html中的img标签的src内容
我们以百度贴吧的1吧举例 目录 1 把网页搞下来 2 收集url 3 处理url 4 空的src 5 容错 6 不使用数字作为文件名 7 并不是所有的图片都用img标签表示 8 img标签中src请求下来不一定正确 9 分页 1 把网页搞下来 搞下来之后,双击打开是这样的 2 收…...

安装对应版本pytorch和torchvision
遇见报错: ERROR: Could not find a version that satisfies the requirement torch (from versions: none) ERROR: No matching distribution found for torch 解决方法: 1、网站找到对应torch和torchvision版本,cp对应python版本ÿ…...

酷克数据与华为合作更进一步 携手推出云数仓联合解决方案
在一起,共迎新机遇!8月25-26日,2023华为数据存储用户精英论坛在西宁召开。酷克数据作为国内云原生数据仓库的代表企业,也是华为重要的生态合作伙伴,受邀参与本次论坛,并展示了云数仓领域最新前沿技术以及联…...

若依 MyBatis改为MyBatis-Plus
主要内容:升级成mybatis-plus,代码生成也是mybatis-plus版本 跟着我一步一步来,就可完成升级! 检查:启动程序,先保证若依能启动 第一步:添加依赖 这里需要在两个地方添加,一个是最…...

docker-ubuntu
docker ps docker images 拉取ubuntu镜像 docker pull ubuntu 启动 docker start podid docker run -itd -e TZAsia/Shanghai --name ubuntu-test -v /share:/shared -d ubuntu:latest 进入bash界面 docker exec -it podid /bin/bash 安装sudo apt-get install sudo …...

Mock 基本使用
mock解决的问题 开发时,后端还没完成数据输出,前端只好写静态模拟数据。数据太长了,将数据写在js文件里,完成后挨个改url。某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼。想要尽可能还原真实的数据,…...

MySql学习笔记08——事务介绍
事务 基本概念 事务是一个完整的业务逻辑,是一个最小的工作单元,不可再分。 一个完整的业务逻辑包括一系列的操作,这些操作是整个业务逻辑中的最小单元,这些操作要么同时成功,要么同时失败。 由于只有DML语句中才会…...