有51单片机连a4988的例程吗?

关注

单片机 51单片机 STM64    2018-10-12   |   浏览量 166  
有51单片机连a4988的例程吗?

最佳答案

  • Chauncey 发表于2018-10-20

    EN脚置零,DIR脚控制方向,给STEP送脉冲,100Hz左右,就可以了

    具体方法其实和arduino一样的

    举报 评论 0

其他答案

  • wo4fisher 发表于 2018-10-12

    参考arduino就可以,一个引脚设置方向,一个引脚用来输出高速脉冲,剩下的细分等可以不接,再接电源和步进电机就可以了。

    举报 评论 0

  • yhj416606438 发表于 2018-10-12

    可以参考https://download.csdn.net/download/teshu2010/9103049

    举报 评论 0

  • 明有几时有 发表于 2018-10-12

    这个步进电机要用一个驱动芯片才可以驱动的,单片机无法使用IO口驱动

    举报 评论 0

  • FEItwo 发表于 2018-10-14

    可以去参考下,A4988步进电机单片机驱动程序 ,51单片机A4988驱动源码,步进电机驱动A4988步进电机驱动程序编写 ,等资料

    举报 评论 0

  • megar 发表于 2018-10-14

    这个就是一个普通的步进电机,参考51控制步进电机程序,或者Arduino有现成的可以参考下https://blog.csdn.net/ling3ye/article/details/47001251

    举报 评论 0

  • Kylo 发表于 2018-10-20

    这种就上一个普通的电机驱动,一个引脚设置方向,一个发送PWM进行控制

    举报 评论 0

  • chen0000009 发表于 2018-10-21

    A4988只需要两个脚,一个选择方向的,一个输出脉冲的,脉冲那个,在51上面可以通过定时器中断实现

    举报 评论 0

  • Reuben 发表于 2018-10-23

    这个芯片通过一个引脚控制方向,一个发送脉冲就可以驱动

    举报 评论 0

  • Harriet 发表于 2018-10-30

    这个用PWM去控制你的输出引脚,然后再控制你的电机驱动就可以

    举报 评论 0

  • drepa 发表于 2018-10-31

    a4988是通过pwm控制的,51可以发出pwm波来控制这个器件。

    举报 评论 0

  • 我对面的武器 发表于 2018-11-06


    #include <reg52.h>
    #include <intrins.h>

    #define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
    //#define FOSC 12000000L //晶振设置,使用12M Hz
    //#define FOSC 24000000L //晶振设置,使用24M Hz

    #define TIME_MS 1 //设定定时时间 ms 在11.0592M晶振下,不易超过60ms





    //IO接口定义
    sbit pulse = P1^0;//脉冲信号
    sbit Dir   = P1^1; //正反转

    sbit EN    = P1^2;
    sbit MS1   = P1^3;
    sbit MS2   = P1^4;
    sbit MS3   = P1^5;



    sbit KEY1 = P2^0;  //启动
    sbit KEY2 = P2^1;  //停止
    sbit KEY3 = P2^2;  //正转
    sbit KEY4 = P2^3;  //反转


    //全局变量定义
    unsigned char count=0;

    /*******************************************************************************
    * 函 数 名 :Delayms
    * 函数功能 :实现 ms级的延时
    * 输    入 :ms
    * 输    出 :无
    *******************************************************************************/
    void Delayms(unsigned int ms)
    {
            unsigned int ij;
            for(i=0;i<ms;i++)
            #if FOSC == 11059200L
                    for(j=0;j<114;j++);
            #elif FOSC == 12000000L
              for(j=0;j<123;j++);
            #elif FOSC == 24000000L
                    for(j=0;j<249;j++);
            #else
                    for(j=0;j<114;j++);
            #endif
    }

    /*******************************************************************************
    * 函 数 名 :Timer0Init
    * 函数功能 :定时器0初始化
    * 输    入 :无
    * 输    出 :无
    *******************************************************************************/
    void Timer0Init()
    {
            TMOD=0x01; //设置定时器0工作方式为1
            TH0=(65536-FOSC/12/1000*TIME_MS)/256;
            TL0=(65536-FOSC/12/1000*TIME_MS)%256;
            ET0=1; //开启定时器0中断
    //        TR0=1;        //开启定时器        
            EA=1;  //打开总中断
    }


    /*******************************************************************************
    * 函 数 名 :main
    * 函数功能 :主函数
    * 输    入 :无
    * 输    出 :无
    *******************************************************************************/
    void main()
    {
            Timer0Init();
            EN=0;
            MS1=0;
            MS2=0;
            MS3=0;
            while(1)
            {
      if(KEY1==0)  //判断是否按下键盘
            {
                    Delayms(10); //延时软件去干扰
                    if(KEY1==0)   //确认按键按下
                    {
          TR0=1;
                    }
                    while(KEY1==0);//按键锁定每按一次count只加1.
            }
            if(KEY2==0)  //判断是否按下键盘
            {
                    Delayms(10); //延时软件去干扰
                    if(KEY2==0)   //确认按键按下
                    {
          TR0=0;
                    }
                    while(KEY2==0);//按键锁定每按一次count只加1.
            }        
            
            if(KEY3==0)  //判断是否按下键盘
            {
                    Delayms(10); //延时软件去干扰
                    if(KEY3==0)   //确认按键按下
                    {
          Dir=0;
                    }
                    while(KEY3==0);//按键锁定每按一次count只加1.
            }        
            
                    if(KEY4==0)  //判断是否按下键盘
            {
                    Delayms(10); //延时软件去干扰
                    if(KEY4==0)   //确认按键按下
                    {
          Dir=1;
                    }
                    while(KEY4==0);//按键锁定每按一次count只加1.
            }        
            
            
            }
    }

    举报 评论 0

  • 厉害企鹅 发表于 2018-11-06

    这个芯片的驱动可以看看https://blog.csdn.net/asszz/article/details/79399681

    举报 评论 0

  • 序缘阿斌 发表于 2018-11-12

    一般就是一个引脚控制方向,一个引脚用脉冲去控制运动

    举报 评论 0

  • 凉城小呆呆 发表于 2018-11-15

    这个可以参考雷赛的步进电机驱动器控制,方式是一样的

    举报 评论 0

我来回答

试用推荐

Beetle-ESP32控制器

产品总数:5个  申请人数:7

距离结束时间:

推荐达人 更多>

  • 王奕 向ta提问

    Eagleson

    在学习FPGA的道路上 我们一起成长吧!

    在行: FPGA/CPLD

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 Linux 系统 STM32讨论区 PIC单片机 PCB技术/设计/定制

  • Angel Cherry 向ta提问

    MOP

    用愛和熱忱寫好每一行Code

    在行: FPGA/CPLD Linux 系统 热门单片机

  • 徐珂靖 向ta提问

    xukejing

    Linux系统 、热门开发板

    在行: Linux 系统

  • 袁建明 向ta提问

    河北博联科技有限公司 研发部经理

    日知其所亡

    在行: Linux 系统 灵动微MCU 电源技术

完成答题
赶快去开启您的宝箱吧
×
恭喜您成功领取锦鲤卡
幸运锦鲤将在12月28日晚8点的直播中公布
敬请期待...
确定
邀请答题送话费,邀的多赚的多