电子系统设计实验报告
温度控制系统的设计
姓名:杨婷
班级:信息21
学校:西安交通大学
一、问题重述
本次试验采用电桥电路、仪表放大器、AD转化器、单片机、控制通断继电器和烧水杯,实现了温度控制系统的控制,达到的设计要求。
设计制作要求如下:
1、要求能够测量的温度范围是环境温度到100oC。
2、以数字温度表为准,要求测量的温度偏差最大为±1oC。
3、能够对水杯中水温进行控制,控制的温度偏差最大为±2oC,即温度波
动不得超过2oC,测量的精度要高于控制的精度。
4、控制对象为400W的电热杯。
5、执行器件为继电器,通过继电器的通断来进行温度的控制。
6、测温元件为铂热电阻Pt100传感器。
7、设计电路以及使用单片机学习板编程实现这些要求,并能通过键盘置入预期温度,通过LCD显示出当前温度。
二、方案论证
1、关于R/V转化的方案选择
方案一是采用单恒流源或镜像恒流源方式,但是由于恒流源的电路较复杂,且受电路电阻影响较大,使输出电压不稳定。
方案二是采用电桥方式,由电阻变化引起电桥电压差的变化,电路结构简单,且易实现。
2、关于放大器的方案选择
方案一是采用减法器电路,但是会导致放大器的输入电阻对电桥有影响,不利于电路的调节。
方案二是采用仪表放大器电路,由于仪表放大器内部的对称,使电路影响较小,调整放大倍数使温度从0到100度,对应的电压为0-5V。
三、电路的设计
1、电桥电路
通过调节电位器R3使其放大器输出端在0度的时候输出为0实现调零,然
后合理选择R1、R2的阻值配合后面放大器的放大倍数实现热电阻阻值向电压值的转化。
通过调节电位器R3使其放大器输出端在0度的时候输出为0实现调零,然
后合理选择R1、R2的阻值配合后面放大器的放大倍数实现热电阻阻值向电压值的转化。本次实验中:R1=R2=10KΩ,R3为500Ω的变阻器。
2、仪表放大器
本实验中:Rf=R3=R4=R5=10KΩ,R1=R2=10KΩ,Rg为500Ω的变阻器,这个电路放大倍数大概为128倍左右。
3、TLC1549(10位)模拟数字转换器(A/D)
10位分辨率A/D转换器,其引脚图如下:
TLC1549器件有两个数字输入和一个3态输出、片选(CS ),输入输出时钟( I/O时钟)和数据输出(数据)的提供三线接口,串口主机处理器。
VCC (8):正电源电压
4、单片机中的1602液晶显示器
其引脚图如下:
1602采用标准的16脚接口,其中:
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时
对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K
的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存
器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS
和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW
为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
1602液晶模块内部的控制器共有11条控制指令,如下表所示。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
5、继电器驱动电路、继电器电路、烧水壶
利用单片机输出的控制信号(高低电平),通过继电器驱动电路,控制继电器的通断时间比例,从而控制烧水的温度。
四、测试方案与测试结果
1、实验所需器件表
2、水温控制测量调试方法
通过铂热电阻Pt100 将温度变化转换为电阻值的变化,再通过电桥间温度变化转换为电压变化,之后通过仪表放大器将电压放大一定的倍数(128倍左右),使输出电压在0-5 V,将输出电压送入A/D转换器(TLC1549)转换为数字信号(10位二进制数)送入单片机,单片机对数字信号进行处理并将其输出至液晶显示屏(1602LCD)上显示。为控制水温使之稳定,我们引用了PID控制算法,通过PID值控制继电器的占空比,继电器连接着电热杯的开关,所以可以使温度稳定在设定值。
(1)PID控制算法:
在测出目前水温的前提下,采用PID控制算法,即比例微分积分控制算法,
将测得的水温与设定的温度值做差,利用温差做PID算法,产生控制信号,控
制水的温度。增量式PID算法如下:
控制信号u=Kp*E(k)+Ki*[E(k)+E(k-1)+……+E(1)]+Kd*[E(k)-E(k-1)]
控制信号增量△u=Kp*[E(k)-E(k-1)]+Ki*E(k)+Kd*[E(k)-2E(k-1)+E(k-2)]
利用控制信号的增量不断修改控制信号,实现对温度的控制。这种增量式算法相比位置式算法,没有积分项的长叠加,避免了随着控制时间变长导致的计算时间增加的问题出现。
(2)关于AD转化的数据处理
由于A/D转换送进来的信号是一个10位的二进制数(0-1023)代表一个温
度为0 oC -100 oC的温度,为了方便数据的处理,我们使0对应0 oC,1000对应
100oC,所以只需要对信号除以10即可得到温度值,由于液晶显示的时候只能一
位位显示,所以将信号的百、十、个位分别取出来放入数组中,方便液晶显示输
出。
(3)继电器控制水温的方法
PID算法的输出值这里设定为一个0-100的数字,不超过最大值100,超过使其等于100,然后利用单片机内部的定时器控制单片机的一个端口的通断占空比,PID的控制量值越大,端口通的时间越长。将此端口与一个继电器相连,控制继电器的开断,继电器连接在烧水壶的电源线上,继电器的开端比决定了烧水壶的通断电时间比,从而控制了烧水壶的烧水功率。实现了对水温的控制。
(4)零度和满度校准的问题
实验中我们采用24度室温和65度高温两个温度下校准,低温时调整电桥的
电位器,高温时调整放大器的电位器,在数字测温计示数稳定的前提下,将单片
机的目前温度与数字测温计读数调为一致,反复调整几次,即可达到最佳状态。
3、测试结果分析
在单片机键盘输入设定温度65度,在单片机控制下烧水杯开始烧水,当单
片机的实测温度低于设定温度大约5度左右,即60度左右,继电器开始通断,
并且随着实测温度的升高,继电器的通断比越来越小,最终温度稳定在设定温度
65度左右,达到的实验要求。
五、结束语
通过本次实验,我对控制系统有了更加真实的体会,了解到要控制一个系统,
并且达到一定的精度要求,要充分考虑到多个方面的影响因素,了解现有器材的
缺陷,尽可能利用较小误差的测量方法。另外,通过本次试验对于单片机液晶屏
显示的应用,我也更加的熟悉单片机的原理和编程方法。最后,感谢老师的辛勤
指导,我也深刻体会到自己通过理论与实际的结合,学到不少实际设计中的知识,
但是也深刻感受到自己的不足,今后仍需努力。
实验报告格式要求
一.实验题目名称:可编程串行接口芯片
二.实验目的、任务和要求:
本实验要求设计SCI串行接口芯片,其功能包括串行及并行数据的接收和互相转换。
三.实验系统结构设计分析
1.模块划分思想和方法:
该芯片需根据功能分为串并转换电路和并串转换电路两部分。实现串并转换的关键器件就是移位寄存器,其功能可以使串行输入的数据先寄存到一个位矢量中,等到一组数据全部输入完毕后再一起处理,并行输出。而实现并串转换的关键器件是锁存器,它可以将并行输入的数据先锁存起来,再一位一位的转化成串行数据。计数器在这一芯片中也起到了重要作用,因为计数器可以产生时间脉冲的分频,用于配合时间脉冲控制各器件的工作。
2.各模块引脚定义和作用.
串并电路:
输入:rxd读入数据,clk系统时钟,reset计数器复位端,rd读入控制
四进制计数器:
C4四分频
十进制计数器:
Count_10计数分量,C10四十分频(c4的十分频)
移位寄存器:
Read读入数据,d0~d9并行输出(d0起始端,d1~d8数据端,d9校验位(本实验中不起作用))
锁存器:
K0~k7数据位
状态发生器:
RdST读入状态(0为读入,1为寄存器已满)
四.实验代码设计以及分析:
1.给出模块层次图;
2.按模块完成的代码及注释.
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SCI IS
PORT(cs,rxd,clk,SCIrd,reset,SCIwr,in7,in6,in5,in4,in3,in2,in1,in0: IN STD_LOGIC;
rdFULL,tdEMPTY,c4:buffer std_logic;
e7,e6,e5,e4,e3,e2,e1,e0,wxd:OUT STD_LOGIC
);
END SCI;
ARCHITECTURE WORK OF SCI IS
SIGNAL wr,rd,read,c10,d9,d8,d7,d6,d5,d4,d3,d2,d1,d0,k7,k6,k5,k4,k3,k2,k1,k0,mid: STD_ULOGIC;
SIGNAL wri : STD_LOGIC_vector(7 downto 0);
SIGNAL count_10 ,counter_8:std_logic_vector(3 downto 0);
BEGIN
PROCESS(cs)
BEGIN
rd<=cs OR SCIrd;
wr<=cs OR SCIwr;
END PROCESS;
//注释:片选输入,cs=1时,串入并出为“写”,并入串出为“读”;cs=0时,串入并出为“读”,并入串出为“写”;
PROCESS(rxd)
BEGIN
read<=rxd;
END PROCESS;
PROCESS(clk)
VARIABLE count_4 : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
IF(clk'EVENT AND clk='1')THEN
IF(count_4="00")THEN
count_4 := "01";c4 <= '1';
ELSIF(count_4="01")THEN
count_4 := "11";c4 <= '1';
ELSIF(count_4="11")THEN
count_4 := "10";c4 <= '0';
ELSIF(count_4="10")THEN
count_4 := "00";c4 <= '0';
END IF;
END IF;
END PROCESS;
PROCESS(c4)
BEGIN
IF(c4'EVENT AND c4='1')THEN
IF(rd='1')THEN
d0<=read;
d1<=d0;
d2<=d1;
d3<=d2;
d4<=d3;
d5<=d4;
d6<=d5;
d7<=d6;
d8<=d7;
d9<=d8;
END IF;
END IF;
END PROCESS;
PROCESS(c4,reset,rd)
BEGIN
IF(reset='0' OR rd='0')THEN count_10<="0000";c10 <= '0';
ELSIF(c4'EVENT AND c4='1')THEN
IF(count_10="0000" AND rxd='1' AND rdFULL='0')THEN
count_10 <= "0001";c10 <= '0';
ELSIF(count_10="0001")THEN
count_10 <= "0010";c10 <= '0';
ELSIF(count_10="0010")THEN
count_10 <= "0011";c10 <= '0';
ELSIF(count_10="0011")THEN
count_10 <= "0100";c10 <= '0';
ELSIF(count_10="0100")THEN
count_10 <= "0101";c10 <= '0';
ELSIF(count_10="0101")THEN
count_10 <= "0110";c10 <= '0';
ELSIF(count_10="0110")THEN
count_10 <= "0111";c10 <= '0';
ELSIF(count_10="0111")THEN
count_10 <= "1000";c10 <= '0';
ELSIF(count_10="1000")THEN
count_10 <= "1001";c10 <= '0';
ELSIF(count_10="1001")THEN
count_10 <= "1010";c10 <= '0';
ELSIF(count_10="1010")THEN
count_10 <= "1011";c10 <= '1';
END IF;
END IF;
END PROCESS;
PROCESS(c10)
BEGIN
IF(c10'EVENT AND c10='1')THEN
k7<=d8;
k6<=d7;
k5<=d6;
k4<=d5;
k3<=d4;
k2<=d3;
k1<=d2;
k0<=d1;
END IF;
END PROCESS;
PROCESS(rd)
BEGIN
IF(rd='0')THEN
e7<=k7;
e6<=k6;
e5<=k5;
e4<=k4;
e3<=k3;
e2<=k2;
e1<=k1;
e0<=k0;
END IF;
END PROCESS;
PROCESS(rd,c10)
BEGIN
IF(rd='0')THEN rdFULL<='0';
ELSIF(c10='1')THEN
rdFULL<='1';
ELSE rdFULL<='0';
END IF;
END PROCESS;
process(wr)
begin
if(wr='0')then
wri(0)<=in0;
wri(1)<=in1;
wri(2)<=in2;
wri(3)<=in3;
wri(4)<=in4;
wri(5)<=in5;
wri(6)<=in6;
wri(7)<=in7;
end if;
end process;
process(c4)
begin
if(c4'event and c4='1')then
if(wr='0')then
counter_8<="0000";
elsif(wr='1' and counter_8="0000")then counter_8<="0001";
elsif(counter_8="0001")then counter_8<="0010";
elsif(counter_8="0010")then counter_8<="0011";
elsif(counter_8="0011")then counter_8<="0100";
elsif(counter_8="0100")then counter_8<="0101";
elsif(counter_8="0101")then counter_8<="0110";
elsif(counter_8="0110")then counter_8<="0111";
elsif(counter_8="0111")then counter_8<="1000";
elsif(counter_8="1000")then counter_8<="1001";
end if;
end if;
end process;
process(wr,counter_8)
begin
if(wr='1' and counter_8="1001")then
mid<='1';tdEMPTY<='1';
elsif(wr='0')then
mid<='0';tdEMPTY<='0';
end if;
end process;
process(counter_8)
begin
if(wr='0' or mid='1')then
wxd<='0';
elsif(wr='1' and mid='0')then
if(counter_8="0001")then
wxd<=wri(0);
elsif(counter_8="0010")then
wxd<=wri(1);
elsif(counter_8="0011")then
wxd<=wri(2);
elsif(counter_8="0100")then
wxd<=wri(3);
elsif(counter_8="0101")then
wxd<=wri(4);
elsif(counter_8="0110")then
wxd<=wri(5);
elsif(counter_8="0111")then
wxd<=wri(6);
elsif(counter_8="1000" )then
wxd<=wri(7);
end if;
end if;
end process;
END WORK;
五.仿真图(输入输出波形)以及分析:
六.实验问题分析和经验总结:
在该实验的设计中,我们发现时序逻辑中最重要的部分就是时间信号对各进程的控制,因为为了保持各进程在时间上的同步性和正确性,需要用一个或几个相关联的时间信号来控制各进程。而在并串数据的转化上,这一点尤为重要,因为在数据的处理过程中,判断一组数据的开始和结束是非常重要的,而实现这一判断依靠的就是时间信号。
电子系统设计实践设计报告摘要在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。其中,温度控制也越来越…
电子系统设计实验报告姓名李浩然指导老师贾立新班级自动化0903学院信息工程学院提交日期20xx124一设计题目基于SOC单片机的数…
电子系统与设计组装实验报告一实验目的注重创新精神与创新能力的培养强化科技英语的应用能力提高科技写作水平加强师生同学之间的交流通过实…
成都理工大学电子技术课程设计报告GM计数管读出电路设计20xx06090112左卓核技术工程系二一二年六月成都理工大学20xx级本…
单片机控制的多功能函数发生器设计报告姓名陈远辉学号241099429专业电子信息工程指导教师吴钟华20xx年6月25日波形发生器的…
电子系统设计与实习报告实训任务一温度显示系统电路原理图PCB版图绘制一设计目标1完成温度显示系统的设计完成接收处理温度信号和控制八…
电子系统与设计组装实验报告一实验目的注重创新精神与创新能力的培养强化科技英语的应用能力提高科技写作水平加强师生同学之间的交流通过实…
国家电工电子实验教学中心电子系统课程设计设计报告设计题目数控脉冲信号发生器学院电子信息工程学院专业学生姓名学号指导教师电子系统课程…
单片机控制的多功能函数发生器设计报告姓名陈远辉学号241099429专业电子信息工程指导教师吴钟华20xx年6月25日波形发生器的…
电子线路专题实验一实验要求1认真阅读学习系统线路及相关资料2将键盘阵列定义为012EF编程实现将键盘输入内容显示在LCD显示器上3…