微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32 驱动步进电机

STM32 驱动步进电机

时间:10-02 整理:3721RD 点击:

stm32发送控制信号给驱动器,驱动器控制步进电机。
驱动器:控制一个步进电机转动,使用一路PWM信号,和一路方向信号,根据pwm信号的频率控制步进电机的转速,方向信号控制步进转动的方向。

  1. void SteppingMotor_Config(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  5.     TIM_OCInitTypeDef  TIM_OCInitStructure;
  6.    
  7.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  8.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                 //TIM2的1通道输出pwm波形控制电机,对应PA0口
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_Init(GPIOA,&GPIO_InitStructure);

  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; //步进电机正反转和使能控制口
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  15.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  16.     GPIO_Init(GPIOA,&GPIO_InitStructure);

  17.     //定义PWM频率
  18.     TIM_TimeBaseStructure.TIM_Prescaler =719;                    //预分频值
  19.     TIM_TimeBaseStructure.TIM_Period =99;                   //重装值,这里输出的pwm频率为1KHZ
  20.     TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  21.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  22.     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);          //时基单元配置
  23.                                                                      
  24.     //设定占空比
  25.     TIM_OCStructInit(& TIM_OCInitStructure);

  26.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  27.     TIM_OCInitStructure.TIM_Pulse =50;                      //%50的占空比
  28.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  29.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
  30.     TIM_OC1Init(TIM2, &TIM_OCInitStructure);
  31.     TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
  32.     TIM_ARRPreloadConfig(TIM2,ENABLE);
  33.     TIM_Cmd(TIM2, ENABLE);
  34.     TIM_CtrlPWMOutputs(TIM2, ENABLE);
  35. }

复制代码

  1. void SteppingMotorControl(u8 dir)                     //正反转控制
  2. {

  3.     if(0==dir)
  4.     {
  5.         GPIO_ResetBits(GPIOA,GPIO_Pin_1);     //反转
  6.     }
  7.     else
  8.     {
  9.         GPIO_SetBits(GPIOA,GPIO_Pin_1);         //正转
  10.     }


  11. }

  12. void EnableSteppingMotor(void)
  13. {
  14.     GPIO_ResetBits(GPIOA,GPIO_Pin_2);
  15. }

  16. void DisableSteppingMotor(void)
  17. {
  18.     GPIO_SetBits(GPIOA,GPIO_Pin_2);
  19. }

复制代码



步进电机用什么来驱动?

感谢分享,,学习一下

您的问题解决了吗?

用stm32能直接带动小的步进电机吗?

应当不能。i/o输出的电流不足以驱动电机。

谢谢   直流电机的问题已经解决  步进电机慢慢来拿

谢谢分享!谢谢分享!谢谢分享!谢谢分享!

小编电机驱动用的什么芯片

请问小编为什么用一路PWM就可以控制步进电机

请问一下我的GPIO口有方波产生,电源也有12V来给驱动板供电,但是电机就是不动,这是为什么呢

小编这是驱动四线的步进电机么?

最近一个项目用到,小编可以分享一个DEMO么?

你选好步进电机的驱动了吗,我也遇到了这样的问题,可以给个建议吗,谢谢

我用的42式步进电机驱动   程序和小编差不多   电机不转    客服说是32输出电压3.3V不够  应该用 5V的   我还没试 小编可以把你的硬件给详细在网上说一下吗?

请问一下,调速是不是修改TIM_TimeBaseStructure.TIM_Period 的值?

感谢分享,,学习一下

控制步进电机难点在控制它的位置,可惜小编没有提到。

我的伺服驱动器做好了 应用在工业上的有伺服驱动器 也做了一款电动汽车控制器 代码大家可以参考一下  470921443

有没有人要选用亿光的光耦产品啊,158913063

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top