电机驱动模块STM32F1x开发

博客介绍了电机驱动模块相关信息,包括产地为中国大陆,品牌是艾思控,型号为AQMH2407ND,电压、电流等参数,控制方式为外部PWM、TTL电平,还提及模块线连接。此外给出了程序开发的链接及头文件相关内容。

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

一、电机驱动模块型号
1.1 产地: 中国大陆
电压: 24V
电源方式: 直流电
品牌: 艾思控
型号: AQMH2407ND
电压范围: 6.5-27
额定电流: 7
控制方式: 外部PWM、TTL电平
调速类型: 占空比
适用范围: 各种控制
在这里插入图片描述
1.2 模块线的连接

电机驱动模块1–1、2
ENAPA0
IN1PF8
IN2PF9
OUT1电机 +
OUT2电机 -
MCUVCC具体的和单片机引脚的电压相同,3.3V或5V
GNDGND
电机驱动模块1–3、4
ENAPA1
IN3PF10
IN4PF11
OUT3电机 +
OUT4电机 -
MCUVCC具体的和单片机引脚的电压相同,3.3V或5V
GNDGND
电机驱动模块2–1、2
ENAPA2
IN1PF12
IN2PF13
OUT1电机 +
OUT2电机 -
MCUVCC具体的和单片机引脚的电压相同,3.3V或5V
GNDGND
电机驱动模块2–3、4
ENAPA3
IN3PF14
IN4PF15
OUT3电机 +
OUT4电机 -
MCUVCC具体的和单片机引脚的电压相同,3.3V或5V
GNDGND
串口调试模块
5V5V
TXDPA10
RXDPA9
GNDGND
ST-LINK
SWCLK缺口靠左-左排-上至下-第5 个针
SWDIO缺口靠左-左排-上至下-第4 个针
GND缺口靠左-右排-上至下-最后 1 个针
3.3v缺口靠左-右排-上至下-第2 个针
5v电源模块 ((顺序:四个接口靠左,从上至下) )
接口15v 电压输出
接口2GND
接口3GND
接口412v 电源输入

二、程序开发

程序链接:

https://download.youkuaiyun.com/download/qq_37788383/11887939

2.1 头文件 .h文件

#ifndef __PWM_H
#define __PWM_H
#include "sys.h"
#include "delay.h"

/*******************************************
********************************************

IN1  IN2  ENA     OUT1,OUT2输出
 0    0    X       刹车
 1    1    X       悬空
 1    0   PWM      正转调速
 0    1   PWM      反转调速
 1    0    1       全速正转
 0    1    1       全速反转
 
 IN3  IN4  ENA    OUT3,OUT4输出
 0    0    X       刹车
 1    1    X       悬空
 1    0   PWM      正转调速
 0    1   PWM      反转调速
 1    0    1       全速正转
 0    1    1       全速反转
 
********************************************
*******************************************/
//控制(左右平移)电机1和2
#define bod1_IN1 PFout(8)
#define bod1_IN2 PFout(9)
#define bod1_IN3 PFout(10)
#define bod1_IN4 PFout(11)
//控制(前进和后退)电机3和4
#define bod2_IN1 PFout(12)
#define bod2_IN2 PFout(13)
#define bod2_IN3 PFout(14)
#define bod2_IN4 PFout(15)


#define KEY1  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)//读取按键1 
#define KEY2  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//读取按键2

#define KEY1_PRES	1	//KEY1按下
#define KEY2_PRES	2	//KEY2按下


void TIM2_PWM_Init(u16 arr,u16 psc);
//电机1
void A0_forward_rotating(u16 t);   //A0正转调速
void A0_reversal_reverse(u16 t);   //A0反转调速
//电机2
void A1_forward_rotating(u16 t);   //A1正转调速
void A1_reversal_reverse(u16 t);   //A1反转调速
//电机3
void A2_forward_rotating(u16 t);   //A2正转调速
void A2_reversal_reverse(u16 t);   //A2反转调速
//电机4
void A3_forward_rotating(u16 t);   //A3正转调速
void A3_reversal_reverse(u16 t);   //A3反转调速
	
u8 KEY_Scan(u8 mode);  	//按键扫描函数		
void Key_state(void);
#endif

### 基于STM32F1与L298N的步进电机控制 #### L298N芯片简介 L298N是一款双极型H桥驱动器,能够用于驱动直流电机或步进电机。其最大输出电流可达2A(峰值),支持高达46V的工作电压[^1]。 #### STM32F1系列微控制器概述 STM32F1系列属于ARM Cortex-M3架构的高性能微控制器家族,具有丰富的外设资源和灵活的GPIO配置功能,非常适合用于复杂的电机控制系统[^2]。 --- #### 硬件连接方案 为了实现STM32F1对L298N的控制,需要完成如下硬件接线: | **L298N引脚** | **STM32F1 GPIO映射** | |------------------|------------------------| | IN1 | PA0 | | IN2 | PA1 | | ENA | PB0 (使能端) | | IN3 | PA2 | | IN4 | PA3 | | ENB | PB1 (使能端) | 注意:L298N的`ENA`和`ENB`分别对应两路电机的使能信号,通过PWM波形调节占空比可改变电机转速[^1]。 --- #### 软件配置流程 以下是基于STM32CubeMX工具链的软件配置过程: 1. **初始化时钟** 使用默认的内部RC振荡器或者外部晶振设置系统时钟频率至72MHz。 2. **GPIO配置** 将PA0~PA3配置为通用推挽输出模式,PB0和PB1配置为TIM PWM输出通道。 3. **定时器配置** 启用TIM2作为PWM发生器,生成两个独立的PWM信号来控制L298N的`ENA`和`ENB`输入。 4. **中断服务程序** 如果需要实时调整速度或方向,则可以通过外部中断触发相应的回调函数处理逻辑。 --- #### 示例代码展示 下面提供一段完整的C语言源码供参考: ```c #include "stm32f1xx_hal.h" // 定义全局变量 uint8_t direction_flag = 0; void Motor_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); // 配置IN1-IN4为输出模式 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化PWM输出(ENA/ENB) TIM_HandleTypeDef htim2; __HAL_RCC_TIM2_CLK_ENABLE(); TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 71; // 设置预分频系数 htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 999; // 占空比范围设定 HAL_TIM_PWM_Init(&htim2); } void Set_Speed(uint16_t speed_value){ __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, speed_value); // 修改比较寄存器值 } void Change_Direction(){ static uint8_t state[] = {0b0001, 0b0010, 0b0100, 0b1000}; if(direction_flag >= sizeof(state)/sizeof(*state)){ direction_flag = 0; } HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, ((state[direction_flag] >> 0) & 0x01)); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, ((state[direction_flag] >> 1) & 0x01)); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, ((state[direction_flag] >> 2) & 0x01)); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, ((state[direction_flag] >> 3) & 0x01)); direction_flag++; } ``` 此代码片段实现了基本的速度调节以及转向切换操作[^3]。 --- #### 注意事项 - 在实际项目中应加入必要的保护措施防止过流损坏器件; - 根据具体应用场景合理选择供电电压并匹配合适的散热装置; - 测试阶段建议从小功率负载开始逐步增加直至满足需求为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值