用51单片机发脉冲给驱动器来控制步进电机,接线一切正常,点击出现间歇性停转

间隔时间大概2秒左右,停转时间大概小于0.4秒(估计)改变脉冲周期无法解决,将驱动器调至测试模式(驱动器内部给自己发脉冲)电机运转正常,程序如下,求高手,不胜感激!!!

#include <reg52.h>
#include <intrins.h>
#define ui unsigned int
#define uc unsigned char
ui j;
sbit xp=P1^7;
void main()
{
xp=0;
for(j=0;j<2;j++)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
xp=1;
for(j=0;j<6;j++)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
while(1);
}
上面的程序不对,我粘贴的,下面才是
#include <reg52.h>
#include <intrins.h>
#define ui unsigned int
#define uc unsigned char
ui j;
sbit xp=P1^7;
void main()
{while(1)
{xp=0;
for(j=0;j<2;j++)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
xp=1;
for(j=0;j<6;j++)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
}
}

看了你的程序,你应该没有帖完整程序吧? 你贴出的部分就是一个用Nop延时控制方波频率的程序,没问题,关键是你的其他中断程序(比如串口接收)会打破这个时间,如果你有其他中断程序也贴出来,如果没有,再查查你的OC输出电路的波形.
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-29
while(1),好像放错位置了,要放到xp=0前,后面的也要全部用{ }括起来再试一试啊追问

多谢提醒!!1

追答

调试好了,记得赏分哦!!

第2个回答  2012-03-30
1.改变脉冲周期可以用定时器的
第3个回答  2012-04-01
为什么不用定时中断呢?那样会很方便的

用51单片机发脉冲给驱动器来控制步进电机,接线一切正常,点击出现间歇...
看了你的程序,你应该没有帖完整程序吧? 你贴出的部分就是一个用Nop延时控制方波频率的程序,没问题,关键是你的其他中断程序(比如串口接收)会打破这个时间,如果你有其他中断程序也贴出来,如果没有,再查查你的OC输出电路的波形.

关于51单片机驱动l298n控制步进电机。步进电机不转只抖得问题
如果程序无问题,应是步进电机四条输入线接错了。将A+、A-或B+、B-其中一组的两条线对调(如A+、A-对调或B+、B-对调)便行。对调后如果转动正常了,而正反转反过来时,再将两组线的+和-对调。

求用51型的单片机控制步进电机,要求步进电机转90度后停5秒,再转90度
驱动器有两种,一种是直接控制各个绕组的,如有4个绕组,就要4个IO引脚信号,驱动只是功率放大 另一种是带脉冲分配的,单片机发过来一串方波脉冲,脉冲个数决定转动的步数,另外输出一个控制正转和反转的信号 这两种驱动器的单片机程序当然是不一样的 用C语言编程很简单:(第一种驱动器)for(i=0;i<...

给个51单片机控制步进电机程序 正转3秒停止1秒反转3秒停止1秒 ,循环...
如果工作精密度高,干脆搞个检查电路就是检查转的是否到位,如果不到位就报警或者其他的!一般用3个脉冲一圈的!正电压正转,反电压反转!通过三极管开关控制!大胆去设计呢,设计的不好自己在不断的更新!当更新到一定程度,恭喜你,可以拿去卖啦......

怎样用51单片机接两相步进电机驱动器来控制步进电机?
脉冲信号就是像流水灯差不多,用两个口。例如:用到P1^0和P1^1;把P10制低电平,P11制高电平,延时一段时间后,P10制高电平 P11制低电平,如此循环,看程序:include "reg52.h"sbit P10=P1^0;sbit P11=P1^1;void delay(unsigned int x)P10=0;P11=1;delay(1000);P10=1;P11=0;delay(...

51单片机,如何给一个指令控制步进电机转动90度,再给另外一个指令,反转...
1、首先看看步进驱动器的细分设定,找出转动一圈需要的脉冲个数,再计算出转动90°需要的脉冲个数N;2、根据接线,使单片机的IO端口输出高电平或低电平,控制转动方向;3、根据需求的转动速度,设定定时器的定时常数,启动定时;4、在定时器的中断程序中,取反IO端口,如CPL P1.1,并计数。使单片机...

步进电机的驱动电路与51单片机的连接电路图
51单片机的引脚随处都可以查到,P0、P1、P2随便选择一个作为脉冲发送口,在程序开始前定义好就可,驱动器一般都会分配脉冲,看你用的是哪一种,有的驱动器有电流可调档,也就是相电流细分。后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL...

51单片机控制步进电机
下面是程序:include <reg51.h> \/\/选用晶振11.0592MHz unsigned int m=0,n=0; \/\/设置循环的周期 unsigned char start=0,t0temp=0;sbit Y0=P0^0; \/\/控制步进电机的管脚 delay(){ unsigned char i,j;for(i=m;i>0;i--)for(j=n;i>0;j--);} main(){ \/\/自检测T0时间设...

有问题请教,用51单片机来控制步进电机加压,压力传感器反馈给单片机...
点”)。解决的方法是:1》在要求不高的情况下,用弹簧连接丝杆与传感器,并且丝杆导程尽量选小点,步进驱动器细分尽量高点,弹簧的弹性系数尽量小点。2》在要求较高的场合,利用步进电机调整压缩空气压力(动态调整),再用气缸去推动传感器。我有几款产品就是利用这两种方法来解决的,效果感觉良好。

求51单片机控制步进电机程序
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 i...

相似回答