
如图,这个就是一个步进电机的正反转的运行,Y0接步进驱动器的脉冲,Y1接步进驱动器的方向,M0为ON时正转,M1为ON时反转,D0是脉冲的频率,D1是脉冲的个数。
移动速度和脉冲频率有关,在细分数一定的条件下,频率越高速度越快,行走的距离和脉冲个数有关,脉冲个数越多,行走距离越长,(在三菱这个指令中,脉冲个数为0时,是一直运行,相当于无限个数),具体的移动速度和行走距离得根据你的设置(频率,细分数,脉冲个数等)和硬件(包括步进电机的步距角,丝杆的丝距,齿轮组的齿轮比,齿轮带的传送比等)来调节。
望采纳。。。。
给你一段简单的程序代码,控制步进电机的,不过你要好好看看程序的编写,以适应你的硬件(主要是连线),你可以在实现这个的基础上实现你所说的目标,个人觉得你参考这个程序然后自己实现你所说的功能比较好:
#include
unsigned
char
code
f_rotation[4]={0x08,0x10,0x20,0x40};//正转表格
unsigned
char
code
b_rotation[4]={0x40,0x20,0x10,0x08};//反转表格
void
delay(unsigned
int
i)//延时
{
while(--i);
}
main()
{
unsigned
char
i;
while(1)
{
for(i=0;i<4;i++)
//4相
{
p1=f_rotation[i];
//输出对应的相
可以自行换成反转表格
delay(500);
//改变这个参数可以调整电机转速
}
}
}
我没有写过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按下触发一次,标志位取反
}
PLC步进控制程序可能真接控制伺服电机的。
伺服电机(servo motor )是指在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置。
伺服电机可使控制速度,位置精度非常准确,可以将电压信号转化为转矩和转速以驱动控制对象。伺服电机转子转速受输入信号控制,并能快速反应,在自动控制系统中,用作执行元件,且具有机电时间常数小、线性度高、始动电压等特性,可把所收到的电信号转换成电动机轴上的角位移或角速度输出。分为直流和交流伺服电动机两大类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。
#include <reg52h>
sbit P0_0=P0^0;
sbit P0_1=P0^1;
unsigned char codes[2][8]={{0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}, //9,18,36,45,54,63,72,81度 顺时针
{0x0b,0x09,0x0d,0x0c,0x0e,0x06,0x07,0x03}}; //9,18,36,45,54,63,72,81度 逆时针
unsigned char counts,flag,t;
// 度数,正/反转,速度控制
delay(unsigned char x) //延时
{
unsigned char i;
for( i=0;i<x;i++);
}
main()
{
TMOD=0x01; //定时器初始化
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(P0_0==0) //判断正转按键是否按下
{
delay(5);
if(P0_0==0) flag=0; //判断是否真正按下
}
if(P0_1==0) //判断反转按键是否按下
{
delay(5);
if(P0_1==0) flag=1; //判断是否真正按下
}
}
}
void motor() interrupt 1
{
t++; //控制速度
if(t==8)
{
t=0;
P1=codes[flag][counts]; //转动
counts++;
if (counts==8) counts=0; //角度重置
}
TF0=0; //重新计时
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
}
步进电机编程一般有几点。细分数,结构比例,加速度,减速度。最大频率限值,最小起跳频率。
1:原点。
2:速度,距离(相对位置,绝对位置)。速度模式
3:停止。等待
如果多轴的或开关,传感器比较多的位置控制就比较复杂了。有很多变量和跳转。这取决于控制器功能和底层程序开发和运用。
根据你问的情况,应该是写上层程序。中层都已经做好了,写程序需要对使用的芯片和代码非常熟悉,逻辑关系比较了解,运动结构也有一定的认知。
给你一段电机走一步的函数吧!
/
函数名:步进电机正反转一步
调 用:MOTOR()
参 数:Mot=0,电机反转一步 ,Mot=1电机正转
返回值:无
结 果:电机坐标 Motor 自动加一或减一,电机走一步
/
void MOTOR(void){ //步进电机正反转一步子程序
code unsigned char MOTOR_DB[]={0x00,0xb0,0x90,0xd0,0x50,0x70,0x60,0xe0,0xa0,0x00};//定义电机输出编码
unsigned char i;
MOIC=0; //开电机电流
i=0; //电机输出编码初值设00
CBB=10; //设减小电机电流时间设为10
if(Mot==1)Mo_data++;
else{if(Mo_data!=0)Mo_data--;}//如果电机反转,并且当前电机坐标不小于1时,坐标减一
while(1)
{
if(Mot)Motor_t ++;//当前电机输出编码加一指向下一编码
else Motor_t --;//电机输出编码减一
i=MOTOR_DB[Motor_t]; //取电机输出编码
if(i!=0)break;
else{
if(Mot)Motor_t=0;
else Motor_t=9;
}
}
i=i&0xf8; //屏蔽低3位,高5位不变
M_data=M_data&0x07;//屏蔽P1口的高5位,低3位不变
M_data=M_data|i; //高5位送P1口,P1口的低3位不变
}
以上就是关于三菱plc控制步进电机程序全部的内容,包括:三菱plc控制步进电机程序、求单片机c语言控制步进电机调速程序、步进电机的程序该怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)