基于STM32F103的PWM电机驱动A4950

文章介绍了A4950模块的特性,如高输出电流、低发热,以及如何使用STM32F103C8T6的定时器3进行PWM控制,以驱动A4950来控制电机的正反转和速度。通过提供初始化代码和电机控制函数,展示了如何设置PWM占空比来调整电机速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本介绍

266cdf3dc7f64f04bb482981973ab8e8.png

A4950的峰值输出电流可达±3.5 A,工作电压为7.6~40v。

优点:相对于L298N模块控制2个电机正反转仅需要4个I/O口,体积小,发热低。

缺点:需要2个PWM引脚才能控制正反转,所以控制2个电机需要4PWM引脚,会使用STM32F103芯片一个定时器的全部PWM通道。

A4950模块是靠输入2路的PWM占空比的差值,来设定输出电压的大小,当差值为0时输出为0,反之当占空比差值为100时输出最大。

2.引脚功能和接线

db7dacd3e49e487da68d75aa1227c0b0.png

引脚名称输入\输出接线功能
AOUT1    输出        接A电机正输出电压控制电机
AOUT2    输出        接A电机负输出电压控制电机
BOUT1    输出        接B电机正输出电压控制电机
BOUT2    输出        接B电机负输出电压控制电机
AIN1    输入          接STM32 A7控制电机输出电压
AIN2    输入          接STM32 B1控制电机输出电压
BIN1    输入          接STM32 A6控制电机输出电压
BIN2    输入          接STM32 B0控制电机输出电压
VM    输入          接12V电源总电源

VCC

    输入          接5V电源给内部逻辑电路供电
GND    输出         接电源地接地

3程序设计

接下来我使用STM32F103C8T6的标准库代码为例

定时器3初始化代码

#include "stm32f10x.h"                  // Device header

void PWM_Init3(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	GPIO_InitTypeDef GPIO_InitStructure1;
	GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
	GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure1);

	GPIO_InitTypeDef GPIO_InitStructure2;
	GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure2);

	TIM_InternalClockConfig(TIM3);
	
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	
	TIM_TimeBaseInitStructure.TIM_Period  = 100-1;  //ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler  = 3600-1; //PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
	
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //输出比较模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;//CCR
	
    TIM_OC1Init(TIM3,&TIM_OCInitStructure);
	TIM_OC2Init(TIM3,&TIM_OCInitStructure);
	TIM_OC4Init(TIM3,&TIM_OCInitStructure);
    TIM_OC3Init(TIM3,&TIM_OCInitStructure);
    
    TIM_ClearFlag(TIM3, TIM_FLAG_Update);
	
    TIM_Cmd(TIM3,ENABLE);
 }

 
 
void PWM_SetCompare1(uint16_t Compare)
 {
	 TIM_SetCompare1 (TIM3,Compare);
 }
  
void PWM_SetCompare2(uint16_t Compare)
 {
	 TIM_SetCompare2 (TIM3,Compare);
 }
 
void PWM_SetCompare3(uint16_t Compare)
 {
	 TIM_SetCompare3 (TIM3,Compare);
 }

void PWM_SetCompare4(uint16_t Compare)
 {
	 TIM_SetCompare4 (TIM3,Compare);
 }

电机控制函数

#include "stm32f10x.h"                  // Device header
#include "PWM.h"
void Motor_Init(void)
{
	PWM_Init3();
}
// you
void Motor_SetSpeed2(int16_t Speed)
{
	
		PWM_SetCompare3(50-Speed/2);
		PWM_SetCompare1(50+Speed/2);

	
}
//zuo
void Motor_SetSpeed1(int16_t Speed)
{
	
		PWM_SetCompare2(50-Speed/2);
		PWM_SetCompare4(50+Speed/2);

}

 mian函数代码

#include "stm32f10x.h"                  // Device header
#include "Motor.h"
int main (void)
{
	Motor_Init(); //电机驱动初始化
	while(1)
	{
		
		Motor_SetSpeed1(20);//给电机1 向前20速度
		Motor_SetSpeed2(20);//给电机2 向前20速度
		
	}

}

全部源码链接:主控/C8T6/A4950 · 亟待/electronic-game-code - 码云 - 开源中国 (gitee.com)https://gitee.com/AD123zsg/electronic-game-code/tree/master/%E4%B8%BB%E6%8E%A7/C8T6/A4950

### 回答1: A4950电机驱动模块是一种专门设计用于直流电机控制的驱动模块,它使用了内置MOS管的高侧和低侧PWM输出来控制电流。该模块采用了 H-桥电路来驱动电机,该电路由四个MOS管组成,分别是两个高侧MOS管和两个低侧MOS管,可实现正、反方向转动和刹车功能。当控制信号输入时,模块通过相应的PWM输出驱动对应的MOS管按需导通或关闭,以控制电机的动作。此外,该模块还有多种保护功能,如过流保护、欠压保护、过热保护等,可确保电机的安全运行。A4950电机驱动模块广泛应用于智能家居、工业自动化、机器人等领域,可以提供高效、高可靠性的电机控制。 ### 回答2: a4950电机驱动模块是一种常用的直流电机驱动模块,适用于需要控制电机方向和速度的应用场合。它的原理基于H桥电路,由两个电力开关管与两个双极性MOSFET管组成。 在正常情况下,两个电力开关管都是关闭状态,而两个MOSFET管则是工作状态。当需要改变电机旋转方向时,其中一个电力开关管会打开,而与之对应的MOSFET管会关闭,电机的电流方向也随之改变,从而实现了电机方向控制。 当需要改变电机运转速度时,控制器会调节PWM信号的占空比,从而控制电流的大小和方向,达到控制电机转速的目的。 另外,a4950电机驱动模块在实现过程中会自动监测输出电流,并能够自动保护电路,防止过载或过热等情况发生。 总之,a4950电机驱动模块是一种成熟可靠的电机控制方案,应用广泛,具有稳定性高、控制精度高等优点,值得广大电机控制工程师使用。 ### 回答3: a4950电机驱动模块是一种用于控制直流电机的电子元件,其原理主要包括PWM控制、H桥路驱动、保护控制和供电管理等四个方面。 首先,PWM控制是a4950电机驱动模块的核心原理,它利用可变占空比的PWM信号来控制电机的转速和方向。通过改变PWM信号的占空比,可以控制电机转速的快慢和正反向旋转。 其次,H桥路驱动是a4950电机驱动模块的另一重要原理,它通过实现H桥式电路来控制电机的正反向运动。通常,这种驱动方式需要4个电子开关来控制电机的方向和转速。 再者,保护控制是a4950电机驱动模块的必要原理,它能够保护电机和整个电子元件免受电流过载、短路、低电压等因素的损坏。通过在电路中添加电流保护和短路保护等措施,可以更好地提高模块的可靠性和安全性。 最后,供电管理是a4950电机驱动模块的关键原理,它通过实现电源的选择和管理来确保电机始终正常工作。一般来说,模块可能需要2个电源输入端口,分别用于电机和控制芯片的供电,因此需要实现电源选择和管理,以便控制电机按照预期操作。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值