搜索
bottom↓
回复: 5

有图有真相 ULN2003A驱动 24BYJ48步进电机 失步的问题

[复制链接]

出0入0汤圆

发表于 2012-9-10 11:01:50 | 显示全部楼层 |阅读模式
本帖最后由 LGY910 于 2012-9-10 16:28 编辑

主控芯片 STC12C5A08-AD    1T        贴片
驱动芯片 ULN2003A                   贴片
步进电机 24BYJ48 - 12V

问题如下
       1.驱动步进电机时有失步现象,造成角度错误。
已考虑过问题
       1.启动频率过高               (频率减速启动也还是有失步现象,说明书说500PPS,减速到250PPS启动依然失步)
       2.负载过重                   (负载基本可以不考虑,无负载)
       3.电压电流不够               (额定电压12V,实际电压15V,电流测试过ULN2003双通道驱动一相,依然失步)
       4.相序,拍数不对             (相序再三测试过没问题用的 4相4拍 )
       5.IO口设置不对               (设置的是强上拉,无上拉电阻)

  

示波器观察步进电机波形如下,这个是正确的



波形图最后有缺口,这个波形有点不对,最后有缺口




原理图如下  

感觉问题就出在波形缺口上
请各位老大看一看怎么解决,谢谢各位。

驱动程序如下
#include "stc5a08ad.h"
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

code uchar   tab[4]  = {0x06,0x03,0x09,0x0c};
code uchar  tab1[8] = {0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar angle1 = 0;

/*--------------步进电机参数-----------------*/

uint cnt5;
uchar sl;

sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;


void Io_Init(void)
{
        P0M0 = 0xf0;
        P0M1 = 0x00;

        P0 &= 0x0f;                  
}


void dj_delay(void)   // 2ms
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=222;b>0;b--)
            for(a=12;a>0;a--);
}
void dj_run(void)
{
        if((sl == 1) && cnt5)
        {
                cnt5--;
                if(angle1 < 3)angle1++;
                else              angle1=0;               
                P0 = 0x0f;
                _nop_();
                _nop_();
                P0 |= tab[angle1]<<4;  
        }

        else if((sl == 0) && cnt5)
        {                                                                                                                                                                                                                                                   
                cnt5--;
                if(angle1 > 0)angle1--;
                else              angle1=3;       
                P0 = 0x0f;        
                _nop_();
                _nop_();
                P0 |= tab[angle1]<<4;
        }

        if(cnt5 == 0)
        {
                P0 &= 0x0f;                
        }       
        dj_delay();                                       
}

void delay(void)   //误差 -0.000000000111us
{
    unsigned char a,b,c;
    for(c=71;c>0;c--)
        for(b=168;b>0;b--)
            for(a=250;a>0;a--);
}


/*------------------------------------*/               
void main(void)
{               
  Io_Init();
  while(1){
           cnt5 = 160;
        sl = 0;
        while(cnt5)dj_run();
        delay();

        cnt5 = 160;
        sl = 1;
        while(cnt5)dj_run();
        delay();
             }
}










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2012-9-10 11:19:25 | 显示全部楼层
本帖最后由 LGY910 于 2012-9-10 14:38 编辑

饿希望有高手路过指导一下。。上面那个图发错了,有缺口的是反转,无缺口的是正转。。。十分不解为何正反转波形却不一样。。
只有看的没有回的???是不是觉得太低级了??

出0入0汤圆

 楼主| 发表于 2012-9-10 20:20:53 | 显示全部楼层
算了。。今天下午仔细对比了波形,发现其实缺口不是主要因素,现在能做的是,尽量做曲线加速。。但是效果不明显,暂时没想出很好的办法,只有做换向补偿,以及其他补偿一点。。
那天有高手路过了告诉我终极办法。。。谢谢了我QQ 506472517

出0入0汤圆

发表于 2013-12-12 15:13:32 | 显示全部楼层
我也在学步进电机 ,正好可以参考一下,谢谢分享!

出0入0汤圆

发表于 2016-1-19 16:02:13 | 显示全部楼层
大哥你好!我问下你的那个驱动电路输出要上拉12v电阻了吗?怎么我输入高输出电压估计也就0.3v输入低也是低?

出0入0汤圆

发表于 2016-1-19 16:17:24 | 显示全部楼层
const unsigned char Motor1Table[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; 用这个表



取消 P0 = 0x0f;  这个试一试,,,,,,上次用来调PID控制都没有出现丢步的现象,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 01:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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