北工大电工学训练课设报告.docx
- 文档编号:9789476
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:33
- 大小:1.05MB
北工大电工学训练课设报告.docx
《北工大电工学训练课设报告.docx》由会员分享,可在线阅读,更多相关《北工大电工学训练课设报告.docx(33页珍藏版)》请在冰豆网上搜索。
北工大电工学训练课设报告
机械工程与应用电子技术学院
电工课程设计报告
课设名称电烙铁恒温控制器设计与制作
组别第N组
姓名学号彩虹人
同组成员彩虹人
指导老师杨建武
成绩
2016年6月12日
目录
一、目的、意义和方法2
1、实验目的2
2、实验意义2
3、试验方法3
二、硬件电路设计3
1、硬件电路总体图及介绍3
2、前向通道硬件(固件)设计4
2.1电路原理介绍与分析4
2.2元件选型5
3、用户界面硬件(固件)设计6
3.1电路原理介绍与分析6
3.2元件选型6
4、后向通道硬件(固件)设计7
4.1电路原理介绍与分析7
4.2元件选型8
三、软件算法设计8
1、软件总体结构8
2、数字滤波算法13
2.1一阶惯性滤波原理14
2.2算法的实现方法14
2、动态LED显示算法14
3、按键的控制算法15
4、数字PID算法16
四、实验与测试17
1、实验系统总体介绍17
2、前向通道标定17
2.1标定方法17
2.2实验标定数据与曲线分析18
3、PID参数整定19
3.1PID控制算法简介19
3.2PID参数整定方法19
3.3实验数据处理20
4、整体效果评价21
五、总结改进22
一、目的、意义和方法
1、实验目的
在本学期中,我们需要完成用PSOC作为主控元件,制作一套完整的温控器的原理样机。
技术要求如下:
(1)温度连续可调30~300℃
(2)温度要准确稳定±0.5℃
(3)升温速度要快<3分钟
(4)操作要简便(调整温度)
(5)显示要清晰数字显示
(6)电路要简单尽量少分立元件
(7)成本要低廉不使用昂贵元件
图1温控电烙铁
2、实验意义
本学期的电工学训练,使用PSOC来完成一套控温器的设计,旨在让我们熟悉并掌握简单的PSOC单片机操作与应用,完成一套简单而实用的常见用具的设计。
在这一过程中我们能将课堂上学过的或自学的AD转换、滤波、PID整定等知识活学活用,能做到理解与掌握,并做到以后再遇到同类的问题时能够用这些东西来解决它。
同时,以小组合作的方式来完成这一任务,不仅能锻炼我们的团队合作意识,还能培养我们人与人共事的能力。
3、试验方法
温控器的总体结构如下:
其中,单片机采用实验室的PSOC,电烙铁由老师提供,传感器采用由老师统一提供的铂电阻PT100,后向通道中的功率放大器使用由老师提供的无触点继电器,其余部分小组内成员自己完成,用户界面显示采用LED7段数码管。
具体如何制作并完成各个模块,后文会具体说明。
二、硬件电路设计
1、硬件电路总体图及介绍
硬件电路总体设计图
2、前向通道硬件(固件)设计
2.1电路原理介绍与分析
图2前向通道硬件(固件)设计
图3前向通道引脚分配
如图所示,为前向通道的整体固件设计,其中,R_PT100就是传感器铂电阻在电路中所处的位置,由于被测温度的变化,影响到铂电阻的阻值,从而最终影响到运算放大器的放大效果,最终显示通过软件设计计算出的被测温度数值。
在电路中采用两个电位器来完成对A/D转换输出数值的控制,如图2中R_4、R_5所示,使温度在可测范围内时,A/D转换的数值在0~4096(
之间,保持两个电位器的值不变,此时,电路的放大效果应该只与铂电阻的阻值有关,进而完成对温度的测量与显示。
2.2元件选型
2.2.1铂电阻简介
铂电阻是一种热敏电阻元件,电阻值会随温度改变而发生变化,我们选用的为PT100,其中,100表示它在0℃时阻值为100欧姆。
它的阻值会随着温度上升,且阻值是成匀速增涨的。
Pt100温度传感器的主要技术参数如下:
测量范围:
-200℃~+850℃。
允通电流≤5mA。
另外,pt100温度传感器还具有抗振动、稳定性好、准确度高、耐高压等优点。
图4PT100电阻随温度变化
2.2.2其余元器件选型
如图2中所示,定值电阻选型:
R_1=2kΩ,R_2=R_3=10kΩ;
电位器选型:
R_4=100kΩ,R_5=10kΩ。
2.2.3电路的调试
(1)用电位器(200Ω和20Ω电位器串联)替代铂电阻,进行调试,当电位器为156Ω时,调整R_5至Pin3处电压Uo1=1.65V,此时A/D转换应显示为2048左右。
(2)将电位器调整至100Ω,调整R_4使A/D转换显示为0左右。
(3)调整电位器使其为212Ω,此时,不调整任何器件,AD转换应显示为4096左右。
此时,调试完成。
再调整电位器阻值,示数应该在0到4096之间,如果再将电位器换为铂电阻,当改变铂电阻温度时,示数也会跟着改变。
3、用户界面硬件(固件)设计
3.1电路原理介绍与分析
图5用户界面硬件(固件)设计
图6用户界面引脚分配
在用户界面部分,我们主要需要完成两方面的任务,不但要完成对温度的显示,而且还要有用户输入部分,让用户手动输入需要的温度值。
在此,我们就需要一个4位的七段数码管来进行温度的显示,并选择PSOC上的按键来完成用户对目标温度值的输入。
其中,如图5所示,左边Timer_1模块为一个定时中断,来控制对数码管上数字的扫描显示和软件部分的定时控制;右上Control_Reg_1为七段数码管显示模块,通过真值表的构建,完成对0~9数值及小数点的显示;右下Control_Reg_2是用来控制4为七段数码管的扫描显示;左下的两个按钮就是用来控制用户输入目标温度值的模块。
3.2元件选型
3.2.1四位七段数码管简介及选型
数码管是一种半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimalpoint),其基本单元是发光二极管。
数码管是一类价格便宜使用简单的元器件,可以通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数。
在本次试验中,我们需要采用共阴极的4位七段数码管,因此,我们采购MT03641AR型号的数码管,并查找记录了其各个引脚位置,如图7所示:
图74位七段数码管及其引脚
3.2.2其余元器件选型
在数码管每个引脚上,我们都需要接上一个定值电阻以保证安全,因此,我们采购了8个阻值相同的定值电阻R=200Ω。
4、后向通道硬件(固件)设计
4.1电路原理介绍与分析
图8后向通道硬件(固件)设计
图9后向通道引脚分配
后向通道的硬件设计比较简单,我们只需要设计一个PWM模块和无触点继电器就可以了,引脚连接也很简单,只需要连接两个引脚就可以了,值得注意的是:
在引脚分配中,我们只分配了继电器的正极引脚Pin_12,而它的负极引脚应该是接地的,继电器的正负两引脚不能接反,否则就会出现错误。
在这一部分,我们通过控制PWM模块的输出值,来控制电烙铁的输入电压值,从而调节电烙铁的升温速度,以达到控制电烙铁温度的目的。
4.2元件选型
这部分我们主要需要的元件是无触点继电器,由老师提供。
4.2.1无触点继电器简介
无触点继电器,即固态继电(SolidStateRelay,缩写:
SSR)是由半导体控制负载流经固态开关的无接点继电器,输入端系利用发光二极管、光晶体管、功率晶体等半导体电路所组成光耦合器,经内部控制电路触发输出端的硅控整流器(SCR)或双向硅控整流器(TRIAC)进而导通负载电流,因此可以接受低压直流或交流信号输入之后,进而导通高压、高功率之输出电流,具隔离输出入及控制高功率输出电流之效果。
与继电器的基本原理相同,具有两个输入端与两个输出端,输入与输出中间为光隔离,输入端加上直流或交流信号达到额定电流值后,输出端就能从断路转变成通路状态,所以可以让小电流信号通过而激励电磁线圈,控制其接点导通或断开,进而控制大电流负载。
让相隔离之大小不同的电力系统间转换高功率输出及隔离输出入,以自动调节、保护电路安全。
4.2.2PWM功率放大器简介
PWM(PulseWidthModulator,脉冲宽度调制模块)是一种对模拟信号电平进行数字编码的方法。
通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。
电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。
通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。
三、软件算法设计
1、软件总体结构
#include
#include
#defineROW_00
#defineCOLUMN_00
#defineCOLUMN_99
#defineCOLUMN_1010
#defineCOLUMN_1111
#defineCLEAR_TENS_HUNDREDS""
#defineCLEAR_HUNDREDS"0"
voidUpdateDisplay(uint16voltageRawCount);
floatvoltageRawCount1;
inta,b,c,d;
uint16Disp_Count;//显示计时器
int16Target_Temp;//目标温度
voidmain(){
floatDisp_Data;
int16cm,mm;
uint8codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0123456789不带小数点的位
Opamp_1_Start();
Opamp_2_Start();
Opamp_3_Start();
ADC_DelSig_1_Start();
LCD_Char_1_Start();
PWM_1_Start();
Clock_2_Start();
LCD_Char_1_Position(ROW_0,COLUMN_0);
LCD_Char_1_PrintString("VCount:
");
ADC_DelSig_1_StartConvert();
Clock_1_Start();
Timer_1_Start();
isr_1_Start();
CYGlobalIntEnable;
//a=0x06;
//b=0x5b;
//c=table[3];
//d=table[4];
while
(1)
{
for(;;){
cm=(uint16)voltageRawCount1;
mm=voltageRawCount1*100;
mm=mm%100;
LCD_Char_1_Position(ROW_0,COLUMN_9);
LCD_Char_1_PrintNumber(cm);
LCD_Char_1_PrintString(".");
LCD_Char_1_PrintNumber(mm);
LCD_Char_1_PrintString("C");
if(Disp_Count>199)
Disp_Data=voltageRawCount1;
else
Disp_Data=Target_Temp;
//拆分数字显示
b=table[((uint16)(Disp_Data))%10];//求余数
if(((uint16)(Disp_Data))/100==0&&((uint16)(Disp_Data/10))%10==0)
c=0x00;
else{
c=table[((uint16)(Disp_Data/10))%10];
}
if(((uint16)(Disp_Data))/100==0)
d=0x00;
else{
d=table[((uint16)(Disp_Data))/100];
}
if(Disp_Data==Target_Temp)
a=0x00;
else{
a=table[((uint16)(Disp_Data*10))%10];}
}}
//UpdateDisplay(voltageRawCount);
}
voidTimer_Int(void){
staticint8cyc=0,t0=0;
staticint8nyn=0;
floatxi,yi;
staticfloatyi_1=0;
int16voltageRawCount;
uint8b5,b6;
staticuint8b5c=0,b50,b60;
uint16compare;
staticint16pyp=0;
floatp,e;
staticfloate1=0;
floatKp,Ki,Kd;
staticfloatIe=0,t=0;
unsignedintar[120];
//AD转换
ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);
voltageRawCount=ADC_Delsig_1_GetResult16();
voltageRawCount=voltageRawCount+2048;
//一阶惯性滤波
xi=(float)voltageRawCount;
yi=0.01*xi+0.99*yi_1;
voltageRawCount=(uint16)yi;
yi_1=yi;
//标度变换
voltageRawCount1=7.8106E-07*yi*yi+7.5841E-02*yi-1.8463E+01-0.8145;
//动态显示
cyc++;
nyn++;
if(nyn>100)
nyn=0;
if(cyc>3)cyc=0;
Control_Reg_2_Write(0x0F);
if(cyc==0){
Control_Reg_1_Write(a);
Control_Reg_2_Write(0x0E);
}
if(cyc==1){
if(b5c==1&&nyn<40)nyn=nyn++;
//Control_Reg_2_Write(4|0x80);
else{
Control_Reg_1_Write(b|0x80);
Control_Reg_2_Write(0x0D);
}}
if(cyc==2){
if(b5c==2&&nyn<40)nyn=nyn++;
//Control_Reg_2_Write(4);
else{
Control_Reg_1_Write(c);
Control_Reg_2_Write(0x0B);
}}
if(cyc==3){
if(b5c==3&&nyn<40)nyn=nyn++;
//Control_Reg_2_Write(4);
else{
Control_Reg_1_Write(d);
Control_Reg_2_Write(0x07);
}}
//r任务3:
扫描按键并处理
Disp_Count++;
if(Disp_Count>400)
Disp_Count=200;
b5=Pin_10_Read();
b6=Pin_11_Read();
if(b5==0&&b50==1){
if(b5c==0)
b5c=1;
elseif(b5c==1)
b5c=2;
elseif(b5c==2)
b5c=3;
elseif(b5c==3)
b5c=0;
}
b50=b5;
if(b5c!
=0)
Disp_Count=0;
if(b6==0&&b60==1){
if(b5c==1){
if(Target_Temp%10==9)
Target_Temp=Target_Temp-9;
else
Target_Temp++;
}
if(b5c==2){
if((Target_Temp/10)%10==9)
Target_Temp=Target_Temp-90;
else
Target_Temp=Target_Temp+10;
}
if(b5c==3){
if(Target_Temp%100==0){
if(Target_Temp/100==3)
Target_Temp=Target_Temp-300;
else
Target_Temp=Target_Temp+100;
}
else{
if(Target_Temp/100==2)
Target_Temp=Target_Temp-200;
else
Target_Temp=Target_Temp+100;
}}}
//if(Target_Temp>300)
//Target_Temp=300;
b60=b6;
//compare=Target_Temp;
//if(voltageRawCount1>225)
//compare=0;
//if(voltageRawCount1<225)
//compare=255;
//PWM_1_WriteCompare(compare);
Kp=12.69;
Ki=0.325;
Kd=109.7;
pyp++;
if(pyp>=200)
pyp=0;
if(pyp==1){
e=Target_Temp-voltageRawCount1;
if(e>10||e<-10){
p=Kp*e+Kd*(e-e1)+128;
Ie=0;
}
else{
Ie=Ie+Ki*e;
p=Kp*e+Ie+Kd*(e-e1)+128;
}
if(p>255)
p=255;
if(p<0)
p=0;
compare=p;
e1=e;
PWM_1_WriteCompare(compare);
t++;
if(t0<120&t==4){
t=0;
ar[t0]=voltageRawCount1;
t0++;
}}
Timer_1_ReadStatusRegister();
}
voidUpdateDisplay(uint16voltageRawCount){
LCD_Char_1_Position(ROW_0,COLUMN_9);
LCD_Char_1_PrintNumber(voltageRawCount);
if(voltageRawCount<10){
LCD_Char_1_Position(ROW_0,COLUMN_10);
LCD_Char_1_PrintString(CLEAR_TENS_HUNDREDS);
}
elseif(voltageRawCount<100){
LCD_Char_1_Position(ROW_0,COLUMN_11);
LCD_Char_1_PrintString(CLEAR_HUNDREDS);
}}
2、数字滤波算法
实验过程中发现,数字显示的结果末尾数数字抖动很明显,无法准确地表示成一个值,因此,我们需要滤波来消除转换结果的抖动现象,常用数字滤波算法有一阶惯性滤波、平均值滤波等,本实验采用一阶惯性滤波方式。
2.1一阶惯性滤波原理
一阶惯性滤波,又叫一阶滤波,或一阶低通滤波,主要适用于滤去换面变化的随机干扰信号。
是使用软件编程实现普通硬件RC低通滤波器的功能。
它采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,从而使得输出对输入有反馈作用。
2.2算法的实现方法
在中断中加入以下程序来完成一阶惯性滤波:
xi=(float)voltageRawCount;
yi=0.01*xi+0.99*yi_1;
voltageRawCount=(uint16)yi;
yi_1=yi;
2、动态LED显示算法
cyc++;
nyn++;
if(nyn>100)
nyn=0;
if(cyc>3)cyc=0;
Control_Reg_2_Write(0x0F);
if(cyc==0){
Control_Reg_1_Write(a);
Control_Reg_2_Write(0x0E);
}
if(cyc==1){
if(b5c==1&&nyn<40)nyn=nyn++;
//Control_Reg_2_Write(4|0x80);
else{
Control_Reg_1_Write(b|0x80);
Control_Reg_2_Write(0x0D);
}
}
if(cyc==2){
if(b5c==2&&nyn<40)nyn=nyn++;
//Control_Reg_2_Write(4);
else{
Control_Reg_1_Write(c);
Control_Reg_2_Write(0x0B);
}
}
if(cyc==3){
if(b5c==3&&nyn<40)nyn=nyn++;
//Control_Reg_2_Write(4);
else{
Control_Reg_1_Write(d);
Control_Reg_2_Write(0x07);
}
}
3、按键的控制算法
Disp_Count++;
if(Disp_Count>400)
Disp_Count=200;
b5=Pin_10_Read();
b6=Pin_11_Read();
if(b5==0&&b50==1)
{
if(b5c==0)
b5c=1;
elseif(b5c==1)
b5c=2;
elseif(b5c==2)
b5c=3;
elseif(b5c==3)
b5c=0;
}
b50=b5;
if(b5c!
=0)
Disp_Count=0;
if(b6==0&&b60==1){
if(b5c==1){
if(Target_Temp%10==9)
Target_Temp=Target_Temp-9;
else
Target_Tem
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北工大 电工学 训练 报告