课程设计报告课程设计名称:单片机系统综合课程设计课程设计题目:基于51单片机的步进电机控制院(系):计算机学院专业:计算机科学与技术(嵌入式)目录第1章总体设计方案 (1)1.1课程设计的内容和要求 (1)1.2课程设计原理 (1)1.3课程设计思路 (2)1.4实验环境 (3)第2章详细设计方案 (4)2.1实现方法 (4)2.2模块设计 (5)2.2.1 步进电机的驱动 (5)2.2.2 按键电路设计 (5)2.2.3 时钟产生及复位电路 (6)2.3主程序流程图图 (7)第3章调试及结果分析 (8)3.1调试步骤及方法 (8)3.2实验结果及分析 (8)参考文献 (9)附录1(源程序) (10)附录2(系统原理图) (14)附录3(器件清单) (15)第1章总体设计方案1.1 课程设计的内容和要求一、课程设计内容:步进电机是一种将电脉冲转换成角位移或线位移的电磁机械装置,也是一种能把输出解析为唯一增量和输入数字脉冲对应的驱动器件。
步进电机具有快速启动、停止的能力,精度高、控制方便,因此,在工业上得到了广泛应用。
利用单片机控制一个步进电机,而且要满足如下技术指标:(1)开始通电时,步进电机停止转动。
(2)单片机分别接按键开关K1、K2和K3,用来控制步进电机的转向,要求如下:当按下K1时,步进电机正转。
当按下K2时,步进电机反转。
当按下K3时,步进电机停止转动。
步进电机的工作方式有单四拍、双四拍、单双八拍。
二、课程设计要求:1. 独立完成课程设计任务;2. 通过老师当场验收;3. 交出完整的课程设计报告。
1.2课程设计原理步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调整节拍的目的。
本次设计是采用步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。
当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。
每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。
当通电状态的改变完成一个循环时,转子转过一个齿距。
四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC-CD-DA-AB),八拍(A-AB-B-BC-C-CD-D-DA-A)。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图 1.1 (a)、(b)、(c)所示。
a. 单四拍b. 双四拍 c八拍图1.1步进电机工作时序波形图1.3课程设计思路(1) 提出方案电机的运转一般由脉冲和方向信号来控制的,脉冲的频率控制电机的转速,脉冲的个数控制电机的转角;方向信号的高、低电平控制着电机的正、反转。
用单片机控制步进电机,可以用一个输出口发送脉冲:高电平->延时->低电平->延时……延时的长短控制脉冲的频率,电平的转换次数就是脉冲个数。
因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。
所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。
(2) 方案论证用单片机来产生这个脉冲信号,通过单片机的P1口输出脉冲信号,因为所选电机是四相的,所以只需要P1口的低四位P1.0~P1.3分别接到电机的四根电线上。
定时器定时来调整电机的转速,通过键盘的按钮,就可以对步进电机启动和停止以及转动方向节拍的控制,单片机上P3.0~P3.1连的是按键,这里键盘上的D 键为启动与A键停止键,B键为反转键,C键为正转键,K0、K1键为节拍控制键。
用8051单片机作为控制芯片。
设计方案的确定对步进电机的控制和驱动方案:方案一:使用多个功率放大器件驱动电机,通过使用不同的放大电路和不同参数的器件,可以达到不同的放大要求,放大后能够得到较大的功率。
但是由于使用的是四相的步进电机,就需要对四路信号分别放大,由于放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂。
方案二:使用ULN2003芯片驱动步进电机,可以直接用单片机的Y/O口提供信号;而且电路简单,使用比较方便。
因此选择方案二作为本设计的驱动电路。
1.4 实验环境·硬件环境:lab6000实验箱,PC机。
·软件环境:WA VE应用软件第2章详细设计方案2.1 实现方法步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。
即步进电机是将电脉冲信号转换为机械角位移的执行元件。
步进电机的控制可以用硬件,也可以用软件通过单片机实现。
硬件方法是采用脉冲分配器芯片进行通用换相控制;而软件方法是用单片机产生控制脉冲来控制步进电机的运行状态,这种方法可简化电路,降低成本。
在用软件控制时,主要设计要点如下:●判断旋转方向;●按相序确定控制字;●按顺序输入控制字;●确定控制步数和每一步的延时时间。
由于单片机的驱动电流一般都比较小,不能直接驱动电机工作,所以单片机的I/O口输出必须接驱动电路,即功率驱动,才得以控制电机正常工作。
控制框图如下图所示:开始启动时点击处于停止转动状态,当按下启动按键时,点击开始转动并以单四拍作为默认启动方式,用两个开关按键用于节拍控制,用键盘按键控制停止、启动、正转、反转。
用8051作为总控制芯片。
ULN2003用于步进电机的驱动控制。
其中在键盘控制时用键盘扫描程序。
如图2.1总方案图。
图2.1 总方案图2.2模块设计2.2.1步进电机的驱动步进电机的驱动采用ULN2003,接到单片机的P1.0~P1.3,如图2.1步进电机驱动和单片机连线图。
图2.1 步进电机驱动和单片机连线图2.2.2按键电路设计键盘接口按不同标准有不同分类方法,按键盘排布,可以分为独立方式(一组相互独立的键盘)和矩阵(一行列组成矩阵)方式。
此次设计只用到了六个按键,故可采用独立按键,P3.0~P3.5分别接到K1~K6。
其原理图如图2.2 按键连线图。
图2.2 按键连线图2.2.3时钟产生及复位电路时钟电路部分晶振为6MHz,其原理图如图2.3 时钟产生及复位连线图。
图2.3 时钟产生及复位连线图2.3主程序流程图图进入主程序,首先是对键盘扫描,调用步进电机相关数据控制电机转动,若检测到有键按下,则进行相应的处理。
流程图如下图2.4主程序流程图。
图2.4 主程序流程图沈阳航空航天大学课程设计报告第3章调试及结果分析第3章调试及结果分析3.1 调试步骤及方法本电路经调试符合题目要求,各项技术指标均达到设计的目的。
具体操作控制方法如下:1、当电机启动按钮时,步进电机根据制定默认状态开始转动;2、当电机停止按钮时,步进电机停止转动;3、当电机正转按钮时,步进电机正转;4、当电机反转按钮时,步进电机反转;5、当电机按钮K1K0为00时,步进电机单四拍工作;6、当电机按钮K1K0为01时,步进电机双四拍工作;7、当电机按钮K1K0为11时,步进电机单双八拍工作。
3.2 实验结果及分析故障一:首先在设计总体方案时,思路上出现了一些问题,我首先是想在中断里完成许多应在中断之外完成的事,经过老师的指点,后来想清楚了。
只需在主函数调用就行了,并设定了一个参数对电机的转动节拍进行调控。
故障二:由于编写程序的经验不多,在计算电机节拍,并将其控制电机时,遇到了一些问题,节拍转换公式是找出来了,但怎样将其节拍表示出来,困惑了好久,最后还查阅资料才解决。
故障三:在键盘扫描时不太懂怎么进行扫描,总是不懂地址的扫描和读数据,我以为是程序方面出了问题,后来又仔细看了关于键盘扫描这些知识才弄明白了,最后扫描正。
参考文献[1]王迎旭.《单片机原理及及应用》.北京:机械工业出版社[2]张迎新.《单片微型计算机原理、应用及接口技术》.北京:国防工业出版社[3]郭天祥.《新概念51单片机C语言教程》.北京:电子工业出版社[4]蔡明文冯先成编著.《单片机课程设计》.北京:华中科技大学出版社[5]王晓明.《电动机的单片机控制》.北京航空航天大学出版社[6]张毅刚.刘杰.MCS-51单片机原理及应用[M].哈尔滨:哈尔冰工业大学出版社,2008附录1(源程序)#include <reg51.h> //头文件#include <stdio.h>#include <stdlib.h>#define uint unsigned int //宏定义整形#define uchar unsigned char //宏定义字符型void delay(uint xms); //延时函数,调整转速,数越小转的越快void keyw0(); //电机工作函数void keyw1(); //反转函数void keyz1(); //正转函数void keyover(); //停止函数unsigned int i;unsigned char xdata *q1=0x8002; //列地址unsigned char xdata *q2=0x8001; //行地址sbit key1=P3^0; // 节拍选择控制,00为单四拍;01为双四拍;11为单双八拍sbit key2=P3^1;// 单双八拍工作方式://A-AB-B-BC-C-CD-D-DAuchar code FFZ[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //正转uchar code FFW[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //反转//双四拍工作方式://AB-BC-CD-DAuchar code shuangz[]={0x0c,0x06,0x03,0x09};uchar code shuangw[]={0x09,0x03,0x06,0x0c};//单四拍工作方式://A-B-C-Duchar code danz[]={0x08,0x04,0x02,0x01};uchar code danw[]={0x01,0x02,0x04,0x08};void main{while(1){if((*q2&0x0f)==0x0f) //行扫描键盘{*q1=0xfb; //键盘第三列扫描给低电平if((*q2&0x0f)==0x0e) //按D启动电机{keyw0(); //调用电机工作函数}}}}void keyw0(){while(1){if((*q2&0x0f)==0x0d) keyz1(); //按C键正转;调用正转函数if((*q2&0x0f)==0x0b) keyw1(); //按B键反转;调用反转函数if((*q2&0x0f)==0x07) keyover(); //按A键停止;调用停止函数for(i=0;i<4;i++){ //默认以单四拍正转工作P1=danz[i];delay(30);}}}void keyz1() //正转函数{while(1){if((*q2&0x0f)==0x0e) keyw0();if((*q2&0x0f)==0x0b) keyw1();if((*q2&0x0f)==0x07) keyover();if(key1==1&&key2==0) //双四拍{for(i=0;i<4;i++){P1=shuangz[i];delay(30);}if(key1==1&&key2==1) //单双八拍{for(i=0;i<8;i++){P1=FFZ[i];delay(30);}}if(key1==0&&key2==0) //单四拍{for(i=0;i<4;i++){P1=danz[i];delay(30);}}}}void keyw1() //反转函数{while(1){if((*q2&0x0f)==0x0e) keyw0();if((*q2&0x0f)==0x0d) keyz1();if((*q2&0x0f)==0x07) keyover();if(key1==1&&key2==0) //双四拍{for(i=0;i<4;i++){P1=shuangw[i];delay(30);}}if(key1==1&&key2==1) //单双八拍{for(i=0;i<8;i++){P1=FFW[i];delay(30);}}if(key1==0&&key2==0) //单四拍for(i=0;i<4;i++){P1=danw[i];delay(30);}}}}void keyover() //停止函数{while(1){if((*q2&0x0f)==0x0e) keyw0(); //是否按了D启动P1=0xf0; // 停止}}void delay(uint xms) //延时函数{uint i,j;for(i=110;i>0;i--)for(j=xms;j>0;j--);}附录2(系统原理图)附录3(器件清单)Bill of Material for DJ.BomUsed Part Type Designator Footprint==== ====================== ========== ==========5 4.7K R1 R2 R3 DIP-16R4 R51 6MHZ X1 L51 10u C3 RB.2/.42 30p C1 C2 RAD-0.21 8051 U1 DIP-401 A K3 S/11 B K4 S/11 C K5 S/11 D K6 S/11 K0 S0 L101 K1 S1 L101 K2 S2 L101 MOTOR STEPPER M1 V.20/.101 ULN2003A U2 DIP-20。