找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1265|回复: 4
打印 上一主题 下一主题
收起左侧

52单片机+a8944驱动控制2相4线步进电机 出现的问题!

[复制链接]
跳转到指定楼层
楼主
本帖最后由 57185490 于 2023-1-15 12:38 编辑

52单片机+a8944驱动控制2相4线步进电机
按键控制正反转
A8944  “ENABLE 启动”空悬 ,接电后(由于低电平属于启动)所以按键无操作,电机也有电流持续升温,时间长就烧电机(已经烧了一个,但正反转运行正常)!所以必须接单片机拉高电平,只有按键操作拉低电平再转动,松开按键停止启动(无电流,避免电机持续发热)
现在“ENABLE”接的单片机P1^1
问题出现啦~~~1:正转按键按下(P2_0)高电平3.9v拉低到0v,运行!但松开按键电平还是低电平
                       2:反转按键按下(P2_1)高电平只能拉低到1.7v,无法运行!松开按键,电平恢复到3.9v
    ENABLE=1和ENABLE=0 放到这个程序的任何位置都这样~~哪里出问题了?
    while 不用“y” (就是取消“y”这个操作,只用ENABLE=1和ENABLE=0 来启动和停止,也是这种情况)
这个是程序:
#include <reg51.h>
#define uchar unsigned char
unsigned int y ;
/**********************????****************/
void Delay(unsigned int xms)   //@12.000MHz Delay(1)=1ms  
{
      unsigned char i, j;
      while(xms--)
        {
               i = 2;
               j = 239;
               do
{while (--j);}
                while(--i);
         }
}
void delay1(unsigned int b)//可忽略,闲着无聊加个延时~~~
      {
           uchar g;
           for(;b>0;b--)
         {
                    g=250;
                  while(--g);
                  g=249;
                  while(--g);
         }
      }
/***********************************************/
sbit DIR=P2^0;       //
sbit STEP=P2^1;     //
sbit P2_0=P2^2;    //
sbit P2_1=P2^5;
sbit ENABLE=P1^1;
void step(void)
{   
          STEP=0;   //脉冲
          Delay(1);  // Delay(1)=1ms
          STEP=1;
          Delay(1);                           
}
void UP_dj(void)    //正转
{
                    DIR=0;    //正转
                    step();
if(P2_0==1)// 按键松开,电机停止
         delay1(10);// 延时,防按键误操作
         if(P2_0==1)
                             {
y=0;//while循环程序停止
}
}
void DN_dj(void)    //反转
{
                    DIR=1;             //反转
              step();   
if(P2_0==1)  // 按键松开,电机停止
        delay1(10);  // 延时 ,防按键误操作
        if(P2_0==1)
                {
y=0;
}
}
void main()         //???
{     
ENABLE=1;
y=1;
while(y)
                     {     
                      if(P2_0==0) //??????????
                 delay1(10);
                 if(P2_0==0)
{
ENABLE=0;
UP_dj();        //正转
                              }
                            if(P2_1==0) //??????????
                  delay1(10);
                  if(P2_1==0)
                          {   
ENABLE=0;
DN_dj();       //反转
}
                            }
   }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1044091 发表于 2023-1-15 17:05 | 只看该作者
是A4988模块吧?这模块就是一个超小的步进电机驱动器,我也在用,而且非常好用。
1、正常空载时不应该有大的温升,用万用表电流档测下模块电流,大了要旋上面的电位器调小。我用的28步进电机空载100多毫安就能转,带负载要调到300多毫安,基本没什么温升。
2、按键不灵首先看代码。我建议你还是找本基础教程用上面的按键代码替换掉你这段代码试试吧。
回复

使用道具 举报

板凳
ID:320487 发表于 2023-1-28 17:34 | 只看该作者
ningsy 发表于 2023-1-15 17:05
是A4988模块吧?这模块就是一个超小的步进电机驱动器,我也在用,而且非常好用。
1、正常空载时不应该有大 ...

谢谢哈!!!
已经找到问题
4988 要求8-35v(参数,所以也没敢调电压)
用的12v
由于电机太小
考虑了一下,改5v输入~没想到也可以运行 ,也不发热啦 哈哈哈

至于“ENA”脚为什么高低电平出现这种情况,不管啦
直接悬空 不控制了 ~~~~
回复

使用道具 举报

地板
ID:1044091 发表于 2023-1-28 19:48 | 只看该作者
57185490 发表于 2023-1-28 17:34
谢谢哈!!!
已经找到问题
4988 要求8-35v(参数,所以也没敢调电压)

A4988这款步进电机驱动模块调节驱动能力

1.jpg (30.39 KB, 下载次数: 54)

1.jpg
回复

使用道具 举报

5#
ID:883242 发表于 2023-1-30 07:26 | 只看该作者
A4988是电流型驱动器件,但楼主的描述似乎是电压型步进电机,完全是驴唇不对马嘴。建议楼主把步进电机铭牌上面的信息贴出来。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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