【STM32】83轮毂电机调试

本文介绍了如何使用STM32通过控制代码和实物接线来实现83轮毂电机的调速、刹车及正反转功能。博主通过购买的83轮毂电机和PWM转电压模块,实现了0-100%转速控制,并详细讲解了STM32的控制代码,包括main.c、timer.h、timer.c和control.h等文件的使用。此外,还展示了实物接线图和运行效果。
摘要由CSDN通过智能技术生成

博主在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轮毂电机的调试就完成了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值