单片机课程设计报告
步进电机控制系统设计
姓 名: 何远希 吴汝煜 班 级: 06电信6 学 号: 200630490608 200630580624 指导老师:邓小玲 姜晟 王卫星 日期: 2009.6.9~2008.6.19
华南农业大学工程学院
摘 要
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
电子线路设计实习课程的目的是增进对单片机的感性认识,加深对单片机理论方面的理解;掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O口、A/D转换等;了解和掌握单片机应用系统的软硬件设计过程及实现方法;提高同学们自主动手,自已解决,亲自实操,团队合作的能力等。
我们队选择的题目是步进电机控制系统。旨在充分运用我们这学期学到的单片机知识,加深对一些技术性问题的理解,加强动手能力,培养团队合作能力。
关键词:单片机;步进电机控制系统;团队合作
2
Abstract
At present, single-chip microcomputer to infiltrate all areas of our lives, which is very difficult to find the area of almost no traces of single-chip microcomputer. Single-chip, also known as single-chip microcontroller, it is not the completion of a logic function of the chip, but a computer system integrated into a chip. Speaking in general terms: a single chip has become a computer. Its small size, light weight, cheap, for the learning, application and development of facilities provided. At the same time, learning to use the principle of single-chip computer to understand and structure the best choice.
Electronic circuit design training course is aimed at improving the perceptual knowledge of SCM, deepen their understanding of the theory of single-chip microcomputer; grasp the internal functions of single-chip module applications, such as the timer / counter, interrupt, memory, I / O port, A / D conversion; understand and master the single-chip hardware and software application systems design and implementation process; own hands to raise the students, their solution is to drill, team work ability.
Our team is entitled to choose stepper motor control system. Designed to make full use of this semester we learned the single-chip knowledge, deepen understanding of some technical issues, strengthening practical ability to foster teamwork ability.
Key words: microcomputer; stepper motor control system; team
3
目 录
1方案比较与选择............................................................5 1.1 方案比案..............................................................5
1.2方案选择·········································································7
2.电路仿真与分析····································································.8
2.1程序·············································································8 2.2仿真与分析······································································15 3﹒电路板制作、焊接、调试·························································18
4.课程设计心得····································································20
4
1.方案比较与选择
1.1 方案比较 方案一
图1
此方案使用P2口四位输出,先经过前级电压匹配放大,使用三极管PNP8550,放大后的电流直接推动大功率三极管,三极管导通后电机线圈将有电流流过。后级的四个三极管相当于四个开关,分时的有顺序的控制这四个开关,电机就会转起来。
方案二
5
图2
1 分析说明
PO口驱动电机,P1,P2口驱动LCD,P3口受键盘控制,左上角那个是震荡电路。 2 步进电机接线原理图
图3
方案二与方案一比较 前者用L298控制复杂的桥式电路驱动,控制简单,只要给驱动板一个时钟脉冲和两个正反转控制信号就可以,所有时序安排由时序芯片来搞定,而且数字电路受口声影响较小。
方案三(最终方案)
6
图4
1.2方案选择
选择方案三,方案二与方案三比较,方案二中的l298芯片不能提供隐定的脉冲,而用2003
芯片刚更好。
7
2.电路仿真与分析 2.1 程序
#include #define RIGHT_RUN 1 //定义正转值 #define LEFT_RUN 0 //定义反转值 void Delay(uint); void ShowState(); //显示运转方式 void CountSpeed(); //计算速度 void WriteKey(); void LCDKey(); void LCDShow(int); //int LCDBusy(); sbit RS=0xB7; //定义端口 sbit RW=0xB6; sbit E=0xB5; char SpeedChar[]=\"SPEED(n/min):\"; char StateChar[]=\"STATE:\"; char STATE1[]=\"Right\"; char STATE2[]=\"Left \"; char STATE2[]=\"Stop \"; ucha SPEED[3]=\"060\"; uint RunSpeed=60; //运转速度 ucha RunState=RIGHT_RUN; //运转状态 void main() { TMOD=0x66; //定时器设置 8 EA=1; //开总中断 TH0=0xff; TL0=0xff; ET0=1; TR0=1; TH1=0xff; TL1=0xff; ET1=1; TR1=1; //置定时器0初值; //置定时器1初值; IT0=1; EX0=1; IT1=1; EX1=1; //开外部中断1:减速 //脉冲方式 //开外部中断0:加速 LCDKey(); CountSpeed(); ShowState(); while(1) { Delay(RunSpeed); P0_1=P0_1^0x01; } } void SpeedUp() interrupt 0 { //中断0:加速程序 if(RunSpeed>=20)RunSpeed=RunSpeed-1; 9 } CountSpeed(); P1=0x01; WriteKey(); ShowState(); void timer0(void) interrupt 1 //定时器0:正转 { RunState=RIGHT_RUN; P0_0=1; P1=0x01; WriteKey(); ShowState(); } void SpeedDowm() interrupt 2 { } void timer1(void) interrupt 3 //定时器1:反转 { RunState=LEFT_RUN; if(RunSpeed<=80)RunSpeed=RunSpeed+1; CountSpeed(); P1=0x01; WriteKey(); ShowState(); //中断1:减速程序 P0_0=0; P1=0x01; WriteKey(); 10 ShowState(); } int LCDBusy() { P1=0xff; while(P1_7!=0) { RS=0; RW=1; E=0; E=1; } return 0; } void LCDKey() { P1=0x38; WriteKey(); LCDBusy(); P1=0x01; WriteKey(); LCDBusy(); P1=0x0f; WriteKey(); LCDBusy(); //LCD忙检测 //设置LCD工作方式 //设置DD-ROM地址//清除 //设置显示功能 11 P1=0x06; WriteKey(); LCDBusy(); P1=0x0c; WriteKey(); LCDBusy(); } void WriteKey() //写控制 { RS=0; RW=0; E=0; E=1; } void LCDShow(int i) //LCD显示 { P1=i; RS=1; RW=0; E=0; E=1; } void CountSpeed() { SPEED[0]=(6000/RunSpeed/100)+48; SPEED[1]=6000/RunSpeed%100/10+48; 12 SPEED[2]=6000/RunSpeed%10+48; } void ShowState() //显示速度状态 { int i; for(i=0;SpeedChar[i]!='\\0';i++) { LCDBusy(); LCDShow(SpeedChar[i]); } LCDBusy(); P1=0x80|0x0d; WriteKey(); for(i=0;SPEED[i]!='\\0';i++) { LCDBusy(); LCDShow(SPEED[i]); } LCDBusy(); P1=0xC0; WriteKey(); for(i=0;StateChar[i]!='\\0';i++) { LCDBusy(); LCDShow(StateChar[i]); 13 } LCDBusy(); P1=0xC0|0x0A; WriteKey(); i=0; if(RunState==RIGHT_RUN) while(STATE1[i]!='\\0') { LCDBusy(); LCDShow(STATE1[i]); i++; } else while(STATE2[i]!='\\0') { LCDBusy(); LCDShow(STATE2[i]); i++; } } void Delay(uint LCDBusy) //延时 { int i; for(;LCDBusy>0;LCDBusy--) for(i=0;i<100;i++); } 14 2.2、仿真与分析 仿真原理图 图5 我们采用proteus软件进行画图和仿真。仿真开始时,首先把原程序导入到单片机内,再按下开始键. 2.2.1步进机正转 图6 15 2.2.2步进机反转 图7 2.2.3步进机加速 图8 2.2.4步进机减速 图9 16 2.2.5步进机停止 图10 17 3﹒电路板制作、焊接、调试 根据老师发下的电路板母板,只要按照电路板,选取所需的电路元器件,就可以直接焊接在相应的焊孔上,如下图14、15、16所示。然后用排线将各模块主板连接起来,接着就是进行调试了。调试之前要将单片机程序下载到主芯片AT89S52上,这就是所说的烧录了。 原理图: 图11 PCB板布线图: 18 图12 要特别注意的事项: 1、 主板上的电路元器件一定要完整地焊好,尤其是焊孔小而密集,容易成 短路和虚焊,所以务必细心。 2、 由于电源正负端脚离得较近,所以容易导通而致短路。 19 4.课程设计心得 本次单片机课程设计我们决定做步进电机控制系统。经过一个多星期的努力,我们小组圆满地完成了本次课程设计,终于完成了一个步进电机控制系统。在这次课程设计中我们学到了很多东西。先说下这次课程设的大概内容 1)先要弄懂这次课程设计的要求和大概知道每个设计的概念然后先择一个自已能力相当的设计项目。然后设计出原理图,并运用proteus进行电路仿真。这里我们要的知识是先要学好单片机这门课。 2)然后熟悉proteus和keil这两个软件的运用。就是要学会protel画PCB图。这时同样要耐心和细心,注意布线要粗点,这是我们这次课程设计血的教训,同样焊点也要样,这样才能防止焊电路时铜的脱落。 3)这次课程设计当中,我们收获颇丰我们已经对每个元器件做了详细的讨论,我们设计电路保持的宗旨是:宁可浪费一点时间,也不浪费一个元器件。实验之初我们的确有“报大数的想法”,以便实验电路调试失败以后,仍有挽救的机会。但是经过老师的指点之后,我们懂得,课程设计不像爱迪生做实验,非要经过千千万万个失败后,才能做出成功的电路。然而实际情况是,课程设计是上百人一 起做的实验。元器件报多了,导致整体成本也提高了,同时设计效率也低下去了。所以,为避免这种状况,对于每个电路,我们都耗时耗力,经常精确的计算,每个电子元器件都作了充分的利用。元器件的选取要符合标准化。不是每一个元器件在现实中都能买到,有些甚至停产了,这就要熟悉电子元器件市场,但实际我们作为学生少出外,也难以深入了解电子元器件的市场,所以还是要在平时 实验中多观察多留意,哪些元件是常见面的,哪些元件是自己想到的但平时又不常见的;至少要熟悉一个EDA软件。本次课程设计中我们小组用的是PROTEUS这个软件。这就要求我们对PROTEUS和PCB的应用要有深刻的了解。尤其是封装,所谓元器件封装,是指元器件焊接到电路板上时,在电路板上所显示的外形和焊点的位置关系。封装不好可能会造成短路,更严重的可能会造成元器件 被烧坏,电路瘫痪。比如线宽、元器件接脚等等参数,都要符合老师推荐值, 或参考前人有经验者。 4)团队合作很重要,任务分配要合理。比如谁擅长设计电路、谁擅长文献检索, 20 谁擅长焊接、谁擅长WORD文档编辑,我们都分配得相当均匀。要有吃苦耐劳 的精神。在课程设计过程中难免会遇到许多困难,这就要求我们具有吃苦耐劳的 精神,小组成员之间互相鼓励,共同努力,永不气馁,一起攻克难关。课程设计 是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的 重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日 新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说 得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重 要的。 21 参考文献 [1]. 汤敏,林武,高义等.单片机的实用性 .单片机工程学报.2001.17(5):59~63. [2].梁东建、杨德水等.基于单片机的现实应用的研究.电子学报.2004.35(3):72~75. [3].周浩生,罗惕乾,高良润.LCD显示的实用研究.工程学报.1998,14(1):55~59. 22 因篇幅问题不能全部显示,请点此查看更多更全内容