墙布多少钱一平方-重生香江卖产业炒股的小说

2023年9月28日发(作者:曹丕)
课程大作业设计报告
(2019-- 2020年度第2学期)
课程名称:控制装置与仪表B
题 目:车载冰箱温度控制系统设计与仿真
院 系:控制与计算机工程学院
班 级:自动化1704
学 号:12
学生姓名:郭云泉
指导教师:张文彪
设计周数:2周
成 绩:
日期:2020年5月19日
一、
设计要求
1. 根据以下控制装置的组成设计一个车载冰箱温度控制系统(半导体制热和制冷),
并说明变送器控制器和执行器的选型以及相应装置的特点,同时阐述整个系
、
统的控制流程。
图1 控制装置的组成
e
s
G(s)
s1
,控制系统的采2. 假设车载冰箱温度控制系统被控对象的传递函数为
样周期T为0.5s,基于Matlab软件编写控制算法,实现以上系统对阶跃式温度
设定的仿真,完成控制器的参数整定,并分析控制参数对系统性能的影响。
二、设计正文
1.车载冰箱温度控制系统硬件设计及控制流程描述
1.1 温度控制系统总体设计架构
整个温控系统由Arduino单片机、LCD显示电路、供用户设置预期温度的按键、电源、
驱动电路、温度变送装置、半导体制冷片、保温箱体、变压器组成。总体设计框架
如图2所示:
图2
各个部分的相应功能:
Arduino单片机:整个温控系统的控制器。
按键:调整预期温度。
LCD显示电路:显示预期温度和实时温度。
温度变送装置:检测箱体内的温度并转化为数字量送给单片机。
驱动电路:将单片机输出的不同占空比的数字PWM脉冲信号转化为模拟的电压,并进
行功率放大,驱动半导体制冷片输出不同的功率。
半导体制冷片:对箱体内进行制冷。
变压器:将汽车电瓶的12V电压转换为5V电压对温控系统供电,其中LCD显示电路、
按键电路、温度变送装置均由单片机供电。
电源:汽车电瓶
1.2 控制器的选择
此温控系统通过控制器输出不同占空比的PWM,并经驱动电路放大后来控制制冷
片功率,从而实现温度调节。因此,控制器需要有能输出不同占空比PWM的IO接口。
且此温控系统实现的功能比较简单,对控制器运算能力要求比较低,因此选用了
Ardiuno Uno单片机作为控制器。
Arduino UNO是基于ATmega328P的Arduino开发板。它有14个数字输入/输出引脚
(其中6个可用于PWM输出)、6个模拟输入引脚,一个16 MHz的晶体振荡器,一个USB
接口,一个DC接口,一个ICSP接口,一个复位按钮。它包含了微控制器所需的一切,
你只用简单地把它连接到计算机的USB接口,或者使用AC-DC适配器,再或者用电池,
就可以驱动它。实物图与技术参数如图3、图4所示:
图3
图4
各个引脚功能如下:
①Vin:电源输入引脚。当使用外部电源通过DC电源座供电时,这个引脚可以
输出电源电压。
②5V:5V电源引脚。使用USB供电时,直接输出USB提供的5V电压;使用外部电
源供电时,输出稳压后的5V电压。
③3V:33.3V 电源引脚。最大输出能力为50 mA。
④GND:接地引脚
⑤IOREF:I/O参考电压。其他设备可通过该引脚识别开发板I/O参考电压。
⑥Serial:0(RX)、1(TX),被用于接收和发送串口数据。这两个引脚通过连
接到ATmega16u2来与计算机进行串口通信。
⑦外部中断:2、3,可以输入外部中断信号。中断有四种触发模式:低电平触
发、电平改变触发、上升沿触发、下降沿触发。
⑧PWM输出:3、5、6、9、10、11,可用于输出8-bit PWM波。对应函数
analogWrite() 。
⑨SPI:10(SS)、11(MOSI)、12(MISO)、13(SCK),可用于SPI通信。可以
使用官方提供的SPI库操纵。
⑩L-LED:13。13号引脚连接了一个LED,当引脚输出高电平时打开LED,当引
脚输出低电平时关闭LED。
⑾TWI:A4(SDA)、A5(SCL)和TWI接口,可用于TWI通信,兼容I²C通信。可
以使用官方提供的Wire库操纵。
⑿AREF:模拟输入参考电压输入引脚。
⒀Reset:复位端口。接低电平会使Arduino复位,复位按键按下时,会使该端
口接到低电平,从而让Arduino复位。
1.3温度变送装置的选择
考虑到车载冰箱实际应用和控制器接口资源有限,温度变送装置应具有体积
小,测量精度高,占用接口资源少的特点,因此,采用DS18B20作为测量变送装置。
实物图和封装图如图5、图6所示:
图5 图6
相关技术特性如下:
①、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处
理器与DS18B20的双向通讯。
② 、测温范围 -55℃~+125℃,固有测温误差1℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,
实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
⑤ 、在使用中不需要任何外围元件
⑥、 测量结果以9~12位数字量方式串行传送
接线原理图如图7所示:
图7
1.4 半导体制冷片的选择
选取TEC1-12706型半导体制冷片。实物图如图8所示:
图8
相
关特性参数如下:
外部尺寸:40*40*3.75
mm
内部阻值:2.1~2.4Ω(环境温度23±1℃,1kHZ Ac测试)
最大温差:△Tmax(Qc=0) 67℃以上。
工作电流:Imax=4.3-4.6A(额定12V时)
额定电压:12V(Vmax:15V启动电流5.8A)
致冷功率:Qcmax 60-72W
工作环境:温度范围 -55℃~80℃(过高的环境温度降直接影响制冷效率)
1.5 驱动电路的设计
根据帕尔贴效应,半导体制冷片的吸热量的大小与电压值成正比,通过改变制冷片两端的
电压值便可以改变制冷片的功率。温控系统是通过输出不同占空比的PWM脉冲信号来改变制冷
片两端电压值,从而实现改变制冷片功率的目的。虽然选用的控制器具备输出 PWM 的功能,
但是仅靠 Arduino Uno 单片机的输出无法驱动制冷片工作,所以选用 AQMH2407ND 作为外
部驱动电路的驱动芯片,驱动制冷片工作。AQMH2407ND相关电气参数和接线原理图如图9、
图10所示:
图9
图10
1.6 变压器的选择
车载冰箱由汽车自带的12V电源供电,但单片机需要5V电源供电,且LCD显示电路、
按键电路、温度变送装置均由单片机供电。因此需要使用DC-DC转换器调节电源输出
的电压值,为单片机提供稳定的电能。选用LM2596电压转化模块,它是用LM2596芯
片配合外部电路组成的具有稳定降压功能的变换器。接线原理图如图11所示:
图11
1.7 LCD显示电路和按键的设计
1.7.1 LCD显示电路
温控系统需要显示预期温度和实时温度,选用LCD1602液晶显示器作为显示模
块。LCD1602能显示16列*2行字符,可以显示字母、数字、汉字、符号等。
LCD1602
采用标准的14脚(无背光)或16脚(带背光)接口,本系统采用14脚无背光即可,各引脚接口
说明见表1:
表1
由于此次选择的控制器Arduino Uno单片机的IO口有限,所以引入一种Inter-Integrated
Circuit总线结构,仅需要时钟信号SCL和数据信号SDA两条总线就能实现设备之间的通信。按照
图12接线原理图接线。
图12
1.7.2 按键模块
按键模块主要实现对预期温度的加减,因此需要一加一减两个独立按键。接线原理
图如图12所示:
图12
1.8 散热模块
半导体制冷是基于帕尔贴效应,热端的散热情况关系到冷端的制冷效率。为保
证冷端制冷效果,在热端需加装散热板和散热风扇。散热板可选择铜制或铝制金属
板。散热风扇选取任意由12V电源供电的即可。
1.9 系统控制流程
系统开始工作后通过按键输入预期的温度并在LCD1602上显示,DS18B20测量冰
箱内的温度,将温度信号转化为数字量返送给单片机并显示在LCD1602显示装置上。
单片机根据实时温度与预设温度的偏差,对TEC1-12706半导体制冷片输出功率进行
调整,直至冰箱内温度到达预设温度,控制过程结束。在调节过程中,测量变送器
测量的温度始终实时显示在显示器上。
1.10 关于控制系统存在的干扰及抗干扰措施
①.不同功能的模块均有接地,但由于各个模块接地点不同,可能产生共模干扰。只
需要将各个芯片的接地点接在一起进行共地处理即可。
②.由汽车电瓶驱动整个温度控制系统,电瓶可能由于老化造成输出电压减小,但通
过LM2596转换即可得到稳定的电源。
③.为避免冰箱内温度变化造成系统频繁启停,应在控制器中加入惰性区,当实时温
度与预设温度的偏差超过一定限度后再启动系统进行制冷。
2.车载冰箱温度控制系统软件仿真
PID算法的实现分析:此次仿真采用理想的位置型算式,控制器输出规律如下图。
将被控对象传递函数离散化:
因此求得输出相应与控制器输出之间的关系:
在MATLAB中实现以上两条核心算式即可。
2.1 被控对象在无控制器时的阶跃响应
2.1.1 程序:
G=tf([1],[1,1],'iodelay',1);%建立被控对象传递函数
sys=feedback(G,1);
step(sys) %绘制阶跃响应曲线
2.1.2 运行结果:
调节时间ts=6.6s;超调量overshoot=38.4%;上升时间:tr=0.546s;峰值时tp=2.36s
2.2 加入位置型PID控制(参数均设置为1)后的阶跃响应:
2.2.1 程序:
ts=0.5; %采样时间为0.5s
G=tf(1,[1,1],'iodelay',1); %建立被控对象传递函数
dsys=c2d(G,ts,'z'); %z变换离散化
[num,den]=tfdata(dsys,'v'); %以向量的格式输出num和den
el=0; %上一时刻的偏差
ul=0; %上一时刻输出的控制量
u2=0; %上上时刻输出的控制量
u3=0; %上上上时刻的输出的控制量
yl=0; %上一时刻输出的响应值
sum_e=0; %偏差累计量
kp=1; %比例系数
ki=1; %积分系数(ki=kp*ts/ti)
kd=1; %微分系数(kd=kp*td/ts)
u=zeros(1,1000); %设置一行1000列的零向量,将控制量预设为0
time=zeros(1,1000); %设置1000个时间点
for k=1:1:1000 %设置1000次循环,每次步进值为1
time(k)=k*ts; %每个计算点对应的时间
r(k)=1; %设置期望值
y(k)=-1*den(2)*yl+num(2)*u3;%系统响应输出序列
e(k)=r(k)-y(k); %计算误差值
u(k)=kp*e(k)+ki*sum_e+kd*(e(k)-el); %PID控制器输出
sum_e=sum_e+e(k); %更新偏差累计量
u3=u2; %更新上上上一时刻输出的控制量
u2=ul; %更新上上一时刻输出的控制量
ul=u(k); %更新上一时刻输出的控制量
yl=y(k); %更新上一时刻输出的响应值
el=e(k); %更新上一时刻的偏差
end %循环结束
plot(time,y);xlim([0,10]);
hold on;
2.3 衰减曲线法对PID调节器的整定及整定后的阶跃响应
2.3.1 在纯比例作用下,逐步改变比例带大小,直至响应曲线衰减率为0.75。经多
次试凑,得在kp=1.041,即比例带δs=0.9606时,衰减率为0.75。
2.3.1.1 程序:
ts=0.5; %采样时间为0.5s
G=tf(1,[1,1],'iodelay',1); %建立被控对象传递函数
dsys=c2d(G,ts,'z'); %z变换离散化
[num,den]=tfdata(dsys,'v'); %以向量的格式输出num和den
el=0; %上一时刻的偏差
ul=0; %上一时刻输出的控制量
u2=0; %上上时刻输出的控制量
u3=0; %上上上时刻的输出的控制量
yl=0; %上一时刻输出的响应值
sum_e=0; %偏差累计量
kp=1.041; %比例系数
ki=0; %积分系数(ki=kp*ts/ti,令ti=无穷)
kd=0; %微分系数(kd=kp*td/ts,令td=0)
u=zeros(1,1000); %设置一行1000列的零向量,将控制量预设为0
time=zeros(1,1000); %设置1000个时间点
for k=1:1:1000 %设置1000次循环,每次步进值为1
time(k)=k*ts; %每个计算点对应的时间
r(k)=1; %设置期望值
y(k)=-1*den(2)*yl+num(2)*u3;%系统响应输出序列
e(k)=r(k)-y(k); %计算误差值
u(k)=kp*e(k)+ki*sum_e+kd*(e(k)-el); %PID控制器输出
sum_e=sum_e+e(k); %更新偏差累计量
u3=u2; %更新上上上一时刻输出的控制量
u2=ul; %更新上上一时刻输出的控制量
ul=u(k); %更新上一时刻输出的控制量
yl=y(k); %更新上一时刻输出的响应值
el=e(k); %更新上一时刻的偏差
end %循环结束
plot(time,y);xlim([0,20]);
hold on;
2.3.1.2 运行结果:
临界振荡周期ts=4s。
2.3.2 整定参数
2.3.2.1 根据此表,整定PID控制器参数,
程序如下
ts=0.5; %采样时间为0.5s
G=tf(1,[1,1],'iodelay',1); %建立被控对象传递函数
dsys=c2d(G,ts,'z'); %z变换离散化
[num,den]=tfdata(dsys,'v'); %以向量的格式输出num和den
el=0; %上一时刻的偏差
ul=0; %上一时刻输出的控制量
u2=0; %上上时刻输出的控制量
u3=0; %上上上时刻的输出的控制量
yl=0; %上一时刻输出的响应值
sum_e=0; %偏差累计量
dets=0.9606; %δs赋值
det=0.8*dets; %δ赋值
kp=1/det; %比例系数
tk=4; %振荡周期为4s
ti=0.3*tk; %积分时间
ki=kp*0.5/ti; %积分系数(ki=kp*ts/ti)
td=0.1*tk; %微分时间
kd=kp*td/0.5; %微分系数(kd=kp*td/ts)
u=zeros(1,1000); %设置一行1000列的零向量,将控制量预设为0
time=zeros(1,1000); %设置1000个时间点
for k=1:1:1000 %设置1000次循环,每次步进值为1
time(k)=k*ts; %每个计算点对应的时间
r(k)=1; %设置期望值
y(k)=-1*den(2)*yl+num(2)*u3;%系统响应输出序列
e(k)=r(k)-y(k); %计算误差值
u(k)=kp*e(k)+ki*sum_e+kd*(e(k)-el); %PID控制器输出
sum_e=sum_e+e(k); %更新偏差累计量
u3=u2; %更新上上上一时刻输出的控制量
u2=ul; %更新上上一时刻输出的控制量
ul=u(k); %更新上一时刻输出的控制量
yl=y(k); %更新上一时刻输出的响应值
el=e(k); %更新上一时刻的偏差
end %循环结束
plot(time,y);xlim([0,20]);
hold on;
2.3.2.2 运行结果:
整定结果仍然不够理想,根据经验对参数进行再次整定。
2.3.3 二次整定
2.3.3.1 根据经验法对参数进行整定,kp、ki、kd分别调整至0.8、0.3、0.3 。
ts=0.5; %采样时间为0.5s
G=tf(1,[1,1],'iodelay',1); %建立被控对象传递函数
dsys=c2d(G,ts,'z'); %z变换离散化
[num,den]=tfdata(dsys,'v'); %离散化后提取分子分母
el=0; %上一时刻的偏差
ul=0.0; %上一时刻输出的控制量
u2=0; %上上时刻输出的控制量
u3=0; %上上上时刻的输出的控制量
yl=0; %上一时刻输出的响应值
sum_e=0; %偏差累计量
kp=0.8 %比例系数
ki=0.3 %积分系数(ki=kp*ts/ti)
kd=0.3 %微分系数(kd=kp*td/ts)
u=zeros(1,1000); %设置一行1000列的零向量,将控制量预设为0
time=zeros(1,1000); %设置1000个时间点
for k=1:1:1000 %设置1000次循环,每次步进值为1
time(k)=k*ts; %每个计算点对应的时间
r(k)=1; %设置期望值
y(k)=-1*den(2)*yl+num(2)*u3;%系统响应输出序列
e(k)=r(k)-y(k); %计算误差值
u(k)=kp*e(k)+ki*sum_e+kd*(e(k)-el); %PID控制器输出
sum_e=sum_e+e(k); %更新偏差累计量
u3=u2; %更新上上上一时刻输出的控制量
u2=ul; %更新上上一时刻输出的控制量
ul=u(k); %更新上一时刻输出的控制量
yl=y(k); %更新上一时刻输出的响应值
el=e(k); %更新上一时刻的偏差
end %循环结束
plot(time,y);xlim([0,50]);
hold on;
2.3.3.2 运行结果如下:
与未加pid控制器时的阶跃响应相比较,超调量overshot=13.6%,明显降低,调
节时间明显减少,响应速度加快。
2.4 控制参数对系统性能的影响
设置不同的控制参数,分别作出相应的响应曲线,比较各个参数或控制环节对系统
性能的影响。
2.4.1 程序:
PID=[2.4,0,0;
2.4,0.88,0;
3.4,0.88,0;
2.4,1.8,0;
2.4,1.8,0.25;
2.4,1.8,1]; %初始化6组PID参数
for pid=1:1:6; %设置大循环,pid参数分别取不同的值
ts=0.5; %采样时间为0.5s
G=tf(1,[1,1],'iodelay',1); %建立被控对象传递函数
dsys=c2d(G,ts,'z'); %z变换离散化
[num,den]=tfdata(dsys,'v'); %以向量的格式输出num和den
el=0; %上一时刻的偏差
ul=0.0; %上一时刻输出的控制量
yl=0; %上一时刻输出的响应值
sum_e=0; %偏差累计量
kp=PID(pid,1); %比例系数
ki=PID(pid,2); %积分系数
kd=PID(pid,3); %微分系数
u=zeros(1,1000); %设置一行1000列的零向量,将控制量预设为0
time=zeros(1,1000); %设置1000个时间点
for k=1:1:1000 %设置1000次循环,每次步进值为1
time(k)=k*ts; %每个计算点对应的时间
r(k)=1; %设置期望值
y(k)=-1*den(2)*yl+num(2)*ul+num(1)*u(k);%系统响应输出序列
e(k)=r(k)-y(k); %计算误差值
u(k)=kp*e(k)+ki*sum_e+kd*(e(k)-el); %PID控制器输出
sum_e=sum_e+e(k); %更新偏差累计量
ul=u(k); %更新上一时刻输出的控制量
yl=y(k); %更新上一时刻输出的响应值
el=e(k); %更新上一时刻的偏差
end %循环结束
subplot(2,3,pid);
plot(time,y);xlim([0,10]);
title(['Kp=',num2str(kp),'Ki=',num2str(ki),'Kd=',num2str(kd)])
hold on; %在同一幅图中以2行3列同时输出6组pid参数作
用下的在0-10s内的响应曲线,标题分别为对应的pid参数值
end %循环结束
2.4.2 运行结果:
2.4.3 运行结果分析:
①理论上,增大比例系数kp会使系统上升时间缩短,即响应速度加快,但由于本系
统采样周期T=0.5s过大,在图中难以比较。但比较图二图三可知,比例系数kp增大
时,系统振荡次数增多,调节时间变长。在系统稳定的前提下,适当增大kp可以减
小稳态误差,但并不能彻底消除稳态误差。
②比较图一图二图三可知,当引入积分环节,能够减少系统振荡次数,缩短调节时
间。但当积分系数ki增大,即积分时间偏小时,系统重新出现振荡,调节时间也相
应增大,若继续增大积分作用,系统可能不稳定。积分作用有助于消除系统误差,
提高系统控制精度。
③比较图四五六可知,当引入微分作用,能够减少超调量,缩短调节时间。但微分
作用过强,即微分时间偏大,都会适得其反,且系统振荡次数增多,甚至不稳定。
适当的微分作用有助于增加系统稳定性。
三、大作业收获和建议
1.对PID控制理解加深,在实现PID控制之前,回顾了增量型和位置型PID算式,从实
质上认识了PID控制。虽然位置型算式涉及误差累积,但借助MATLAB能够轻松实现,
所以选取了算法容易实现的位置型算式。
2.对PID整定方法的认识由抽象到具象,也是首次实际操作进行PID参数整定。此次
参数整定采取了较为简单的临界比例带法,相关参数求取参考了李遵基老师《热工
自动控制系统》一书中相关内容。此外,参数整定也参考了流传较广的PID参数整定
口诀。上课过程中,始终疑惑PID整定的最终预期曲线该如何判断,实际操作后,才
理解“理想曲线两个波,前高后低四比一”。
3.在2.4内容中,通过直观地比较不同PID参数下的系统响应曲线,重新系统、直观
的感受到PID控制各个环节和参数对系统性能的影响。
4.由于对MATLAB相关知识,尤其编程语言的不熟悉,此次大作业进展缓慢,在逐步
的摸索中,对MATLAB的使用和编程语言更加熟悉(系统构建、PID实现、figure图像
的相关调整)。
5.了解到课程之外一些硬件特性参数、工作原理,也是第一次深切地体会到自动控
制既简单又复杂,简单到一个小小的单片机芯片就能实现,但要想真正能应用到实
际操作,又需要调教各项参数,设计各种算法规避干扰带来的影响。
6.建议在PID控制部分的课程讲解,尤其是参数整定部分,结合MATLAB绘图讲授,就
自身来说,在课上这部分内容十分抽象,实际上手一次之后,理解和记忆都很深刻。
同时,也希望MATLAB课程能纳入专业必修,专业课学习的越深入,越感受到MATLAB
的实用性,相比于其他编程语言,MATLAB语言更通俗易懂,simulink建模也非常直
观实用。但这方面我们的确少有涉及,用处大但不会用的硬伤真的很伤。
参考文献
[M]李遵基.热工自动控制系统.北京:中国电力出版社,1997
[M]田涛.过程计算机控制及先进控制策略的实现.北京:机械工业出版
社,2006
[M]陆会明.控制装置与仪表.北京:机械工业出版社,2007
布料知识-500块钱能玩股票吗

更多推荐
usb冰箱
发布评论