急求单片机控制步进电机加减速正反转的汇编程序

急求单片机控制步进电机加减速正反转的汇编程序,第1张

四相步进电机原理图及其驱动器的软、硬件设计

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方向转动。

四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2a、b、c所示:

a 单四拍 b 双四拍 c八拍

图2步进电机工作时序波形图

2基于AT89C2051的步进电机驱动器系统电路原理

步进电机驱动器系统电路原理如图3:

图3 步进电机驱动器系统电路原理图

AT89C2051将控制脉冲从P1口的P14~P17输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中L1为步进电机的一相绕组。AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。

图3中的RL1~RL4为绕组内阻,50Ω电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1~D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1~D4)而衰减掉,从而保护了功率管TIP122不受损坏。

在50Ω外接电阻上并联一个200μF电容,可以改善注入步进电机绕组的电流脉冲前沿,提高了步进电机的高频性能。与续流二极管串联的200Ω电阻可减小回路的放电时间常数,使绕组中电流脉冲的后沿变陡,电流下降时间变小,也起到提高高频工作性能的作用。

3软件设计

#include<stdioh>

#include<reg51h>

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(P37==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的参数就行了

当P30 和P31口信号同时为低电平的时候,发送一个转动信号给步进电机,与此同时,如果P32为低电平而P33为高电平的时候,步进电机开始正转。若当P33变成低电平,P32为高电平的时候,停止转动,等待下一次的转动信号。既当P30和P31口的信号同时又为低电平的时候,因为此时P32为高电平,P33为低电平,所以步进电机开始反转。当转到P32为低电平,P33为高电平的时候,则停止旋转,又等待下一次的转动信号。就是这样反复正反转。P32为低电平,P33为高电平,正转。P32为高电平,P33为低电平,反转。转动的必要条件是P30和P31同时为低电平。 P30、P31、P32、P32接的都是霍尔传感器。步进电机为三相六线的。

答得好加100分!!!谢谢各位大神!!

你先定义正反向控制数组

void control()

{

if(温度>=25)

do

{

正转(圈数)

}while(!(圈数=8))

if(温度<25)

do

{

反转(圈数)

}while(!(圈数=8))

}

void display(uint temp)

{

尽量避免浮点数运算

显示数码管要专门用一位显示一个点

}

void main()

{

system_init()

while(1)

{

control();

display(tem);

}

}

架构大概是这样了,你什么都没给,帮你写了 你还得改,还是自己参照原理图写吧。

望采纳,并祝早日成功!

以上就是关于急求单片机控制步进电机加减速/正反转的汇编程序全部的内容,包括:急求单片机控制步进电机加减速/正反转的汇编程序、AT89C51单片机控制三相六拍步进电动机正反转的程序!!! 具体要求看问题补充,跪求高手求救!、求单片机控制步进电机正反转圈数程序。。。。哪位高手教教我,在线等。。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9486646.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存