- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
攀枝花学院电信学院专业基础综合实验
[四相步进电机控制器设计]
学生姓名:
学生学号:
院(系): 电 信 学 院
年级专业:
指导教师:
二〇一二年十二月
第一章 设计准备
1、课程设计的目的
检查学生对本门课程所学知识的掌握程度及对知识的灵活的运用情况。
检查学生对具体问题的分析能力和解决问题的能力。
锻炼学生的实际设计能力。
加强学生对单片机在应用设计中的感性认识,为日后的单片机应用打基础。
2、课程设计的内容和要求
作出单片机的硬件设计,画出硬件连接图
设计软件,在实验室用示波器进行检查
第二章 四项步进电机
四项步进电机设计框图:
1.1步进电机的控制
1).换相顺序控制 通电换相这一过程称为脉冲分配。例如:混合式步进电机的工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断控制步进电机的转向 如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转控制步进电机的速度如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。
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方向转动。 四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。 单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图.a、b、c所示:
单四拍 b. 双四拍 c八拍 步进电机工作时序波形图
对步进电机四个绕组依次实现如下方式的循环通电控制:单四拍运行:正转A-B-C-D;反转D-C-B-A双四拍运行:正转AB-BC-CD-DA;反转DC-CB-BA-AD
八拍运行正转A-AB-B-BC-C-CD-D-DA
外部中断设计
外部中断所要完成的工作是根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数),这样就改变了步进电机的输出脉冲频率,也就是改变了电机的转速。速度增加按钮S2为INT0中断,其程序流程为原数据,当值等于7时,不改变原数值返回,小于7时,数据加1后返回;速度减少按钮S3,当原数据不为0,减1保存数据,原数据为0则保持不变。程序流程图如图所示。
程序如下:
#include reg51.h
#define uint unsigned int
sbit k1=P3^4; //启动开关
sbit k2=P3^5; //换向开关
sbit s2=P3^2; //加速按钮
sbit s3=P3^3; //减速按钮
void isr_int0(void);//外部中断0中断服务函数声明
void isr_int1(void);
void zd_t0ist(void);
uint speed,count,r1,i,t,k;
main()
{k=0;
t=0;
r1=0x11 ;
speed=0;
count=1;
TMOD=0x01;
ET0=1;
EA=1;
EX0=1;
EX1=1;
TH0=0xcf;
TL0=0x2c;
for(;;)
{if(k1==0)
{P0=0xff;
P2=0xff;
speed=0;
TR0=0;
}
else
{
if(k2==0)
P0=0xbf;
else P0=0xf9;
if(speed==0)
{P2=0xc0;
TR0=0;
}
else TR0=1;
}
}
}
void isr_int0(void) interrupt 0
{
if(speed7)
speed=speed+1;
while(s2==0)
{for(i=0;i10;i++);}
}
void isr_int1(void) interrupt 2
{
if(speed0)
speed=speed-1;
while(s3==0)
{for(i=0;i10;i++);}
}
void zd_t0is
文档评论(0)