STM32串口控制步进电机(原创)
Posted KEKE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的使用方法,在博主的其他随笔里有较详细说明。
以上是关于STM32串口控制步进电机(原创)的主要内容,如果未能解决你的问题,请参考以下文章
Copley-STM32串口+CANopen实现双电机力矩同步