结论
本文所述的直流电机闭环调速系统是以低价位的单片微机8051为核心的,而通过单片机来实现电机调整又有多种途径,相对于其他用硬件或者硬件与软件相结合的方法实现对电机进行调整,采用PWM软件方法来实现的调速过程具有更大的灵活性和更低的成本,它能够充分发挥单片机的效能,对于简易速度控制系统的实现提供了一种有效的途径。而在软件方面,采用PLD算法来确定闭环控制的补偿量也是由数字电路组成的直流电机闭环调速系统所不能及的。曾经也试过用单片机直接产生PWM波形,但其最终效果并不理想,在使用了少量的硬件后,单片机的压力大大减小,程序中有充足的时间进行闭环控制的测控和计算,使得软件的运行更为合理可靠。
致谢
这次毕业设计,凝结了很多人的心血,在此我表示由衷的感谢。没有他们的帮助,我将无法顺利完成这次设计。
首先,我要特别感谢曲培新老师对我的悉心指导,在毕业设计期间曲老师指导我、帮助我收集文献资料,理清设计思路,完善操作方法,并对我所做的设计提出有效的改进方案。老师渊博的知识、严谨的作风、诲人不倦的态度和学术上精益求精的精神让我受益终生。作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,想要完成这个设计是难以想象的。因此,特别需要感谢曲培新老师给予的耐心细致的指导,在此,再一次向曲培新教师以及关心帮助我的教师同学表示最诚挚的谢意!
其次,学校在这方面也给我们提供了很大的支持和帮助,学校领导比较重视,每个设计小组配有专门的指导老师,帮助我们能顺利完成整个设计。对于学校和老师为我的毕业设计所提供的极大帮助和关心,在此我致以衷心的感谢!
最后,还要感谢同学四年来对我的关心与支持,感谢各位老师在学习期间对我的严格要求。同时也要感谢身边朋友的热心帮助,没有你们的关心与支持,我不可能这么快完成我的毕业设计!这几个月的岁月是我学生生涯中最有价值的一段时光,也将会成为我以后永远的美好的回忆,在这里有治学严谨而不失亲切的老师,也有互相帮助情同骨肉的同学,更有和谐、融洽的学习生活氛围,这里将是我永远向往的地方。借此论文之际,我想向所有人表达我的最诚挚的谢意,愿我们将来都越来越好。
22
参考文献
[1]张友德等,单片机原理应用与实验[M],复旦大学出版社1992.
[2]张毅刚,彭喜源,谭晓钧,曲春波.MCS-51单片机应用设计[M].哈尔滨工业大学出版社2001.1.
[3]宋庆环,才卫国,高志,89C51单片机在直流电动机调速系统中的应用[M]。唐山学院,2008.4
[4]陈 锟 危立辉,基于单片机的直流电机调速器控制电路[J],中南民族大学学报(自然科学版),2003.9.
[5]李维军 韩小刚 李 晋,基于单片机用软件实现直流电机PWM调速系统[J],维普资讯,2007.9
[6]曹巧媛.单片机原理及应用[M].北京,电子工业出版社,1997.
[7]刘大茂,严飞.单片机应用系统监控主程序的设计方法[J].福州大学学报(自然科学福建农林大学硕士论文版),1998.2.
[8]http://hi.http://m.diyifanwen.net//wolfwhite/blog/item/1e23bf09e83e16256b60fbf8.html [9]朱定华,戴汝平编著.单片机原理与应用[M].清华大学出版社北方交通大学出版社,2003.8.
[10]http://www.dianzi9.cn/danpianji/200808/10-846.html
[11]薛钧义 张彦斌编著. MCS—51/96系列单片微型计算[M].西安交通大学出版社,1997.8
[12]陈国呈 编著.PWM逆变技术及应用[M].中国电力出版社.2007年7月 [13]马忠梅 等编著.单片机的C语言应用程序设计(第4版)[M],北京航天航空大学出版社.2007. 4
[14]刘昌华,易逵编著.8051单片机的C语言应用程序设计与实践[M].国防工业出版社2007.9
23
附录
1.详细电路设计图
24
2.程序
(1)延时程序 void dealy() { uchar i;
for(i=0;i<100;i++); }
void t0(void) interrupt 1 using 0 //定时T0中断服务函数 { tcnt++;
//每过250ust tcnt 加一
if(tcnt==40) //计满40 次(1/100 秒)时
{
tcnt=0; //重新再计 sec++;
if(sec==10) //定时0.1 秒,在从零开始计时 {
sec=0;
TH0=0x06; //对TH0 TL0 赋值 TL0=0x06; miaoshu=count;
count=0; }
}
}
(2)PID运算子程序
void PID_work() {
negsum=0;possum=0; if(BJ==0) {
possum+=k1;
temp[2]=temp[2]+temp[0];}
else
{
25
negsum+=k1;
}
k3=temp[2]/10; if(possum>negsum) {
k2=possum-negsum; //存储结果
else
UK=1; P3=UK;
} (3)主程序
void main()
{
P1=0x00; P3=0x00; CY=0;
temp[1]=k3+k1; //误差积累, {
if(CY==1) }
UK=0xfe; else UK=k1+k3;
//16位判断。
temp[2]=temp[2]-temp[0];
TMOD=0x01; /*定时器0方式1*/ TH0=0xfc; /*定时器装载初值*/ TL0=0x18;
ET0=1; /*开定时器0中断*/ TR0=1; /*启动定时器0*/
while(1)
if(P1_0==1) if(P1_1==1)
{
P1=0xff;
26