步进电机设计报告.docx
《步进电机设计报告.docx》由会员分享,可在线阅读,更多相关《步进电机设计报告.docx(53页珍藏版)》请在冰豆网上搜索。
步进电机设计报告
硬件实习报告
步进电动机的设计报告
题目:
步进电动机的设计与制作
学院:
大数据与信息工程学院
专业:
计算机科学与技术
班级:
电信113
学生姓名:
王浩
指导教师:
马光喜老师
2015年1月6日
第1页共页
硬件实习报告
前言---------------------------------------------------------------
2
1.
设计目标及内容------------------------------------------------
3
1.1
设计内容---------------------------------------------------
4
1.2
设计目的---------------------------------------------------
4
2.
硬件原理及设计分析--------------------------------------------
4
2.1
步进电机的工作原理-----------------------------------------
5
2.2
液晶显示原理----------------------------------------------
5
2.3
步进电机转速控制及显示设计(
LCD显示转速)的硬件框图--------
6
2.4
总的硬件电路图---------------------------------------------
7
3.
软件分析及设计------------------------------------------------
8
3.1
软件需求分析-----------------------------------------------
8
3.2
程序流程图-------------------------------------------------
8
3.3
软件代码---------------------------------------------------
9
4.
操作说明及结果分析-------------------------------------------
18
5.
调试过程中遇到的问题和解决方法-------------------------------
18
6.
硬件实习总结-------------------------------------------------
19
7.
参考文献-----------------------------------------------------
19
第2页共页
硬件实习报告
前言
在电子科技不断飞速发展的今天,数字控制技术得到了广泛而深入的应用。
步进电机是一种将数字信号直接转换成角位移或线位移的控制驱动元件,具有快速起动和停止的特点。
因为步进电动机组成的控制系统结构简单,价格低廉,
性能上能满足工业控制的基本要求,所以广泛地应用于手工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,投影仪、数码摄像机、大型望远镜、卫星天线定位系统、医疗器件以及各种可控机械工具等等。
步进电机突出的优点是它可以在宽广频率范围内通过改变脉冲频率来实现
调速,在需要精确定位的地方都要用到它,比如打印机、绘图仪等。
而LCD显示屏在很多数码产品中有着广泛的应用,如计算器,IC卡电话机,电子手表,掌上电脑,仪表显示屏等。
同时,单片机也广泛应用于实时控制、智能仪器、仪表通信和家用电器等各个领域,所涉及的内容非常广泛,是计算机科学、电子学、自动控制等基础知识
的综合应用。
单片机的应用系统有硬件和软件所组成。
本次硬件实习是基于51单片机对步进电机转速进行控制,加之液晶的显示,使其转速的档位和方向显示在液晶上。
第3页共页
硬件实习报告
1.设计目标及内容
1.1设计内容
1.1.1利用实验平台上单片机P0口输出脉冲序列,74LS244输出开关量,开
关K2—K7控制步进电机转速,(分6档),K0,K1控制转向。
驱动方式分两种,四相四拍、四相八拍,通过软件设计,控制步进电机的转速和方向。
并将转速(1~6
档)和转向(正转“1”,反转“0”)显示在LCD显示器上
1.2设计目的
1.2.1了解步进电机控制的基本原理;
1.2.2掌握液晶显示图形的基本方法,从而对其它液晶屏的使用也能得心应
手。
2.硬件原理及设计分析
2.1步进电机的工作原理
该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1是该四相反应式
步进电机工作原理示意图。
图1四相步进电机步进示意图
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号
齿对齐,同时,转子的1、4号齿就和C、D相
绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC
接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线
的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B
相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、
C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
第4页共页
硬件实习报告
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
a.单四拍b.双四拍c八拍
图2通电时序波形
本实验使用的步进电机用直流+12V电压,电机线圈由A、B、C、D四相组成。
驱动方式为四相四拍方式,各线圈通电顺序如下表。
表中首先向A线圈输入驱动电流,接着B、C、D线圈驱动,最后又返回到A线圈驱动,按这种顺序切换,电机轴按顺时针方向旋转。
若通电顺序相反,则电机轴按逆时针方向旋转。
(注:
为提高步进电机负载能力和运行平稳,可使用四相八拍驱动方式。
)
顺序/相
A
B
C
D
0
0
1
1
1
1
1
0
1
1
2
1
1
0
1
3
1
1
1
0
表二:
驱动方式
2.2液晶显示原理
本实验用的是1602液晶,1602液晶可以显示两行字符,其写入字符是根据
时序特点,写指令,写数据等操作。
以下是
1602液晶的相关资料,
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入RS=L,R/W=L,D0—D7=指令码,E=高输出
无
脉冲
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入RS=H,R/W=L,D0—D7=数据,E=高脉输出
无
冲
第5页共页
硬件实习报告
表二:
基本
操作时序表
读写操作时序如图所示
图3:
读操作时序
图4:
写操作时序
2.3步进电机转速控制及显示设计(LCD显示转速)的硬件框图
如图5所示,整个硬件围绕51单片机,根据开关输入通过外接电路控制步进电机的转速和方向,并显示在液晶上。
8051单片机作为处理器,整个硬件功能围绕8051进行实现,首先,由开关
通过扩展输入实现对整个硬件功能的控制。
当开关设置为某个状态时,由8051单片机输出相应的值,通过扩展输出对步进电机进行相应方向和转速的控制,并由1602进行相应的显示。
第6页共页
硬件实习报告
8051
单
片
机
扩
驱
展
动
步进电机
输
电
出
路
LCD驱动电路液晶
扩
展
输开关
入
图5硬件框图
2.4总的硬件电路图
如硬件电路图图6所示。
其中,74LS373为地址锁存器,74LS244为带3态输出的八缓冲器,74LS273为带清除的八触发器;74LS138为三八译码器。
开关由扩展输入对单片机进行输入相关变量,从而通过单片机对步进电机的转速和方向进行控制。
再有液晶进行相应的显示。
3.软件分析及设计
第7页共页
硬件实习报告
3.1软件需求分析
本实习要求用开关控制步进电机的转速和方向,并将相应的数据显示在液晶上;通过分析,我们只需将开关的输入量转换成相应的步进电机转速即可,然而,通过前面讲过的步进电机的相关驱动方式我们可以知道,转速可以通过设置延时子程序的时间长短来实现,而步进电机的方向则通过不同的时序来控制,从而加
上很容易的实现步进电机的转速控制,在根据液晶的时序规则来显示相应的数据,很简单的实现了整个实习要求。
3.2程序流程图
如图(图7:
程序流程图)所示,在程序开始后先进行各个参数的初始化,然后对开关量进行读取,根据读取的数值进行对步进电机的转速量和方向量进行设置,并同时在LCD上显示出相应的数据,定时,置输出地址,然后输出相应的参数,从而实现对步进电机和液晶的相应控制。
图7:
第8页共页
硬件实习报告
如下图(图8:
LCD框图所示)为LCD液晶的显示子程序框图,程序先进行LCD初始化,然后进行清屏,在需要写入时,对LCD进行写操作,最后就可以显示出来你想要的字符。
图8:
LCD程序框图
3.3软件代码
#include"reg52.h"
#include
//#defineucharunsignedchar
//#defineuintunisgnedint
//#defineBYTEunsignedchar
//#definenumunsignedint
sbitk1=P2^0;
sbitk2=P2^1;
sbitk3=P2^2;
sbitk4=P2^3;
sbitk5=P2^4;
sbitk6=P2^5;
sbitk7=P2^6;
sbitk8=P2^7;
voiddelay1(unsignedintt)//电机驱动延时程序
{
unsignedintk;
while(t--)
{
第9页共页
硬件实习报告
for(k=0;k<100;k++)
}
}
voidmotor_ffw(unsignedchari)//电机顺时针转
动程序
{
P1=0x01;
delay1(i);
P1=0x02;
delay1(i);
P1=0x04;
delay1(i);
P1=0x08;
delay1(i);
}
voidmotor_ffz(unsignedchari)//电机逆时针转动程
序
{
P1=0x01;
delay1(i);
P1=0x02;
delay1(i);
P1=0x04;
delay1(i);
P1=0x08
delay1(i);
}
sbitRS=P0^5;//定义P2^5为液晶控制端口RS
sbitRW=P0^6;
sbitE=P0^7;
第10页共页
硬件实习报告
ucharcodetable[]="Guizhoudaxue"//字符定义
ucharcodetable1[]="wangxiaogang"
ucharcodetable2[]="1120020075"
ucharcodetable3[]="SPEED:
123456";
ucharcodetable4[]="startstepmotor";
ucharcodetable5[]="SPEED:
";
ucharcodetable6[]="123456";
typedefunsignedcharBYTE;//定义字符变量BYTEtypedefunsignedintWORD;//定义整形变量WORDtypedefbitBOOL;//字符变量BOOL
//LCD驱动程序
voidlcddelay(BYTEms)//延时子程序
{
BYTEi;
while(ms--)
{
for(i=0;i<250;i++)//循环250次
{
_nop_();
_nop_();
_nop_();//空操作延时1us
_nop_();
}
}
}
//测试LCD忙碌状态-忙检测函数
BOOLlcd_bz()
{
BOOLresult;//定义字符变量result,用于存放测试的LCD忙
碌状态值
RS=0;
//
寄存器的选择控制口,选择指令寄存器
RW=1;
//读写操作控制端口,
RW=1表示读操作
E=1;
//
_nop_();
//
延时4us
第11页共页
硬件实习报告
_nop_();
_nop_();
_nop_();
result=(BOOL)(P0&0x80);
E=0;
returnresult;
}
//写入指令数据到LCD
voidlcd_wcmd(BYTEcmd)
{
while(lcd_bz());
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
//写入字符显示数据到LCD
voidlcd_wdat(BYTEdat)
{
while(lcd_bz());
RS=1;
RW=0;
E=0;
P0=dat;
_nop_();
第12页共页
硬件实习报告
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
}
//LCD初始化设定
voidlcd_init()
{
lcd_wcmd(0x38);//设置LCD为8位数据,两行显示,5*7点阵lcddelay
(1);
lcd_wcmd(0x0E);//显示开关控制指令设定,LCD开显示和光标,不闪烁
lcddelay
(1);
lcd_wcmd(0x06);//设光标和画面的移动方式I/D=1,S=0设置读
写操作之后AC自动加一,显示不移动
lcddelay
(1);
lcd_wcmd(0x01);//清除LCD的显示内容
lcddelay
(1);
}
voidout0init()//外部中断0的初始化
EX0=1;
IT0=1;
EA=1;
voidlcd_xianshi()//lcd液晶显示程序
lcd_wcmd(0x00);
for(num=0;num<15;num++)
{
第13页共页
硬件实习报告
lcd_wdat(table[num]);
delay
(1);
}
lcd_wcmd(0x80+0x40);
for(num=0;num<12;num++)
{
lcd_wdat(table1[num]);
delay
(1);
}
lcd_wcmd(0x80+0x40);
for(num=0;num<10;num++)
{
lcd_wdat(table2[num]);
}
lcd_wcmd(0x80+0x40);
for(num=0;num<11;num++)
{
lcd_wdat(table3[num]);
delay
(1);
}
lcd_wcmd(0x80+0x40);
for(num=0;num<14;num++)
{
lcd_wdat(table4[num]);
delay
(1);
}
lcd_wcmd(0x80+0x40);
for(num=0;num<6;num++)
{
lcd_wdat(table5[num]);
delay
(1);
}
voiddelay1ms(void)//判断按键是否按下延时时间误差0us
{
第14页共页
硬件实习报告
unsignedchara,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void0ut0inter(void)interrupt0using1
delay1ms(10)
if(k1==0)
{
delay1ms
(2)
if(k1==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
lcd_wdat(table6[0]);
delay
(1);
}
elseif(k2==0)
{
delay1ms
(2)
if(k2==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=100;
lcd_wdat(table6[1]);
}
elseif(k3==0)
delay1ms
(2)
if(k3==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=80;
lcd_wdat(table6[2]);
}
第15页共页
硬件实习报告
elseif(k4==0)
delay1ms
(2)
if(k4==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=60;
lcd_wdat(table6[3]);
}
elseif(k5==0)
delay1ms
(2)
if(k5==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=40;
lcd_wdat(table6[4]);
}
elseif(k6==0)
delay1ms
(2)
if(k6==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=30;
lcd_wdat(table6[5]);
}
motor_ffw(i);
elseif(k7==0)
delay1ms
(2)
if(k7==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
lcd_wdat(table6[0]);
delay
(1);
if(k2==0)
delay1ms
(2)
第16页共页
硬件实习报告
if(k2==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=100;
lcd_wdat(table6[1]);
}
elseif(k3==0)
delay1ms
(2)
if(k3==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=80;
lcd_wdat(table6[2]);
}
elseif(k4==0)
delay1ms
(2)
if(k4==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=60;
lcd_wdat(table6[3]);
}
elseif(k5==0)
delay1ms
(2)
if(k5==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=40;
lcd_wdat(table6[4]);
}
elseif(k6==0)
delay1ms
(2)
第17页共页
硬件实习报告
if(k6==0)
{
lcd_wcmd(0x80+0x40+0x07);
delay
(1);
i=30;
lcd_wdat(table6[5]);
}
lcd_wdat(table6[5]);
motor_ffz(i);
}
voidmain(void)
{
lcd_xianshi();
lcd_init();
out0init();
while
(1)
{
motor_ffw(i);
delay1ms(80)
motor_ffz(i);
delay1ms(80)
}
}
4.操作说明及结果分析
P1八位分别接开关开关的八个口,F208接38译码器,PO前四口分别接步进电机四口,F200接液晶
把程序烧写进去后运行,液晶第一行显示FX:
当K0拨上时液晶显示FX:
1,
步进电机顺时钟转,当K1拨上时液晶显示FX:
0,步进电机逆时针转,开关K2
—K7控制步进电机转速,(分6档),并正常显示在液晶上,K2上拨时,第二行显示SPEED:
1;K3上拨时显示SPEED:
2;K4上拨时显示SPEED:
3;K5上拨时显示SPEED:
4;K5上拨时显示SPEED:
4;K6上拨时显示SPEED:
7;K7上拨时显示
SPEED:
8;整个程序运行符合实习要求。
5.调试过程中遇到的问题与解决方法
第18页共页
硬件实习报告
在整个调试过程中遇到了很多问题,现在就几个比较有代表性和常见的问题加以说明。
首先,在本人调试步进电机速度时,刚开始遇到了电机只抖不转的现象,当时检查了整个程序,未发生程序上的错误,于是很纳闷。
不过再后来上网差了很多