STC15实现温控闭环控制,数码管显示温度,按键调节温度,PID控制

您所在的位置:网站首页 数码管显示温度代码 STC15实现温控闭环控制,数码管显示温度,按键调节温度,PID控制

STC15实现温控闭环控制,数码管显示温度,按键调节温度,PID控制

2024-05-28 04:57| 来源: 网络整理| 查看: 265

STC15实现温控闭环控制,数码管显示温度,按键调节温度,PID控制

1.控温系统的PWM控制方案 ① 加热元件和驱动电路设计 ② 控温的工作原理及加热元件的数学模型,特别是模型参数的确定 ③ PCA、PWM波形产生方法 ⅰ) 寄存器配置及编程 ⅱ) 8位PWM与16位PWM产生方法 2.温度采样原理与实现方法 ① 温度传感器工作原理与输出关系 ② 放大电路设计 ③ A/D转换程序设计 3.温度控制闭环系统结构图与数学模型建立,以及与MCU的关系(参考下图设计出本系统结构)

① PID数字控制与编程方法 ② PID参数整定 4.温度设定与显示 ① LED数码管显示的电路设计及相关计算 ② 数码管控制方案与温度显示的编程方法 ③ 键盘设置的电路设计与编程方法

#include "STC15.H" #include "intrins.h" #define display P2 typedef unsigned char uchar; typedef unsigned int uint; sbit Led_CS1 = P0^0; //位定义 sbit Led_CS2 = P0^1; sbit Led_CS3 = P0^2; sbit Led_CS4 = P0^3; sbit Key_Tup = P0^4; sbit Key_Tdown = P0^5; sbit Key_Confirm = P0^6; //数码管数值码表 共阳极接法 uchar code TABLE[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90}; char SetT = 40; //设定温度初始化为 40 摄氏度 float RealT = 25; //实际温度初始化为 25 摄氏度 float Error = 0; //当前误差 float ErrorInt = 0; //累积误差 设定温度太大可能溢出 float Kp = 25,Ki = 0.5e-3; //PID参数 float u; //控制量 float pwmduty; //PWM波占空比 //uint ADCRESValue; //ADC10位采样值 调试实际温度数码管闪烁时用 void IO_Init(); //IO端口初始化 void AD_Init(); //AD模块初始化 void PWM_Init(); //PWM模块初始化 void SetTemperature(); //设定温度 void KeyScan(); //按键扫描 void SetTdisp(); //设定温度显示 void RealTdisp(); //实际温度显示 void getRealT(); //测温 void PIDControl(); //PID调节 void PWMOutput(); //PWM/DA输出 //void ADCRESshow(); //AD采样后,寄存器值显示 调试实际温度数码管闪烁时用 void delay1ms(); void delay5ms(); void main() { IO_Init(); //与数码管段选、片选以及按键有关的Io端口初始化 AD_Init(); //AD模块初始化 PWM_Init(); //PWM模块初始化 while(1) { SetTemperature(); //设定温度 getRealT(); //测温 PIDControl(); //PID调节 PWMOutput(); //PWM/DA输出 SetTdisp(); //设定温度显示 RealTdisp(); //实际温度显示 // ADCRESshow(); //AD采样后,寄存器值显示 调试实际温度数码管闪烁时用 } return; } void IO_Init() //与数码管段选、片选以及按键有关的Io端口初始化 { P0M1 = 0xF0; // P0.0~P0.3 初始化为输出;P0.4~P0.7初始化为输入 P0M0 = 0x0F; P2M1 = 0x00; // P2口初始化为输出 P2M0 = 0xFF; return; } void AD_Init() //AD模块初始化 { P1ASF = 0x01; //设定 P1.0 作为AD使用 ADC_CONTR = 0x60; //关闭ADC电源;90个时钟周期转换1次 //结束标志位、启动控制位清零;输入通道选择 P1.0 CLK_DIV &= 0xDF; //ADRJ:ADC转换结果存放位置调整 EA = 1; //CPU开放中断;禁止AD转换中断 EADC = 0; PADC = 1; //AD转换中断为最高优先级 return; } void PWM_Init() //PWM模块初始化 { P1M1 &= 0xFD; //P1.1设为输出 P1M0 |= 0x02; CMOD = 0x80; //空闲模式下计数器停止计数;时钟源输入选择 SYSCLK/12 //禁止计数器溢出中断 CCON = 0x00; //溢出标志位CF清零;运动控制位清零; //PCA模块0、1、2中断标志清零 CCAPM0 = 0x42; //PCA模块0工作于PWM模式;禁止CCF0中断 PCA_PWM0 = 0x00; //8位PWM功能;EPC0H = EPC0L = 0 P_SW1 &= 0xCF; //CCP切换为P1 CH = 0x00; //PCA装载值清零 CL = 0x00; CCAP0H = 0xFF; //捕获寄存器值,初始化占空比为 1/256 CCAP0L = 0xFF; CCON |= 0x40; //启动PWM输出 return; } void SetTemperature() //设定温度 { if( !(Key_Tup & Key_Tdown) ) //检测 升温/降温 按键是否按下 { //进入设定温度过程 uchar i,j; do { KeyScan(); //按键扫描 getRealT(); //测温 for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3