单片机闭环系统控制课程设计报告.docx

上传人:b****5 文档编号:7734499 上传时间:2023-01-26 格式:DOCX 页数:12 大小:717.93KB
下载 相关 举报
单片机闭环系统控制课程设计报告.docx_第1页
第1页 / 共12页
单片机闭环系统控制课程设计报告.docx_第2页
第2页 / 共12页
单片机闭环系统控制课程设计报告.docx_第3页
第3页 / 共12页
单片机闭环系统控制课程设计报告.docx_第4页
第4页 / 共12页
单片机闭环系统控制课程设计报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

单片机闭环系统控制课程设计报告.docx

《单片机闭环系统控制课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机闭环系统控制课程设计报告.docx(12页珍藏版)》请在冰豆网上搜索。

单片机闭环系统控制课程设计报告.docx

单片机闭环系统控制课程设计报告

单片机原理及应用课程设计报告

设计题目:

直流电机闭环控制系统设计

学生姓名:

黎怡均同组人:

李言

学号:

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(temp1

jd++;

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(count

PWM=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

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1