步进电机课程设计

  • 格式:doc
  • 大小:269.50 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

一、课程设计的性质和目的

通过课程设计,进行硬软件设计的方法和技能训练,巩固在课堂上学到的有关硬件电路设计和相应程序设计的基本知识和基本方法,通过具体课题的训练,达到能独立阅读、查阅资料、软硬件设计和调试完善特定功能的目的。

二、课程设计的要求

1、遵循硬件设计模块化。

2、要求通过自制PCB板、或万能板、或面包板设计实物。

3、程序设计结构化。

4、要求程序结构合理,程序简明易懂,有必要的注释。

三、主要仪器设备及软件

PC机、Keil软件、、ALTIUM DESINGERS09(PROTEL99)、Proteus绘图软件及仿真等。

四、课程设计题目及要求

见具体课题(有课题老师与选题学生共同商定)

地点:信息工程学院实验室(有教师协调安排)

元器件领用:由指导教师签字在行政楼301领取

时间安排:每天集中半天的辅导(具体师生协商安排)

五、课题分析及设计思路

硬软件设计思路

基于单片机的步进电机控制,可以通过四个按键分别实现开始/停止,正传/反转,全速前进和单步前进。

通过外部中断来控制开始/停止按键可实时响应按键的输入。由两个LED分别指示程序的运行状态,可以方便进行操作。

○1硬件设计框图

总体硬件电路图如下所示:

○2硬件设计电路图(按模块设计)

1.单片机最小系统

AT89C51为8 位通用微处理器,主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O 脚,其功能用途由软件定义。

5l系列单片机提供以下功能:4 kB存储器;256 BRAM;32条工/O线;2个16b定时/计数器;5个2级中断源;1个全双向的串行口以及时钟电路。

2.电机模块

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信

号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个

脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为

“步距角”,它的旋转是以固定的角度一步一步运行的。制脉冲频率来控

制电机转动的速度和加速度,从而达到调速的目的。

步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1—2相励磁。每输出一个脉冲信号,步进电动机只走一步。因此,依序不断送出脉冲信号,步进电动机即可连续转动。本设计选择半步励磁(1—2相励磁):1—2相励磁法为1相与2相轮流交替导通。因分辨率提高,且运转平滑,每送一励磁信号可走9度。若以1—2相励磁法控制步进电动机正转,其励磁顺序如下所示(若励磁信号反向传送,则步进电动机反转):励磁顺序:A —AB—B—BC—C—CD—D—DA

驱动电路如下:其中:1B,2B,3B,4B分别与P10,P11.P12,P13相连接。

步进电机时序表:

3.按键模块

通过四个按键分别实现对步进电机的不同功能的实现,电路图如下:

开始/停止和方向按键分别通过连接单片机的P3.3,P3.2,用外部中断的方式对其处理,可快速准确的相应中断,以实现对电机的控制。

4.LED模块

通过两个LED分别指示开始/停止(D1),正/反转(D2)。电路图如下:

软件设计思路

○1软件功能规划

软件部分整体功能由开始/停止键控制,只有当开始/停止键按下,LED1(D1)亮时,才能控制步进电机的转动。D1点亮后,由LED2(D2)

的亮灭来指示电机的正反转,当D2灯亮时,电机正转,D2灭时,电机

反转。

当电机全速运行时,可通过开始/停止键和方向键控制电机停止转动。重新按下按键时,电机正常运行。

○2软件流程图如下:

六、程序主要代码与分析(关键代码要有注释):

#include //51芯片管脚定义头文件

#include //内部包含延时函数 _nop_();

#define uchar unsigned char

#define uint unsigned int

uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转电机编码 uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转电机编码 sbit K1 = P3^0; //全速

sbit K2 = P3^1; //单步

sbit K3 = P3^2; //正/反转

sbit K4 = P3^3; //开始/停止

sbit led1 = P0^0; //指示灯,表示开始/停止状态

sbit led2 = P0^2; //指示灯,表示正转/反转状态

int num=500; //延时函数的常量,控制步进电机的转速

uchar h=0; //设置变量,控制单步运行

uchar flag = 0; //控制运行状态,控制开始/停止

uchar flag1 = 0; //控制运行状态,控制正转/反转

void motor_ffw(); //函数声明

void motor_rev();

void motor_ffw2();

/ /* 延时t毫秒,11.0592MHz时钟,延时约1ms

void delay(int t)

{

uint k;

while(t--)

{

for(k=0; k<20; k++)

{}

}

}

/ /*步进电机正转单步执行

void motor_single()

{

P1 = FFW[h]; //取数据,单步转45度

delay(num*2); //调节转速

h++; //全局变量,控制单步的次数

if(h == 8)

{

h = 0;

}

}

/ /*步进电机反转单步执行

void motor_single_cov()

{

P1 = REV[h]; //取数据,单步转45度

delay(num*2); //调节转速