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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Django接口_django中几个html互相跳转

    Django接口_django中几个html互相跳转前言在RESTful规范中,有关版本的问题,用restful规范做开放接口的时候,用户请求API,系统返回数据。但是难免在系统发展的过程中,不可避免的需要添加新的资源,或者修改现有资源。因此,改动升

    2022年7月29日
    16
  • java 删除目录下所有文件_Java删除文件、目录及目录下所有文件的方法实例

    java 删除目录下所有文件_Java删除文件、目录及目录下所有文件的方法实例前言本文主要实现的功能是删除某个目录及目录下的所有子目录和文件,涉及到的知识点:File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除。具体代码示例如下:importjava.io.File;publicclassDeleteDirectory{/***删除空目录*@paramdir将要删除的目录路径*/private…

    2022年5月24日
    48
  • 正確使用 SetCapture ReleaseCapture [譯]「建议收藏」

    正確使用 SetCapture ReleaseCapture [譯]「建议收藏」本文描述瞭如何正確處理自定義窗口和控件中的鼠標捕獲操作。原文鏈接: http://www.codeproject.com/Tips/127813/Using-SetCapture…correctly.aspx原作者: pasztorpisti轉載請註明出處:http://www.imoldman.com/2010/11/30/using-setcaptu…ture-corre

    2022年5月24日
    33
  • 程序员面临的困难和挑战_突破困境的故事

    程序员面临的困难和挑战_突破困境的故事偶然在网上看到这样一个故事:John和Bill一起到山中探险,忽然他们发现一只老虎正深情的望着他们,John撒腿就要跑,Bill却迅速的从背包里拿出一双跑鞋穿在脚上,John看到后气急败坏的对说Bill“你穿什么鞋也跑不过老虎的”Bill同情的看了他一眼,回答说“我干吗要和老虎比,我只要跑过你就够了。”大笑以后不免想起John的境遇是不是有点象中国的程序员呢?我个人习惯把软件从业人员分为初级程

    2022年10月11日
    4
  • VScode 配置 Java 开发环境 (VSCode 天下第一!!!!!)

    VScode 配置 Java 开发环境 (VSCode 天下第一!!!!!)VScode配置Java环境1.下载JDK方式一:手动下载JDKOracleJavaSEAdoptOpenJdkAzulZuluforAzure-EnterpriseEdition方式二:VSCode中下载JDK按下Ctrl+Shift+P输入Java:ConfigureJavaRuntime2.添加JDK环境下面两种方式只…

    2022年6月8日
    57
  • 十二个开源UML工具

    十二个开源UML工具本文将为您介绍12个优秀的UML工具:1.StarUMLStarUML(简称SU),是一种创建UML类图,是一种生成类图和其他类型的统一建模语言(UML)图表的工具。StarUML是一个开源项目之一发展快、灵活、可扩展性强(zj)。2.NetbeansUMLPlugin目前支持:Activity图,Class图,Sequence图,State图以及Use…

    2022年7月12日
    20

发表回复

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

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