基于AT89C51单片机的电机控制系统设计_课程设计报告 下载本文

平。电机带了一个有四个缺口的转盘,如此。当电机转动一圈时,会有4个脉冲输入给单片机,对这些脉冲进行计数,可以计算出电机的转动速度。

由于装在电机上的码盘格数比较少,而我们程序中速度的级数为255,相对较大。给速度计数的T0计数器,为满足系统的实时控制性,则获取速度数据的时间应该尽量短(即程序中T0定时器初始化程序中的Delay延时)。同时,这一时间又要满足当给定速度最大时,仍有足够的时间能够对速度反馈值进行正确的计数。所以这一时间不能够太短。合理的确定这一时间的方法是,给定电机速度为255,让其全速转动。此时,从小到大更改计数延时Delay()的时间,然后在液晶显示器上观察反馈的速度值,当其刚好为255时,此时的延时Delay()时间为系统的的最佳速度采样时间。

经过上述处理后,我们发现获得的这个延时时间是相对比较长的,这是因为当给定速度较大时,电机需要转几十圈才能反馈出实际的速度值,所以反馈速度所需的时间比较长,实时控制的能力相对较差。为克服以上系统的缺点,可以通过减少速度的级数,即减小Pwm_MAX的值来实现。但是速度的级数减少后,电机调速的连续性就必然会降低,电机在速度动态变化过程中的稳定性就会相应降低。另外,还可以采用增加电机码盘格数的方法来实现速度反馈的快速性和准确性,借此可以在较合理的时间内得到电机速度的准备值。第二种改进方案更为合理和科学。

3.4 MCU接口

3.5 按键电路

图6 按键电路 按键电路如上图3.5所示。当任意一个按键KEY被按下时,P2.0~P2.2引脚会对应的的产生一个低电平。

4 软件设计

4.1程序要求

我们使用C语言对AT89C51进行控制程序的编写。程序中使用到的资源有两个定时器资源,T0工作在16位外部计数模式,用于速度的反馈和计算等数据处理。T1工作在8位定时器自动重载模式,引脚P3.4接计数信息输入端口。在T1的定时溢出中断程序中进行速度的产生及对电机的控制操作。系统使用到5个普通I/O口资源。P1.6和P1.7为控制电机转动的两路控制信号。P2.0作为加速按键信息输入端口,P2.1作为减速按键信息输入端口,P2.2作为方向控制键信息输入端口。

程序运行时,先进行LCD控制程序的初始化并对显示进行预处理。然后读预设速度初值,由T1中断服务程序产生PWM速度控制信号,T0反馈速度信息并进

行速度的计算处理。KEY1和KEY2可对速度进行加减操作。KEY3可对电机进行正反转的控制操作。

程序的编写要遵循性保证系统稳定性的前提下消耗尽量少消耗资源的原则,并要考虑实际的可操作性和满足系统在各种工作环境下能稳定正常运行的要求。

开始 4.2 程序流

LCD初始化 程

显示预处理 初值设定 开启中断 按键处理 中断服务 速度计算 电机控制 数据处理 返回 图7 程序流程图

5程序的调试

5.1 编程软件Keil C51简介

我们使用KEIL C51软件来对程序进行编译和调试。Keil C51是德国知名软件公司Keil(现已并入ARM公司)开发的基于8051内核的微控制器软件开发平台,是目前开发8051内核单片机的主流编译工具。

5.2 程序编译和调试

(1)运行Keil C51软件。新建工程。选择Keil C51软件的菜单“Project | New |u

图8 工程的建立 Vision Project?”,参考图8。弹出一个名为“Create New Project”的对话框,为工程取名为“SOK”。然后存放到指定文件夹。

(2)紧接着,Keil C51提示您选择CPU器件。8051内核单片机最早是由Intel公司研发的。因此,在这里您可以选择Intel公司的第1个器件“80/87C52”,参见图 9。接下来弹出一个对话框。我们不需要添加启动代码,所以这里选择 “否

(N)”。

图9 器件的选择 (3)选择Keil C51软件的菜单“File | New?”,将出现的新文档命名为“SOK”。选择菜单“File | Save”,弹出一个名为“Save As”的对话框。建议将文件名改为“SOK.c”, 如此,我们建立了一个C语言的程序文本。如图10所示。