导航:首页 > 编程语言 > 步进电机速度控制程序

步进电机速度控制程序

发布时间:2023-09-15 04:07:06

⑴ 西门子s7-200plc控制步进电机速度与正反转怎么编程

1、主程序先正转,等到正转完了就中断,中断中接通个辅助触点(M0.X),当M.0X闭合,住程序中的反转开始运做。这样子就OK了。

2、用PTO指令让Q0.0 OR Q0.1高速脉冲,另一个点如Q0.2做方向信号,就可以控制正反转了,速度快慢就要控制输出脉冲周期了,周期越短速度越快,如果你速度很快的话请考虑缓慢加速,不然它是启动不了的,如果方向也变的快的话就要还做一个缓慢减速,不然它振动会蛮厉害,而且也会失步。

⑵ 请大侠们帮忙编一个步进电机控制程序。

#include <REGX52.H>
bit aj = 0;
sbit clk1=P1^0; //定义X脉冲输出位
sbit dir1=P1^1; //定义X正反转控制位
sbit ena1=P1^2; //定义Y使能控制位
sbit x1 =P1^6;
unsigned int k=0,x11,y11,cycle=2000,yk,xk,xk1;//定义开始控制位
unsigned char x = 1;
unsigned int kx;

void delay(unsigned int i)
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=300;k>0;k--);
}

void inistartx(void) //X初始化函数

{
xk=0;
dir1=1;
cycle=9600;
kx=300;
TR0=1;
P2_0=0;
while(xk1<400);
TR0=0;
kx=0;

delay(500);

xk=0;
cycle=9600;
dir1=0;
xk1=0;
kx=700;
TR0=1;
while(x==1&&xk1<801); //
TR0=0;

delay(500);
cycle=9600;
xk1=0;
dir1=1;
kx=300;
TR0=1;
while(xk1<400);
TR0=0;
kx=0;
clk1=0;
xk1=0;

}
void exint0_init( )
{
IT0 =1; //下降沿产生中断
EX0 =1; //使能外部中断
EA =1; //使能全局中断

}
void initime0(void) //初始化定时器0
{
TH0=0xf8;
TL0=0x30;
}
void time0() interrupt 1 //定时器0中断函数
{
if(xk1<100){cycle=cycle-80;}
if(xk1>=100&&xk1<=kx){cycle=1600;}
if(xk1>kx) {cycle=cycle+80;}
TH0=(65536-cycle)/256; //定时5000次= 5000us = 5 ms 65536-5000=60536=0xec78
TL0=(65536-cycle)%256;
//TH0=0xf8; //定时器1为X或者Y提供脉冲数
//TL0=0x30; //频率500cycle=2000 ; cycle=2500=》频率=400
xk1++;
clk1=~clk1;
k++;
}

void exint0() interrupt 0 //接近开关接P3.2,发生中断停止
{
TR0=0;
x=0;
ena1=0;

}

void main (void)
{
x1=1;
TMOD = 0x01;
IE=0xAF; //EA - ET2 - ES - ET1 - EX1- ET0 - EX0 允许(总中断EA) ET2 ET1 ET0中断
initime0();
exint0_init();
inistartx();
TR2=1;
while(aj ==0);
inistartx();
TR1=1;

//IP= 0x00; //- - PT2 PS PT1 PX1 PT0 PX0
////TCON =0x00; //TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
//T2CON =0x00; //TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T CP/RL2
while(1){

}
}

⑶ 51单片机C语言程序按键控制步进电机转速

sbit K1=P1^0;
sbit K2=P1^1;
char y=0;
while(1)
{
pangan();
for(i=0;i<4;i++) //4相来
{
/*P1=F_Rotation[i]; //输出对应的相 可以自自行换成反转表格
Delay(500); //改变这个参数可以调整电机转速
Delay(5000);*/
P1=B_Rotation[i];
Delay(265+y);
P1=F_Rotation[i];
Delay(265+y);

}
}
void pangan()
{
if(K1==0)
{ y++; //加
while(~k1)
}
if(K2==0)
{ y--;
while(~k2); //减
}
}
}
没有下上限 要是调的话 需要判断显示延时时间

阅读全文

与步进电机速度控制程序相关的资料

热点内容
有什么女生主动聊天的app 浏览:436
有哪些可以督促自己的app 浏览:244
用USB传输视频文件夹显示为空 浏览:710
恢复文件软件免费版手机 浏览:648
lg怎么隐藏文件 浏览:836
苹果免费读书app推荐 浏览:497
刘骏微信 浏览:113
书旗旧版本80 浏览:467
教编程考什么证 浏览:990
下载编程猫后哪里有客服 浏览:13
如何编辑歌曲文件格式 浏览:638
cf无限领取cdk工具 浏览:350
如何让手机文件保存到电脑上 浏览:459
sa数据库默认密码是多少 浏览:191
电脑正在查找文件 浏览:541
一个文件盒省内寄顺丰多少钱 浏览:41
诛仙62坐骑怎么升级到63 浏览:926
linux以日期查看日志记录 浏览:446
工业大数据是什么东西 浏览:881
魅族note3怎么重置网络 浏览:510

友情链接