标题: 请教关于步进电机实验的问题 [打印本页]

作者: 芙蓉焊料    时间: 2023-1-17 13:34
标题: 请教关于步进电机实验的问题
实验用的是28BYJ48型步进电机+ULN2003驱动,程序是正转一圈、停、又反转一圈。。。如此反复转动,但发现步进电机丢步严重,比如12点方向开始转动,一两小时下来位置就变了,有30度左右位移,请问是怎样造成的,谢谢!




/*******************************************************
28BYJ48型步进电机+ULN2003驱动
接线方式:
IN1 ---- P10
IN2 ---- P11
IN3 ---- P12
IN4 ---- P13
+   ---- +5V
-   ---- GND
*********************/
#include<reg52.h>    //12mhz
#define uchar unsigned char
#define uint  unsigned int
#define MotorData P1                    //步进电机接口定义
uchar phasecw[8] ={0x08,0x04,0x02,0x01};//正转,4拍 A-B-C-D
uchar phaseccw[8]={0x01,0x02,0x04,0x08};//反转
//ms延时函数
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
  for(j=0;j<112;j++);
}
//顺时针转动
void MotorCW(void)
{
uchar i;
for(i=0;i<4;i++)
  {
   MotorData=phasecw;
   Delay_xms(2);//转速调节
  }
}
//逆时针转动
void MotorCCW(void)
{
uchar i;
for(i=0;i<4;i++)
  {
   MotorData=phaseccw;
   Delay_xms(2);//转速调节
  }
}
//停止转动
void MotorStop(void)
{
MotorData=0x00;
}
//主函数
void main(void)
{
uint i;
Delay_xms(50);//等待系统稳定
while(1)
{
  for(i=0;i<512;i++)
  {
   MotorCW();   //顺时针转动
  }
  MotorStop();  //停止转动
  Delay_xms(1000);
  for(i=0;i<512;i++)
  {
   MotorCCW();  //逆时针转动
  }
  MotorStop();  //停止转动
  Delay_xms(1000);  
}
}





作者: xuyaqi    时间: 2023-1-17 20:43
步进电机有失步问题,脉冲与步进不一定一一对应,要位置准确,要有位置传感器。
作者: Hephaestus    时间: 2023-1-18 04:08
丢步就是驱动频率太高了。
作者: glinfei    时间: 2023-1-18 20:50
本帖最后由 glinfei 于 2023-1-19 09:12 编辑

沙发说的对,但你的原因是这个电机带减速齿轮,你按64写的,实际比64要少一点,我算了一下,一天会差在15度左右。
作者: lkc8210    时间: 2023-1-18 22:39


作者: ytchfp163    时间: 2023-1-18 23:10
加位置传感器,定时或每转一圈校准。
作者: 芙蓉焊料    时间: 2023-1-19 11:04
谢谢各位老师指导,改为八拍驱动方式就好多了
作者: 芙蓉焊料    时间: 2023-1-19 11:40

程序里有的,没粘贴上来
作者: 名字不是重点    时间: 2023-1-19 18:41
步进电机丢步很正常,何况还是你这种经过减速的电机!
要想不丢步,就要上闭环控制,加入转轴定位装置。不然软件再如何改,你这种无限正反转的,都是会丢步的。
作者: 434939575    时间: 2023-2-23 23:32
新人请教uchar phasecw[8] ={0x08,0x04,0x02,0x01};//正转,4拍 A-B-C-D  怎么知道代表哪几个接口 p1 p.....


// 四相的引脚定义
sbit A1 = P1^4; 我只知道这样的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1