电机控制方案
直播中

1652711011.026500

16年用户 11294经验值
私信 关注
[问答]

请问大神stm32是如何控制步进电机转动的?

请问大神STM32是如何控制步进电机转动的?有哪位大神知道吗

回帖(1)

李亚东

2021-6-29 09:51:28
  驱动方式为A-AB-B-BC-C-CD-D-DA-A
  使用延时函数实现
  主函数
  #include “dj.h”
  #include “delay.h”
  #include “sys.h”
  #include “key_led.h”
  //ALIENTEK miniSTM32¿ª·¢°åʵÑé1
  //ÅÜÂíµÆʵÑé
  //¼¼ÊõÖ§³Ö£ºwww.openedv.com
  //¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾
  int main()
  {
  int i=512; //ÕâÀïתһȦÐèÒª4096¸öÂö³åÐźŠתһȦiÉèÖÃΪ512
  u32 t=550; //¼ÆËãµÃ305Ϊ10sµÄʱ¼ä£¬ÕâÀïÓÐ1sµÄÎó²î£¬¹Ê¼õÈ¥ÁË1sµÄʱ¼ä
  // 1s¼ÆËãµÃµ½ËùÐèÑÓʱΪ30 305-30=275
  //´ËÍ⣬¼ÆËãÁË5sËùÐèµÄÑÓʱ£¬275/2=137.5 È¡137 ²âµÃʱ¼äÎó²îÔÚ0.2s×óÒÔÄÚ
  delay_init(); //ÑÓʱº¯Êý³õʼ»¯
  Dj_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  while(1)
  {
  while(i)
  {
  A1_H;B1_L;C1_L;D1_L;
  delay_us(t);
  A1_H;B1_H;C1_L;D1_L;
  delay_us(t);
  A1_L;B1_H;C1_L;D1_L;
  delay_us(t);
  A1_L;B1_H;C1_H;D1_L;
  delay_us(t);
  A1_L;B1_L;C1_H;D1_L;
  delay_us(t);
  A1_L;B1_L;C1_H;D1_H;
  delay_us(t);
  A1_L;B1_L;C1_L;D1_H;
  delay_us(t);
  A1_H;B1_L;C1_L;D1_H;
  delay_us(t);
  i--;
  }
  }
  }
  dj.c
  #include “stm32f10x.h”
  #include “sys.h”
  #include “dj.h”
  #include “delay.h”
  void Dj_Init(void)
  {
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPA,PD¶Ë¿ÚʱÖÓ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //LED0--》PA.8 ¶Ë¿ÚÅäÖÃ
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
  GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA.8 Êä³ö¸ß
  GPIO_Init(GPIOA, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //LED1--》PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
  GPIO_ResetBits(GPIOA,GPIO_Pin_1); //PD.2 Êä³ö¸ß
  GPIO_Init(GPIOA, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1--》PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
  GPIO_ResetBits(GPIOA,GPIO_Pin_2); //PD.2 Êä³ö¸ß
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //LED1--》PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
  GPIO_ResetBits(GPIOA,GPIO_Pin_3); //PD.2 Êä³ö¸ß
  GPIO_Init(GPIOA, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8
  }
  dj.h
  #ifndef __DJ_H
  #define __DJ_H
  #include “sys.h”
  //
  //本程序只供学习使用,未经作者许可,不得用于其它任何用途
  //ALIENTEK miniSTM32开发板
  //按键驱动代码
  //正点原子@ALIENTEK
  //技术william hill官网 :www.openedv.com
  //修改日期:2012/9/3
  //版本:V1.0
  //版权所有,盗版必究。
  //Copyright(C) 广州市星翼电子科技有限公司 2009-2019
  //All rights reserved
  //
  #define A1_H GPIO_SetBits(GPIOA,GPIO_Pin_0)
  #define A1_L GPIO_ResetBits(GPIOA,GPIO_Pin_0)
  #define B1_H GPIO_SetBits(GPIOA,GPIO_Pin_1)
  #define B1_L GPIO_ResetBits(GPIOA,GPIO_Pin_1)
  #define C1_H GPIO_SetBits(GPIOA,GPIO_Pin_2)
  #define C1_L GPIO_ResetBits(GPIOA,GPIO_Pin_2)
  #define D1_H GPIO_SetBits(GPIOA,GPIO_Pin_3)
  #define D1_L GPIO_ResetBits(GPIOA,GPIO_Pin_3)
  /*电机转动指令*/
  /*
  #define a {A1_H,B1_L,C1_L,D1_L}
  #define b {A1_H,B1_H,C1_L,D1_L}
  #define c {A1_l,B1_H,C1_L,D1_L}
  #define d {A1_L,B1_H,C1_H,D1_L}
  #define e {A1_L,B1_L,C1_H,D1_L}
  #define f {A1_L,B1_L,C1_H,D1_H}
  #define g {A1_L,B1_L,C1_L,D1_H}
  #define h {A1_H,B1_L,C1_L,D1_H}
  */
  void Dj_Init(void); //IO初始化
  #endif
举报

更多回帖

发帖
×
20
完善资料,
赚取积分