找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1271|回复: 9
收起左侧

请教关于步进电机实验的问题

[复制链接]
ID:891876 发表于 2023-1-17 13:34 | 显示全部楼层 |阅读模式
实验用的是28BYJ48型步进电机+ULN2003驱动,程序是正转一圈、停、又反转一圈。。。如此反复转动,但发现步进电机丢步严重,比如12点方向开始转动,一两小时下来位置就变了,有30度左右位移,请问是怎样造成的,谢谢!

51hei图片_1.jpg


/*******************************************************
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);  
}
}




回复

使用道具 举报

ID:94031 发表于 2023-1-17 20:43 | 显示全部楼层
步进电机有失步问题,脉冲与步进不一定一一对应,要位置准确,要有位置传感器。
回复

使用道具 举报

ID:883242 发表于 2023-1-18 04:08 | 显示全部楼层
丢步就是驱动频率太高了。
回复

使用道具 举报

ID:844772 发表于 2023-1-18 20:50 来自手机 | 显示全部楼层
本帖最后由 glinfei 于 2023-1-19 09:12 编辑

沙发说的对,但你的原因是这个电机带减速齿轮,你按64写的,实际比64要少一点,我算了一下,一天会差在15度左右。
回复

使用道具 举报

ID:161164 发表于 2023-1-18 22:39 | 显示全部楼层
2023-01-18_223750.png
回复

使用道具 举报

ID:1056573 发表于 2023-1-18 23:10 | 显示全部楼层
加位置传感器,定时或每转一圈校准。
回复

使用道具 举报

ID:891876 发表于 2023-1-19 11:04 | 显示全部楼层
谢谢各位老师指导,改为八拍驱动方式就好多了
回复

使用道具 举报

ID:891876 发表于 2023-1-19 11:40 | 显示全部楼层

程序里有的,没粘贴上来
回复

使用道具 举报

ID:824490 发表于 2023-1-19 18:41 | 显示全部楼层
步进电机丢步很正常,何况还是你这种经过减速的电机!
要想不丢步,就要上闭环控制,加入转轴定位装置。不然软件再如何改,你这种无限正反转的,都是会丢步的。
回复

使用道具 举报

ID:1016815 发表于 2023-2-23 23:32 | 显示全部楼层
新人请教uchar phasecw[8] ={0x08,0x04,0x02,0x01};//正转,4拍 A-B-C-D  怎么知道代表哪几个接口 p1 p.....


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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表