【STM32】83轮毂电机调试
博主在2021年3月份的时候,在淘宝上购买了83轮毂电机,链接如下,这种电机的供电电压是24v,博主使用的是24的开关电源。
链接: https://m.tb.cn/h.4JZ9sN7?sm=df3f22.
博主在这里给出如何通过正点原子的STM32板来实现这种轮毂电机的控制,本篇博客主要分为两个部分,分别是产品使用的相关介绍和STM32控制方法。
一、产品使用的相关介绍
按照官方给出的说明,轮毂电机主要是通过三相电机线与驱动板连接,在连接的顺序上并不重要,当改变其中任意两条线的接线后,电机便可以实现反转。轮毂电机是通过驱动板驱动的,驱动板与轮毂电机之间主要通过三相电机线连接,下图是驱动板上的三个控制端口,分别是调速端口,刹车端口和正反转端口。
1 调速——黄线
黄线主要用于调速,这里需要输入0-5V的模拟电压,可以实现轮毂电机的0-100%转速的变换。如果只是用单片机上的PWM输出,在控制电机的时候并不稳定,容易出现电机速度不稳定的情况,刚开始博主使用的是STM32上的口直接输出PWM给电机驱动板,因此博主又在淘宝上购买了一块PWM转电压模块,链接如下:
链接: https://m.tb.cn/h.4KjQg4x?sm=852a89.
这种模块可以将单片机上0-3.3v的PWM输出转换为0-10v的模拟电压输出,但是这种模块的供电电压有要求,一般在12v-30v之间,模块的PWM输出端的GND和PWM输入端的GND相接。
再将PWM转电压输出模块的PWM输出端与轮毂电机驱动板的PWM输入端相连,通过给入单片机输出PWM信号时,轮毂电机就可以按照给定的参数运行了。
2刹车——红线
轮毂电机刹车控制端默认给高电平,STM32端的普通I/O口的高电平就可以满足轮毂电机刹车控制端的需求,这里默认给刹车控制端高电平,一般不需要去改变。
3正反转——黑线
轮毂电机正反转黑线通过开关量控制,单片机端输出低电平给正反转控制端,就可以控制电机的正反转。这里博主经过实验,轮毂电机正反转控制端的的通断可以转换为高低电平的变换。给高电平时相当于短路,电机正转;给低电平时,电机反转。
二、STM32控制方法
在用stm32板进行调试时,要将驱动板的GND端、STM32板的GND和PWM转电压模块的GND端都连在一起,使得他们都是供地的,如果不是供地,电机在控制时不能正常控制。
1 STM32控制代码
main.c文件
#include "control.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
int main(void)
{
delay_init(); //ÑÓʱº¯Êý³õʼ»¯
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
uart_init(115200); //´®¿Ú³õʼ»¯Îª115200
CONTROL_Init(); //LED¶Ë¿Ú³õʼ»¯
TIM3_PWM_Init(1000,71);
STOP=0;
BACK=1;
while(1)
{
TIM_SetCompare2(TIM3,950);
}
}
timer.h文件
#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"
void TIM3_PWM_Init(u16 arr,u16 psc);
#endif
timer.c文件
#include "timer.h"
#include "control.h"
#include "usart.h"
void TIM3_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_Cmd(TIM3, ENABLE);
}
control.h文件
#ifndef __CONTROL_H
#define __CONTROL_H
#include "sys.h"
#define STOP PGout(9)// PB5
#define BACK PGout(10)// PE5
void CONTROL_Init(void);
#endif
control.c文件
#include "control.h"
void CONTROL_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_SetBits(GPIOG,GPIO_Pin_9|GPIO_Pin_10);
}
2 实物接线
具体的实物接线如下图,这边主要是博主自己在调试过程中的接线。
2 运行效果
运行效果如上图所示,这样,关于83轮毂电机的调试就完成了。