HAL库STM32驱动电机

本文介绍了使用串级PID算法控制电机旋转,外环为位置环,内环为速度环,详细阐述了PID的初始化和计算过程,强调了参数调整的重要性。同时,通过电机编码器捕获高电平时间,实现对电机转动方向和圈数的判断,但数据处理中采用了平均值可能导致滞后性。
    • PID

首先想要驱动电机按照我们所前往的方向、所需要的速度旋转,少不得的就是PID算法。

我在这次编写代码的过程中所运动到的是串级PID:外环为位置环、内环则是速度环。

首先是PID的初始化,外环的位置环,因为运用到的是位置PID,位置PID在Integral项运动的是误差的积分,所以需要抗饱和,在此处加上了一个最值限幅,两种方式的PID在最后的输出处我都用上了限幅,防止炸电机。(为了代码的美观性,我也是在开头define了一个比例系数[狗头])

下面就是PID的一个计算过程,也是非常的常见,PID最艰难的并不是什么编写代码什么的,而是和卡尔曼滤波等一样的调参[哭泣]

    • 编码器

下面就是通过电机的编码器,来读出电机的一些基本属性。博主在这里并没有直接运用编码器,而是通过捕获电机的高低电平变化来计算出高电平时间,然后通过IO口读取编码器B相的电平状态来判断毛刺,避免误差,因为博主编写的是小车四个轮子即四个电机的代码,所以在此处就放上其中一个电机的代码以作参考,首先是一些参数的定义

然后是电机的初始化

最后就是关于电机的代码,博主在最后计算出来的高电平时间采用了一个平均值的计算,所以不可避免地导致最后在VOFA上数值波形的滞后性,大家可以按照自己的实际情况进行取舍

这篇文章也存在着许多的不足,希望读者可以多加改正。

### STM32 HAL实现电机驱动 #### 1. 软件开发环境概述 STM32电机控制可以通过 HAL 完成,其工作流通常包括以下几个方面:使用 MotorControl Workbench (MCSDK) 创建工程,在 STM32CubeMX 中生成代码,并通过 CubeIDE 或 Keil 进行调试、编译与下载[^1]。 #### 2. GPIO 配置 为了控制电机驱动模块,需要在 STM32CubeMX 中配置相应的 GPIO 引脚。具体操作是在 STM32CubeIDE 中右键单击项目文件并选择 “Properties” 菜单项来调整设置[^2]。 #### 3. PWM 控制的实现 PWM 是电机驱动的核心技术之一。对于基于 STM32F103C8T6 的应用,可以利用 HAL 中的 TIM_PWM_Init 函数初始化定时器以生成 PWM 波形。以下是基本的 PWM 初始化代码示例: ```c // 定义TIM_HandleTypeDef结构体变量 TIM_HandleTypeDef htim3; void MX_TIM3_Init(void) { __HAL_RCC_TIM3_CLK_ENABLE(); // 启用TIM3时钟 TIM_OC_InitTypeDef sConfigOC; htim3.Instance = TIM3; // 设置使用的定时器实例为TIM3 htim3.Init.Prescaler = 83; // 预分频器值 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式向上计数 htim3.Init.Period = 999; // 自动重装载寄存器周期值 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 时钟分割 if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; // 设置为PWM模式1 sConfigOC.Pulse = 500; // 初始占空比 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; // 输出极性高电平有效 if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } HAL_TIM_MspPostInit(&htim3); // 初始化外设GPIO } ``` 上述代码展示了如何使用 HAL 初始化一个用于生成 PWM 波形的定时器[^4]。 #### 4. SVPWM 实现 空间矢量脉宽调制(SVPWM)是一种高效的电机控制算法。其实现过程涉及复杂的数学计算,但在 HAL 的支持下,可以通过 IQmath 提供的功能简化这些运算。具体的实现方法可参考相关文档或案例研究。 #### 5. 流程图说明 程序的整体流程可以根据 simpleFOC 官方的速度开环控制示例进行设计。该流程主要包括初始化硬件资源、设定目标速度、读取反馈信号以及执行闭环调节等环节[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值