直流电机控制课程设计报告(C语言版).doc
电气与信息工程学院 07级电气工程及自动化3级设计师设计名称直流电机调速指导员张志文 教授 目录 一. 课程设计题目及实现目标32. 设计原理图43. 设计原理及实现方法54. 流程图6五. 程序清单7六.131课程设计经验. 课程设计主题及其实现目标 直流电机调速课程设计题目 实现的目标 1).通过键盘改变脉冲的占空比,使电机转速从高到低,从低到高 2).通过改变pwm从而改变电机的转向,实现正反转 3).电机的转速和转向可以通过数字显示管显示 4).通过启动键唯一启动电机,防止电机误启动 5).由于没有传感器,本课程设计中没有测速模块,可以通过键盘快速达到电机预设的速度和转向备注,显示的速度是理论速度,而不是电机的实际速度2. 设计原理图注原理图proteus绘制三. 设计原理及实现方法1. 实现速度调节 通过控制L298的使能端“允许”或者“禁止”,通过改变a(脉冲宽度)达到控制PWM脉冲宽度调节电机转速的目的2. 转向的控制 通过L298中的H桥,从AT89C51中的P1_6和P1_7.输出控制信号控制BJT控制基极电压L298中H桥的BJT通断达到控制电机转向的目的A. L298的原理图B.本设计需要芯片和功能AT89C51单片机L控制电机驱动和转向 74L408四与门芯片8255A扩展51端口,2803显示缓冲MAX239串口通信芯片4. 流程图 入口 启动 N YP1_51,P1_41停止P1_50 Y 加速 Naan, P1_40 Ya150 Na150 Y aa-n, P1_40减速 Y P1_60,P1_71, P1_41 Or P1_61,P1_70, P1_41a10 N N反转/正传 Y a10 N进入预设值预设速度 Y N电机停转五.程序清单includeat89x51.hincludemotor_ctr.hincludeabsacc.hincludestdio.hincludeintrins.hdefine PA XBYTE0 x1FFF A口地址;define PB XBYTE0 x3FFF B口地址 ;define PC XBYTE0 x5FFF C口地址;define CON XBYTE0 x7FFF *控制字地 */ ;uchar key0; 定义key为全局变量uint a100;uchar n5; 单次增加的步长,输出脉冲占空比控制uint k10,mn10; 设置mn转向标志位uchar bai,shi,ge;uint seg_code110 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x98,0 xff; 09七段显示代码;/*THE MAIN PROCESS*/void mainCON0 x80;P1_50; 使电机停转 ;TMOD0 x15; 定时器1在模式1中工作 TH10 xFF; 定时器1的溢出中断时间为50ms;TL10 xb0;ET11;TR11; while1 keyGetKey;/*case 1case 9是预设速度,方便电机直接调节到该速度,避免通过 键调节*/ switchkey case 1 a10;break; case 2 a25; break; case 3 a40; break; case 4 a55; break; case 5 a70; break; case 6 a90; break; case 7 a110;break; case 8 a130;break; case 9 a150;break; case P1_40;control;break; 电机加速 case - control; break; -代表减速 case P1_70; P1_61; mn0;control; break; 电机顺时针转 case c P1_71; P1_60; mn1;control ; break;逆时针转 case / control; 按下/键,电机开始旋转 default break;不影响电机运行 /*THE END OF MAIN PROCESS**THE INTERRUPTION FUNCTION*/void timeinterrupt 3 中断号为3,即定时器1溢出中断 此处是计时50ms中断一次 TR10.该函数用于显示速度 k1TL0;displaya/100,a100/10,a10,mn; /*ifcount51 sprintfs,04d,k11000;注意sprintf的用法; 确保有四位输出 count1; k10; displaya,bai,shi,ge;*/ TH10 x3c; TL10 xb0; TH00 x00; TL00 x00; TR11;/* THE INTERRUPTION FUNCTION **THE GETKEY FUNCTION WHICH WAS USED TO GET THE INATION FROM THE KEY */ /*行信号从P低四位读进一口,列信号从P读进2口高四位*/uchar GetKey P1_00; P1_11; P1_21; P1_31;P2_01;P2_11;P2_21; P2_31;_nop_;_nop_; 适当的延时以便消除抖动ifP2_0return 789/ P1_10; P1_21; P1_31;_nop_;_nop_;ifP2_0return 456return * P1_11; P1_20; P1_31;_nop_;_nop_;ifP2_0return 123- P1_11; P1_21; P1_30;_nop_;_nop_;ifP2_0return creturn 0/*延时程序**THE DELAY FUNCTION*/void delayuint i uint j,k;for;i0;iforj10;j0;jfork10;k0;k;/*THE DISPLAY FUNCTION*/void displayuchar bai,uchar shi,uchar ge ,uint mn PB0 x08; 0000 1000 PAseg_codege; delay2; PB0 x04;0000 0100 PAseg_codeshi; delay2; PB0 x02;0000 0010 PAseg_codebai; delay2; PB0 x01;0000 0001 PAseg_codemn;delay2; 这里的延迟越短越好,处理终端的时间越短,电机 实时显示越好; /*THE CONTROL FUNCTION** 由于参数 a 它是一个全局变量,代表脉冲的占空比,每次调用函数时必须注意参数 a 值;*/ /* 如果按键为 -,(加速减速)和c,(正反转)不需要跳出循环,按其他键需要跳出循环,必须重新设置占空比** P1_4和P1_5脚通过和门防止误启动 */void control EA1; while1 ifa150 a150; 设置了 a 最大值限制了电机的最高速度 ifa10 a10; 设置了 a 的最小值,限制了电机的最高速度 P1_51; 与P1_4信号形成控制L298控制信号达到控制速度的目的 delaya; 调用延时,形成脉宽调节 P1_50; 电机逐渐停止 ; delay160-a;/*以下程序变更 a 的值达到改变脉冲宽度的目的*/ keyGetKey; ifkey- 减速 aa-n; else ifkey aan; 加速 else ifkey 若按键,电机顺时针转; P1_61; P1_70; mn0; else ifkeyc 反转 P1_71; P1_60;P1_41;mn1; else ifkey*key0 按下停止键*或者0; P1_50;P1_41; ENA0(P1_50)停止电机; break; else ifkey0如果没有按钮,则继续在此while循环中运行 switchkey case 1 a10; break; case 2 a25; break; case 3 a40; break; case 4 a55; break; case 5 a70; break; case 6 a90; break; case 7 a110; break; case 8 a130; break; case 9 a150; break; default break ; EA1; 附 motor_ctr.h FILEtypedef unsigned char uchar;typedef unsigned int uint ;extern uchar GetKey;extern void delayuint i;extern void control;void displayuchar bai,uchar shi,uchar ge ,uint mn;六.课程设计经验 两周的课程设计结束了,这两周的课程设计经验丰富。这是我们第一次亲自设计一个系统,包括硬件和软件,我们自己焊接了许多组件,体验了科学研究的味道。这是我们第一次亲自设计一个系统,包括硬件和软件,我们自己焊接了许多组件,体验了科学研究的味道。 起初,我们想用汇编写,因为我们刚刚学会了AT89C51汇编语言,印象深刻。但是在写作的过程中,我觉得用汇编语言很难表达自己的意思,也很难达到目的。后来,我决定改用C语言。毕竟,我对C语言感觉很好。然而,首先要面对的问题是如何将C语言和硬件结合起来编程。面对这个问题,我从图书馆借了两本书:单片机C语言教程和手拉手教你学习单片机C语言,并诚实地学习了这方面的内容。然而,随着编程的进行,我发现以前的原理图设计存在问题,因为我最初的设计是从列信号开始P三口低四位,导致按键下载失败,但模拟完全正确。后来改用P两口就能达到目的。在系统调试中,遇到任何键都可以启动的问题。停止电机旋转后,按下加速等键,电机自动启动,不利于调速系统的应用。我想象了改用P1_4引脚和P1_5引脚通过与门(744)L408芯片)后,作为L控制298的使能信号L298通断达到防止误启动的目的,控制电机转速。然而,在检查过程中,张老师说,因为钥匙太多,所以不是很好,但我认为钥匙是为了方便电机直接调整到一定的速度,所以不是多余的。13