步进电机怎么编写控制程序

步进电机怎么编写控制程序,第1张

步进电机编程一般有几点。细分数,结构比例,加速度,减速度。最大频率限值,最小起跳频率。

1:原点。

2:速度,距离(相对位置,绝对位置)。速度模式

3:停止。等待

如果多轴的或开关,传感器比较多的位置控制就比较复杂了。有很多变量和跳转。这取决于控制器功能和底层程序开发和运用。

根据你问的情况,应该是写上层程序。中层都已经做好了,写程序需要对使用的芯片和代码非常熟悉,逻辑关系比较了解,运动结构也有一定的认知。

我没有写过PLC的,只写过单片机的哦你网上搜下,蛮多的,主要是理解了就好步进嘛,就是你给它一个突变的信号,它就走一步的,不然就不叫步进撒也就是你触发它一下,它跑一步,且只跑一步的哦懂了吧?

内容:1、本程序用于测试4相步进电机常规驱动

2、需要用跳帽或者杜邦线把信号输出端和对应的步进电机信号输入端连接起来

3、速度不可以调节的过快,不然就没有力矩转动了

4、按s4(设置成独立按键模式)可以控制正反转

------------------------------------------------/

#include <reg52h>

bit Flag;//定义正反转标志位

unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正转表格

unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反转表格

//

/ 延时函数 /

//

void Delay(unsigned int i)//延时

{

while(--i);

}

//

/ 主函数 /

//

main()

{

unsigned char i;

EX1=1; //外部中断0开

IT1=1; //边沿触发

EA=1; //全局中断开

while(!Flag)

{

P0=0x71;//显示 F 标示正转

for(i=0;i<4;i++) //4相

{

P1=F_Rotation[i]; //输出对应的相 可以自行换成反转表格

Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大

}

}

while(Flag)

{

P0=0x7C;//显示 b 标示反转

for(i=0;i<4;i++) //4相

{

P1=B_Rotation[i]; //输出对应的相

Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大

}

}

}

//

/ 中断入口函数 /

//

void ISR_Key(void) interrupt 2 using 1

{

Delay(300);

Flag=!Flag; //s3按下触发一次,标志位取反

}

假设P0口低4位接步进电机4个绕组,高电平绕组通电,程序如下:

whille(1)

{P0=1;delayms(5);

P0=2;delayms(5);

P0=4;delayms(5);

P0=8;delayms(5);}

反转 的话, 就按 8 4 2 1 顺序输出。

#include <reg51h> //51芯片管脚定义头文件

#include <intrinsh>//内部包含延时函数 _nop_();

#define uchar unsigned char

#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};

uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

//

/

/ 延时t毫秒

/ 110592MHz时钟,延时约1ms

/

//

void delay(uint t)

{

uint k;

while(t--)

{

for(k=0; k<125; k++)

{ }

}

}

//

/

/步进电机正转

/

//

void motor_ffw(uint n)

{

uchar i;

uint j;

for (j=0; j<12n; j++) //转1×n圈

{

for (i=0; i<8; i++) //一个周期转30度

{

P1 = FFW[i]; //取数据

delay(15); //调节转速

}

}

}

//

/

/步进电机反转

/

//

void motor_rev(uint n)

{

uchar i;

uint j;

for (j=0; j<12n; j++) //转1×n圈

{

for (i=0; i<8; i++) //一个周期转30度

{

P1 = REV[i]; //取数据

delay(15); //调节转速

}

}

}

/

主程序

/

main()

{

while(1)

{

motor_ffw(5); //电机正转

delay(5000); //换向延时

//motor_rev(5); //电机反转

//delay(1000); //换向延时

}

}

//

这是8086微机原理的实验吧,我没有相同的硬件环境,只能给你说一下思路。

首先,步进电机的控制就是在两组不同的线圈上加脉冲信号,对于你提供的实验资料来说,就是向8255的B口发送相应的数据。你可以定义两个内存变量,一个正转,一个反转。当要正转时把正转变量传送给控制过程,反转时把反转变量传送给控制过程。这样就可以控制正反转了。

其次延时30秒,这可以通过做循环程序实现。自己编写一个过程就可以。

第三,写个控制程序过程,设置一个内存变量,当该变量为零时把控制电机正转,非0时,反转,调用延时程序,改变这个变量值,通过取反 *** 作,使其值在0和1之间不断变化,电机就会按要求转动。

module top(data_a,data_b,out_h,out_l);

input [3:0]data-a,data_b;

outputr [3:0]out_h,out_l;

wire [7:0] temp;

assign temp=data_adata_b;

assign out_h<=temp/10;

assign out_l<=temp%10;

endmodule ;

以上就是关于步进电机怎么编写控制程序全部的内容,包括:步进电机怎么编写控制程序、步进电机的程序该怎么写、单片机控制步进电机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10209251.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存