A4988驱动步进电机「建议收藏」

A4988驱动步进电机「建议收藏」A4988一般用arduino来驱动,我是用STM32F103驱动的。首先推一个网页,https://www.pololu.com/product/1182,上面有比较详细和专业的说明,还有一个关于限制电流使细分更精确的视频讲解,总之,专业。然后推一个datasheet,https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver

大家好,又见面了,我是你们的朋友全栈君。

A4988一般用arduino来驱动,我是用STM32F103驱动的。

首先推一个网页,https://www.pololu.com/product/1182,上面有比较详细和专业的说明,还有一个关于限制电流使细分更精确的视频讲解,总之,专业。然后推一个datasheet,https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf

我用的是这里写图片描述
驱动比较好写,首先要弄清楚接线方式。
这里写图片描述
代码:

motor.c
//IO初始化
void MOTOR_Init(void)
{
  RCC->APB2ENR|=1<<3;
  GPIOB->CRH&=0xff000000;
  GPIOB->CRH|=0x00333333;
}
//细分
// x==1 全步
// x==2 半步 
// x==4 1/4步
// x==8 1/8步
// x==16 1/16步
void Step_Micr(u16 x)
{
    switch(x)
    {
        case 1:Full_step;break;
        case 2:Half_step;break;
        case 4:Quarter_step;break;
        case 8:Eighth_step;break;
        case 16:Sixteenth_step;break;
        default:break;
    }   
}
//参数
// dir:FALSE 正转TRUE反转
// period 周期
// step 脉冲
void Step_Control(u8 dir,u16 period,u32 steps)
{
    u32 i;
  for(i=0; i <= steps;i++)
  {
        DIR = dir;
    STEP = 1;
    delay_us(1);
    STEP = 0;
    delay_us(period);//periodԽС£¬×ªËÙÔ½¿ì£¬²»ÒªÐ¡ÓÚ1000
  }
}
//此函数可抱死
// 0 抱死
// 1 正常
void Step_Enable()
{
    ENABLE = 0;
}


motor.h
#define STEP PBout(8) //step
#define DIR PBout(9) //dir
#define MS1 PBout(10)//MS1
#define MS2 PBout(11)//MS2
#define MS3 PBout(12)//MS3
#define ENABLE PBout(13)//ENABLE
//细分宏定义
#define Full_step {MS1 = 0;MS2 = 0;MS3 = 0;} 
#define Half_step {MS1 = 1;MS2 = 0;MS3 = 0;}
#define Quarter_step {MS1 = 0;MS2 = 1;MS3 = 0;} 
#define Eighth_step {MS1 = 1;MS2 = 1;MS3 = 0;}
#define Sixteenth_step {MS1 = 1;MS2 = 1;MS3 = 1;} 

void MOTOR_Init(void);
void Step_Micr(u16 x);
void Step_Enable(void);
void Step_Control(u8 dir,u16 period,u32 steps);

main.c
int main(void)
{
    int i=0;
  Stm32_Clock_Init(9);
  delay_init(72);
  MOTOR_Init();
    Step_Micr(1);//1/2/4/8/16 
    for(i=0;i<10;i++)
    {
        Step_Control(FALSE,1600,200);//正转
    delay_ms(1000);
        Step_Control(TRUE,1600,200);//反转
    delay_ms(1000);
    }
    Step_Enable();//抱死
  while(1)
  {

  }
}

实现全步状态下正转一圈,反转一圈,持续一会儿后抱死。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148605.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用回溯法解0/1背包问题n=3,c=9_背包问题C语言算法

    使用回溯法解0/1背包问题n=3,c=9_背包问题C语言算法解01背包问题有很多种方法,就我知道的就有动态规划,回溯法,分支界限法这几种,下面就列出我的回溯法解法,以供参考intcapacity;//背包容量intn;//物品数intweight[0..n];//物品重量数组intprice[0..n];//物品价值数组intcur_weight;//当前重量intcur_price;//当前价值int…

    2022年10月21日
    3
  • 分布式锁的应用场景和三种实现方式的区别_负载均衡策略

    分布式锁的应用场景和三种实现方式的区别_负载均衡策略多线程对同一资源的竞争,需要用到锁,例如Java自带的Synchronized、ReentrantLock。但只能用于单机系统中,如果涉及到分布式环境(多机器)的资源竞争,则需要分布式锁。分布式锁的主要作用:保证数据的正确性:比如:秒杀的时候防止商品超卖,表单重复提交,接口幂等性。避免重复处理数据:比如:调度任务在多台机器重复执行,缓存过期所有请求都去加载数据库。分布式锁的主要特性:互斥:同一时刻只能有一个线程获得锁。可重入:当一个线程获取锁后,还可以再次获取这个锁,避免死锁发生。高可用:当

    2025年10月5日
    3
  • linux 删除 软连接(shell创建软连接)

    语法ln(选项)源文件目标文件1、区分符号连接“源文件”可以是文件或者目录硬连接,“源文件”参数只能是文件2、创建软链接ln–s/source/target参数:-s或——symbolic:对源文件建立符号连接,而非硬连接;3、删除软连接rm–rf/target注意:不要在后文件名后面加斜杆“/”否则会删除文件夹的内容参考:ht…

    2022年4月14日
    1.5K
  • 【转载】.NET Remoting学习笔记(一)概念

    【转载】.NET Remoting学习笔记(一)概念

    2021年11月18日
    48
  • rk3399 瑞芯微_3288开发板

    rk3399 瑞芯微_3288开发板迅为3399开发板基于瑞芯微的RK3399处理器设计,RockchipRK3399是瑞芯微推出的一款低功耗、高性能的应用处理器芯片,该芯片基于Big.Little架构,即具有独立的NEON协同处理器

    2022年8月3日
    12
  • [ext4]09 磁盘布局 – superblock备份机制

    [ext4]09 磁盘布局 – superblock备份机制如果 sparse super 特性 flag 被设置 即开启了 sparse super 特性 那么 super block 和组描述符的副本只会保存在 group 索引为 0 或 3 5 7 的整数幂 如果没有设置 sparse super 特性 flag super block 和组描述符的副本将保存在每一个 group 中

    2025年6月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号