单片机闭环系统控制课程设计报告.docx
《单片机闭环系统控制课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机闭环系统控制课程设计报告.docx(12页珍藏版)》请在冰豆网上搜索。
单片机闭环系统控制课程设计报告
单片机原理及应用课程设计报告
设计题目:
直流电机闭环控制系统设计
学生姓名:
黎怡均同组人:
李言
学号:
U201211320
专业:
电气工程及其自动化
班级:
中英1203班
指导老师:
肖波
课设成绩:
评阅人:
目录
一、设计任务及主要技术指标和要求
1.1设计任务
1.2主要技术指标和要求
二、单片机控制直流电机原理
2.151单片机介绍
2.2直流电机转速控制原理
三、软硬件设计
3.1硬件电路设计
3.2软件程序设计
四、系统调试及结果
五、课设总结与体会
六、参考文献
一、设计任务及主要技术指标和要求
1.1设计任务:
1.要求能按设定的值来控制直流电机的转速,实现闭环控制。
2.设定的值和当前检测的转速值要求能显示出来,设定时用按键进行定。
1.2主要技术指标和要求:
1.本课题需要自己设计电机转速测速电路。
二、单片机控制直流电机原理
2.151单片机介绍:
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
51系列是基本型,包括8051、8751、8031、8951.这四个机种区别,仅在于片内程序储存器。
8051为4KBROM,8751为4KBEPROM,8031片内无程序储存器,8951为4KBEEPROM。
其他性能结构一样,有片内128BRAM,2个16位定时器/计数器,5个中断源。
其中,8031性价比较高,又易于开发,目前应用面广泛。
实验室核心电路板结构为SST89E58RD的MCS51单片机。
2.2直流电机转速控制原理:
2.2.1直流电机工作原理
图2.2.1直流电机的基本工作原理图
对图2.2.1所示的直流电机,如果去掉原动机,并给两个电刷加上直流电源,如上图(a)所示,则有直流电流从电刷A流入,经过线圈abcd,从电刷B流出,根据电磁力定律,载流导体ab和cd收到电磁力的作用,其方向可由左手定则判定,两段导体受到的力形成了一个转矩,使得转子逆时针转动。
如果转子转到如上图(b)所示的位置,电刷A和换向片2接触,电刷B和换向片1接触,直流电流从电刷A流入,在线圈中的流动方向是dcba,从电刷B流出。
此时载流导体ab和cd受到电磁力的作用方向同样可由左手定则判定,它们产生的转矩仍然使得转子逆时针转动。
这就是直流电动机的工作原理。
外加的电源是直流的,但由于电刷和换向片的作用,在线圈中流过的电流是交流的,其产生的转矩的方向却是不变的。
实用中的直流电动机转子上的绕组也不是由一个线圈构成,同样是由多个线圈连接而成,以减少电动机电磁转矩的波动,绕组形式同发电机。
2.2.2PWM调速工作原理
PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。
PWM可以应用在许多方面,比如:
电机调速、温度控制、压力控制等等。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。
也正因为如此,PWM又被称为“开关驱动装置”,见图2.3.2所示。
图2.3.2PWM信号的占空比
在PWM调速时,占空比是一个重要参数。
通过改变占空比的值来实现对电机的调速。
三、软硬件设计
3.1硬件电路设计:
3.2软件设计:
C语言代码如下:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uintn,n3;
unsignedlonginttemp1;
unsignedlongintnnn;
sbitPWM=P3^7;//pwm输出
sbitk1=P1^4;//按键定义
sbitk2=P1^5;
sbitk3=P1^6;//显示选择开关
ucharcount;
ucharjd=0;//PWM值0对应0%50对应100%
bitflag;
uchardisplay_data[4];
ucharledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90};//数码管0-9编码
sfrPORTD=0x80;//P0数据端口
sbitwei_1=P2^0;//4个数码管位选
sbitwei_2=P2^1;
sbitwei_3=P2^2;
sbitwei_4=P2^3;
uintsheding=30;//设置转速
voiddelay(uintz)//延时1MS
{
uinta,b;
for(a=z;a>0;a--)
for(b=120;b>0;b--);
}
//------------------------------------------------------------
voidtimer0_inti(void)//定时器TO中断初始化
{
TMOD=0X52;//工作模式设置T1计数T0定时
TH0=0x38;//定时200US
TL0=0x38;
TH1=0;
TL1=0;
EA=1;//开总中断
ET0=1;//开定时器0中断
//ET1=1;//开定时器1中断
TR0=1;
TR1=1;
}
voidkey()//按键扫描函数
{
if(k1==0)//加速
{
delay(10);
if(k1==0)
{
sheding+=1;//设定值加1
if(sheding>=999)
sheding=999;
}
while(k1==0);
}
if(k2==0)//减速
{
delay(10);
if(k2==0)
{
if(sheding>=1)//设定值减1
sheding-=1;
else
sheding=1;
}
while(k2==0);
}
}
voidtimetoseg()//数码管转换成段码程序
{
if(k3==0)//按下开关显示设定值
{
display_data[0]=ledcode[sheding/100%10];
display_data[1]=ledcode[sheding/10%10];
display_data[2]=ledcode[sheding%10];
}
else//平时转换显示
{
display_data[0]=ledcode[temp1/100%10];
display_data[1]=ledcode[temp1/10%10];
display_data[2]=ledcode[temp1%10];
}
}
voidshaomiao()//数码管扫描程序
{
PORTD=display_data[0];//显示第一个数码管
wei_1=0;
delay
(1);wei_1=1;
PORTD=display_data[1];//显示第2个数码管
wei_2=0;
delay
(1);wei_2=1;
PORTD=display_data[2];//显示第3个数码管
wei_3=0;
delay
(1);wei_3=1;
PORTD=display_data[3];//显示第2个数码管
wei_4=0;
}
//------------------------------------------------------------
voidmain()
{
timer0_inti();//中断初始化
while
(1)
{
timetoseg();//数码管转换成段码程序
shaomiao();
key();
if(flag)//自动调节转速功能
{
flag=0;
if(temp1>sheding)//转速大于设定值减小PWM
if(jd>1)
jd--;
else
jd=0;
if(temp1jd++;
if(jd>50)
jd=50;
}
}
}
voidtime0(void)interrupt1
{
n3++;
if(n3==5000)//时间计数//5000*200US=1秒
{
flag=1;
n3=0;
temp1=(TH1*256+TL1);//这样就得1秒的转速;
TH1=0;TL1=0;
}
if(countPWM=0;//确实小于,PWM输出低电平
else
PWM=1;//PORTA=0;//大于则输高电平
count=(count+1);//1ms次数加1
if(count>=50)//100hz的频率输出
count=0;
}
四、系统调试及结果
1.Proteus仿真:
按键1、2、3分别控制电机设定速度加1,减1以及电机当前转速的显示。
2.实际接线调试过程经历及结果:
说实话,刚开始看到这个课题的时候,我感觉这似乎是一个不可能的任务脑海中对于单片机,以及直流电机似乎都仅仅停留于书上那寥寥的几张黑白插图,更别谈如何实现对直流电机的闭环控制了。
课设的实现可分为三个阶段:
第一阶段:
查找基本资料。
开始的第一个星期,我几乎天天都往图书馆跑,在一排又一排的书架中寻找着关于课设的资料,眼中对“单片机”、“直流电机调速”这几个关键字异常敏感。
也就是在这段时间疯狂看书期间,我学到了一些简单的c语言编程以及利用PWM调压调速原理。
心中也渐渐安定了一些,课设也似乎渐渐摸到了方向。
第二阶段:
熟悉实验室器件及编程。
这个过程比较揪心,特别在程序的编写上,纠结了好久到底用汇编语言还是用c语言。
最后查找了不少参考程序,发现大都是c语言编的,而且关键是c语言相对于冗长的汇编语言来说显得简洁精炼,而且修改后的可移植性好。
然后就是自己对反馈及PWM波程序的一次又一次的修改和检验,当遇到一次一次未知的error真是特别的烦心,而且在这期间,为了检验程序以及连线是否正确,我还自学了proteus软件,不得不说,这款软件功能真是很强大,可以仿真查看,感觉挺好用的。
经过了好几个白天的调试,终于在仿真上成功了,当时心情特别的激动,仿佛一下就看到了课设的完美结局,可后来却完全不是按剧本发展。
第三阶段:
实验室调试阶段。
当我满怀信心与希望的走进实验室,一接线才发现根本不是想象中的一回事!
特别是开始几次按图连好线路,输好程序进行硬件调试的时候,发现电机根本不受控制似得飞转,原本应该显示转身的数码管也全是乱码条,按键也失去了作用。
当时真是有种很崩溃的感觉,一下子也完全不知道哪里出问题了。
真是慌得要死,后来整整和同伴反思总结了近一天的时间才有了几点头绪,问题可能出在:
1仿真连接和实际电路可能有比较大的差别,比如实验室是数码管是共阳极而仿真图中是共阴极,这样一来程序也必定要随之修改;2实验室分为核心板和通用版,有很多接线是默认连接的,而仿真图中很多时候没有考虑到这些;3可能是实验器件老化损坏,而导致显示和按键失灵。
第二天针对这些做出了改变之后终于成功了。
而经过了这么久的努力,我也感到了一种特别的成就感和欣喜。
终于有了一个比较成功的结果。
五、设计总结与体会
通过这次的单片机课设,我学到了很多,虽说其间的过程比较纠结和郁闷,但所幸最后还是较为圆满的完成了。
而最后在实验室亲手连接好线路并调试好程序,最终数码管和电机也有了预期中的显示和作用后,心中那种成就感是难以言表的。
现在回望这两周,感觉收获颇多。
而当时认为最重要的结果现在看来似乎也并没有那么重要了。
这感觉算一次很正式的课设了,自己在这个课设中也是受益匪浅。
也真切的感受到了付出后收获的喜悦,更是有了应对挫折与失败的经验与办法。
最重要的是感受到了自己的学习能力。
学会了用心去做,去对待生活中的人和事。
而且感受到了伙伴和团队合作的重要性。
是一次很有价值的体验。
六、[参考文献]
[1]汪建主编.单片机原理及应用技术[M],华中科技大学出版社,2012.5
[2]张强,吴红星,谢宗武,基于单片机的电动机控制技术[M]。
中国电力出版社,2008.
[3]王晓明编著.电动机的单片机控制[M].北京航空航天大学出版社,2007.8
[4]谭浩强等编著.C程序设计教程,高等教育出版社.2008.4