车载冰箱温度控制系统

车载冰箱温度控制系统
车载冰箱温度控制系统

课程大作业设计报告

(2019-- 2020年度第2学期)

课程名称:控制装置与仪表B

题目:车载冰箱温度控制系统设计与仿真院系:控制与计算机工程学院

班级:自动化1704

学号:120171070716

学生姓名:郭云泉

指导教师:张文彪

设计周数:2周

成绩:

日期:2020年5月19日

一、设计要求

1.根据以下控制装置的组成设计一个车载冰箱温度控制系统(半导体制热和制冷),

并说明变送器、控制器和执行器的选型以及相应装置的特点,同时阐述整个系统的控制流程。

图1 控制装置的组成

2.假设车载冰箱温度控制系统被控对象的传递函数为

()

1

s

e

G s

s

-

=

+,控制系统的采

样周期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通信,兼容I2C通信。可以使用官方提供的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.75mm

内部阻值: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.2.2 运行结果

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; %上一时刻输出的响应值

相关主题
相关文档
最新文档