STM32串口控制步进电机(原创)

用的42步进电机:

厂家可能不一样,两项四线步进电机,里面有两个线圈。在电机什么电都没有接的情况下,用万用表测量四个管脚;两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可以互换;  经测,我用的17hs4417  黑绿一组,红蓝一组。

建议还是买个步进电机驱动器,五六十一个,相当好用。

贴一下STM32串口控制步进电机的代码:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"

//#define EN PBout(0)//步进电机使能端口置零停止
//#define Dirt PBout(1)  //置零反转 ,
//en 绿色    pb0
//dir- 黄色   正反   pb1
//pul— 蓝色   脉冲   pb5   
//共阳极   橙色 3.3v
 int main(void)
 {    

     u8 t;
  u8 Rx1;    
  u8 Rx2;    
  u32  n;
     u16 pwmval=0;    
    delay_init();             //延时函数初始化      
    NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(9600);     //串口初始化为9600
     LED_Init();
    TIM3_PWM_Init(750,720);    
    //LED端口初始化
 //不分频。PWM频率=72000000/7200=10000hz   10000/100=100hz;
    //400-1000
    EN=0;//开机后,步进电机使能为0,不转
    Dirt=0;
  while(1)
    {
        TIM_SetAutoreload(TIM3,n);
        pwmval=n/2;        
        TIM_SetCompare2(TIM3,pwmval);    
    //n=750;
                if(USART_RX_STA&0x8000)
                {                       
                    Rx1=USART_RX_BUF[0];
                    Rx2=USART_RX_BUF[1];
                    USART_RX_STA=0;}
                switch (Rx1)
                { 
        //      case 'g':    TIM3_PWM_Init(720,700);EN=1;Dirt=0;break;// 前进
        //             case 'b':    TIM3_PWM_Init(720,700);EN=1;Dirt=0;break;// 后退:步进电机暂时没有前进后退
                    case 'l':    n=720;EN=1;Dirt=1;break;// 左转
                    case 'r':    n=720;EN=1;Dirt=0;break;// 右转
                    case 's':    EN=0;break;// 停止
                     case 'a':    n=Rx2*6+400;EN=1;Dirt=1;break;// 自动巡航左转
                     case 'c':    n=Rx2*6+400;EN=1;Dirt=0;break;// 自动巡航右转
                    default:break;             
                }
    }
}

关于PWM的使用方法,在博主的其他随笔里有较详细说明。

Smartkeke
原文地址:https://www.cnblogs.com/smartkeke/p/6821532.html