急求单片机控制步进电机加减速/正反转的汇编程序
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方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
a. 单四拍 b. 双四拍 c八拍
图2.步进电机工作时序波形图
2.基于AT89C2051的步进电机驱动器系统电路原理
步进电机驱动器系统电路原理如图3:
图3 步进电机驱动器系统电路原理图
AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中L1为步进电机的一相绕组。AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。
图3中的RL1~RL4为绕组内阻,50Ω电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1~D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1~D4)而衰减掉,从而保护了功率管TIP122不受损坏。
在50Ω外接电阻上并联一个200μF电容,可以改善注入步进电机绕组的电流脉冲前沿,提高了步进电机的高频性能。与续流二极管串联的200Ω电阻可减小回路的放电时间常数,使绕组中电流脉冲的后沿变陡,电流下降时间变小,也起到提高高频工作性能的作用。
3.软件设计
#include<stdio.h>
#include<reg51.h>
void main()
{
unsigned int ZHENG[8]={0D0H,090H,0B0H,030H,070H,060H,0E0H,0C0H};
unsigned int FAN[8]={0A0H,0E0H,0C0H,0D0H,050H,070H,030H,0B0H};
void delay(unsigned int m);
int i;
while(1)
{
if(P3.7==0)
for(i=0;i<8;i++)
{
P1=ZHENG[i];
delay(100);
}
else
for(i=0;i<8;i++)
{
P1=FAN[i];
delay(100);
}
}
}
void delay(unsigned int m)
{
int j=0;
for(;j<=m;j++);
}
加减速的话,只需要改一下delay的参数就行了
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方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
a. 单四拍 b. 双四拍 c八拍
图2.步进电机工作时序波形图
2.基于AT89C2051的步进电机驱动器系统电路原理
步进电机驱动器系统电路原理如图3:
图3 步进电机驱动器系统电路原理图
AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中L1为步进电机的一相绕组。AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。
图3中的RL1~RL4为绕组内阻,50Ω电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1~D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1~D4)而衰减掉,从而保护了功率管TIP122不受损坏。
在50Ω外接电阻上并联一个200μF电容,可以改善注入步进电机绕组的电流脉冲前沿,提高了步进电机的高频性能。与续流二极管串联的200Ω电阻可减小回路的放电时间常数,使绕组中电流脉冲的后沿变陡,电流下降时间变小,也起到提高高频工作性能的作用。
3.软件设计
#include<stdio.h>
#include<reg51.h>
void main()
{
unsigned int ZHENG[8]={0D0H,090H,0B0H,030H,070H,060H,0E0H,0C0H};
unsigned int FAN[8]={0A0H,0E0H,0C0H,0D0H,050H,070H,030H,0B0H};
void delay(unsigned int m);
int i;
while(1)
{
if(P3.7==0)
for(i=0;i<8;i++)
{
P1=ZHENG[i];
delay(100);
}
else
for(i=0;i<8;i++)
{
P1=FAN[i];
delay(100);
}
}
}
void delay(unsigned int m)
{
int j=0;
for(;j<=m;j++);
}
加减速的话,只需要改一下delay的参数就行了
德鸿数智
2024-10-30 广告
2024-10-30 广告
步进位移台是北京德鸿数智科技有限责任公司提供的一种高精度运动控制设备。它采用先进的步进电机驱动技术,能够实现微小且精确的位移控制。该位移台具有定位准确、运动平稳、响应速度快等特点,适用于各种需要高精度定位的领域,如光学实验、半导体制造、精密...
点击进入详情页
本回答由德鸿数智提供
2011-03-22
展开全部
MOV 20H,#00H ;20H单元置初值,电机正转位置指针
MOV 21H,#00H ;21H单元置初值,电机反转位置指针
MOV P1,#0C0H ;P1口置初值,防止电机上电短路
MOV TMOD,#60H ;T1计数器置初值,开中断
MOV TL1,#0FFH
MOV TH1,#0FFH
SETB ET1
SETB EA
SETB TR1
SJMP $
;***********计数器1中断程序************
IT1P: JB P3.7,FAN ;电机正、反转指针
;*************电机正转*****************
JB 00H,LOOP0
JB 01H,LOOP1
JB 02H,LOOP2
JB 03H,LOOP3
JB 04H,LOOP4
JB 05H,LOOP5
JB 06H,LOOP6
JB 07H,LOOP7
LOOP0: MOV P1,#0D0H
MOV 20H,#02H
MOV 21H,#40H
AJMP QUIT
LOOP1: MOV P1,#090H
MOV 20H,#04H
MOV 21H,#20H
AJMP QUIT
LOOP2: MOV P1,#0B0H
MOV 20H,#08H
MOV 21H,#10H
AJMP QUIT
LOOP3: MOV P1,#030H
MOV 20H,#10H
MOV 21H,#08H
AJMP QUIT
LOOP4: MOV P1,#070H
MOV 20H,#20H
MOV 21H,#04H
AJMP QUIT
LOOP5: MOV P1,#060H
MOV 20H,#40H
MOV 21H,#02H
AJMP QUIT
LOOP6: MOV P1,#0E0H
MOV 20H,#80H
MOV 21H,#01H
AJMP QUIT
LOOP7: MOV P1,#0C0H
MOV ; 20H,#01H
MOV 21H,#80H
AJMP QUIT
;***************电机反转*****************
FAN: JB 08H,LOOQ0
JB 09H,LOOQ1
JB 0AH,LOOQ2
JB 0BH,LOOQ3
JB 0CH,LOOQ4
JB 0DH,LOOQ5
JB 0EH,LOOQ6
JB 0FH,LOOQ7
LOOQ0: MOV P1,#0A0H
MOV 21H,#02H
MOV 20H,#40H
AJMP QUIT
LOOQ1: MOV P1,#0E0H
MOV 21H,#04H
MOV 20H,#20H
AJMP QUIT
LOOQ2: MOV P1,#0C0H
MOV 21H,#08H
MOV 20H,#10H
AJMP QUIT
LOOQ3: MOV P1,#0D0H
MOV 21H,#10H
MOV 20H,#08H
AJMP QUIT
LOOQ4: MOV P1,#050H
MOV 21H,#20H
MOV 20H,#04H
AJMP QUIT
LOOQ5: MOV P1,#070H
MOV 21H,#40H
MOV 20H,#02H
AJMP QUIT
LOOQ6: MOV P1,#030H
MOV 21H,#80H
MOV 20H,#01H
AJMP QUIT
LOOQ7: MOV P1,#0B0H
MOV 21H,#01H
MOV 20H,#80H
QUIT: RETI END
MOV 21H,#00H ;21H单元置初值,电机反转位置指针
MOV P1,#0C0H ;P1口置初值,防止电机上电短路
MOV TMOD,#60H ;T1计数器置初值,开中断
MOV TL1,#0FFH
MOV TH1,#0FFH
SETB ET1
SETB EA
SETB TR1
SJMP $
;***********计数器1中断程序************
IT1P: JB P3.7,FAN ;电机正、反转指针
;*************电机正转*****************
JB 00H,LOOP0
JB 01H,LOOP1
JB 02H,LOOP2
JB 03H,LOOP3
JB 04H,LOOP4
JB 05H,LOOP5
JB 06H,LOOP6
JB 07H,LOOP7
LOOP0: MOV P1,#0D0H
MOV 20H,#02H
MOV 21H,#40H
AJMP QUIT
LOOP1: MOV P1,#090H
MOV 20H,#04H
MOV 21H,#20H
AJMP QUIT
LOOP2: MOV P1,#0B0H
MOV 20H,#08H
MOV 21H,#10H
AJMP QUIT
LOOP3: MOV P1,#030H
MOV 20H,#10H
MOV 21H,#08H
AJMP QUIT
LOOP4: MOV P1,#070H
MOV 20H,#20H
MOV 21H,#04H
AJMP QUIT
LOOP5: MOV P1,#060H
MOV 20H,#40H
MOV 21H,#02H
AJMP QUIT
LOOP6: MOV P1,#0E0H
MOV 20H,#80H
MOV 21H,#01H
AJMP QUIT
LOOP7: MOV P1,#0C0H
MOV ; 20H,#01H
MOV 21H,#80H
AJMP QUIT
;***************电机反转*****************
FAN: JB 08H,LOOQ0
JB 09H,LOOQ1
JB 0AH,LOOQ2
JB 0BH,LOOQ3
JB 0CH,LOOQ4
JB 0DH,LOOQ5
JB 0EH,LOOQ6
JB 0FH,LOOQ7
LOOQ0: MOV P1,#0A0H
MOV 21H,#02H
MOV 20H,#40H
AJMP QUIT
LOOQ1: MOV P1,#0E0H
MOV 21H,#04H
MOV 20H,#20H
AJMP QUIT
LOOQ2: MOV P1,#0C0H
MOV 21H,#08H
MOV 20H,#10H
AJMP QUIT
LOOQ3: MOV P1,#0D0H
MOV 21H,#10H
MOV 20H,#08H
AJMP QUIT
LOOQ4: MOV P1,#050H
MOV 21H,#20H
MOV 20H,#04H
AJMP QUIT
LOOQ5: MOV P1,#070H
MOV 21H,#40H
MOV 20H,#02H
AJMP QUIT
LOOQ6: MOV P1,#030H
MOV 21H,#80H
MOV 20H,#01H
AJMP QUIT
LOOQ7: MOV P1,#0B0H
MOV 21H,#01H
MOV 20H,#80H
QUIT: RETI END
追问
有没有加减速的啊 关键是加减速
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询