news 2026/4/29 14:08:49

基于GD32的直流无刷电机控制算法实现和验证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于GD32的直流无刷电机控制算法实现和验证

目录

1 项目概述

1.1 项目背景

1.2 系统功能介绍

1.3 系统使用的技术要点

2 系统硬件框架结构

2.1 电机PWM接口

2.2 电流采样接口

2.3 编码器接口

3 驱动程序实现

3.1 PWM 功能实现

3.1.1 PWM接口配置

3.1.2 验证PWM输出波形

3.2 AS5600的驱动

3.2.1 AS5600与MCU之间的电路结构

3.2.2 驱动程序实现

3.2.3 验证角度值

3.3 读取电流值驱动

3.3.1 MCU的ADC与驱动板接口

3.3.2 电流数据验证

3.4 RT-Thread Nano版本在GB32上的移植

4 控制算法实现

4.1 FOC控制算法

4.1.1 FOC控制算法的模型

4.1.2 Clarke和Park变换数学原理

4.2 PID算法实现原理

4.2.1 闭环控制系统模型

4.2.2 PID算法模型

5 功能验证

5.1 开环控制(设置Vq)

5.2 速度环实现和PID调参验证

5.2.1 电机加速-PID算法验证

5.2.2 电机减速-PID算法

5.2.3 kd参数对速度环的影响


测试视频:

【兆易创新 GD32F5】直流无刷电机控制FOC算法的实现和验证_哔哩哔哩_bilibili

【兆易创新 GD32F5】直流无刷电机控制FOC算法的实现和验证-角度、svpwm波形_哔哩哔哩_bilibili

【兆易创新 GD32F5】直流无刷电机控制FOC算法的实现和验证_哔哩哔哩_bilibili

1 项目概述

1.1 项目背景

如果要问当下那个行业最火,当属人形机器人行业。而机器人最核心的执行设备为关节,控制关节的动力来源一般为电机,而直流无刷电机控制需要专门的控制电路和软件控制算法,以实现其精确的位置,速度控制。

本项目主要是基于 GD32F527I-EVAL开发板,应用RT-Thread软件操作系统,设计一套直流无刷电机的控制算法,实现闭环速度、位置等功能的控制和参数验证。

1.2 系统功能介绍

基于GD32F527I-EVAL开发板实现如下功能:

1) 移植RT-Thread Nano,管理整个系统资源

2) 实现FOC控制算法,并计算个输出PWM控制波至BLCD直流无刷电机驱动驱动模块。

3)BLCD通过转换电路将PWM

4) 编码器模块

-- 1) GD32F527I驱动AS5600芯片获取编码器的角度值

-- 2) 将机械角度转换为电角度,在FOC算法中使用该角度计算SVPWM的值

5) 电机控制算法实现的主要功能:

--1) 开环控制: 该环主要验证FOC算法的是否能满足驱动电机的功能,无需加上PID算法

--2)闭环控制(速度环):使用编码器测试电机的转动角度,并根据该值计算速度值。基于该值使用PID算法形成闭环控制。

--3)闭环控制(位置环):使用编码器测试电机的转动角度,并根据该值计算电机当前转过的线性值。基于该值使用PID算法形成闭环控制。

1.3 系统使用的技术要点

1)主控模块基于RT-Thread 软件架构设计

2)使用的MCU: GD32F527I

  1. 硬件开发板: GD32F527I-EVAL,

  2. 开发软件和工具: RT-Studio , Keil, Visual Code ,VOFA

3)开发语言: C语言,

6) 控制算法: PID控制技术,FOC控制算法,SVPWM

7)编码器测试技术

8) I2C总线挂载多个设备,实时进行数据传输

9)控制:PWM调速,运动方向控制,直流无刷电机控制原理

10)RT-Thread Nano版本在GD32F527I上的移植

2 系统硬件框架结构

2.1 电机PWM接口

1) MCU上 IO接口位置: pwm波频率:20 K hz , 对应的时间为: 20 000 Hz 近似 5us

2)其对应摄像头上的插针接口位置

3) 原理图上位置:

2.2 电流采样接口

1) MCU上 IO接口位置

2) 其对应摄像头上的插针接口位置

3) 原理图上位置:

2.3 编码器接口

1) MCU上 IO接口位置

2) 其对应摄像头上的插针接口位置

3) 其对应摄像头上的插针接口位置

3 驱动程序实现

3.1 PWM 功能实现

3.1.1 PWM接口配置

1) 直流无刷电机的驱动板与MCU之间的通过PWM信号进行控制,其接口电路框架结构如下:

3)通过定时器配置PWM输出功能

3.1.2 验证PWM输出波形

配置PWM的的占空比,使用逻辑分析仪观察波形的占空比,其具体波形如下:

1) 程序中配置占空比参数如下:

2) 逻辑分析仪测试的波形

PWM-U路波形

PWM-V路波形

PWM-W路波形

3.2 AS5600的驱动

3.2.1 AS5600与MCU之间的电路结构

AS5600与MCU之间通过I2C接口连接,其与磁环和电机一起集成在电机控制单元中。具体连接结构图如下:

3.2.2 驱动程序实现

3.2.3 验证角度值

电机模块与开发板的连接结构图如下:

用手拨动电机旋转,使用VOFA接收编码器的数据,并显示波形数据

使用定时器单次读取AS5600的角度值数据所需要的时间为:

3.3 读取电流值驱动

3.3.1 MCU的ADC与驱动板接口

使用GB32的PA4和PA6接口采样电流值

电机驱动板上的电流输入接口位置如下图:

3.3.2 电流数据验证

电路连接方式如下:

驱动电机转动,并使用VOFA显示数据的波形,具体波形如下:

数据log如下:

3.4 RT-Thread Nano版本在GB32上的移植

笔者使用GB32板卡作为电机的控制模块,为了更好的利用GB32的资源,这里选用RT-Thread Nano版本作为该MCU的操作系统。在使用该系统之前,需要移植该系统,其具体步骤如下:

Step -1:在Keil IDE上选择RTOS(笔者已经安装了RT-Thread packet)

Step-2: 配置相关的代码

1)在board.c文件中添加MCU的时钟初始化函数

2)在rtconfig.h文件中使能RT_USING_CONSOLE

3) 实现console的相关接口

4)控制台命令接口

5) SysTick_Handler函数调用rt_os_tick_callback函数

step-3: 测试RT-Thread运行情况,当系统打印如下log信息,说明RT-Thread在板卡上已经移植成功。

4 控制算法实现

4.1 FOC控制算法

4.1.1 FOC控制算法的模型

模型介绍:

  1. 测量:通过电流传感器测量电机的两相或三相电流,通过编码器测量转子角度 (θ)。

  2. Clarke变换:将三相电流转换为两相静止坐标系下的 。

  3. Park变换:利用转子角度 θ,将转换为旋转坐标系下的直流分量

  4. PI控制:将测量到的与给定的目标值 进行比较,通过PI控制器计算出需要施加的电压

  5. Park逆变换:将控制器的输出利用角度 θ 反变换回静止坐标系下的

  6. SVPWM:利用 () 生成驱动三相逆变器的PWM信号,最终产生所需的三相电压施加到电机上。

4.1.2 Clarke和Park变换数学原理

矢量控制(FOC)中的完整流程 如下:

1) Clarke变换数学原理

Clarke变换是将坐标系从三相静止坐标系(a, b, c)变换到两相静止坐标系(α, β)。

假设三相电流是平衡的,即

等幅值变换(变换前后矢量幅值不变):

为了计算方便,通常假设:, 所以, 上式可以简化为:

等功率变换(变换前后功率不变):矩阵系数会有所不同,但在FOC中常用等幅值变换。

2) Park变换数学原理

Park变换是将坐标系从两相静止坐标系(α, β)变换到两相旋转坐标系(d, q)。 Park变换需要一个关键参数:转子当前的电角度 θ。这个角度通常通过编码器等位置传感器获得。

其逆变换(Park反变换)为:

4.2 PID算法实现原理

4.2.1 闭环控制系统模型

闭环(Closed Loop):控制器输出值给被控对象,同时获取被控对象的反馈,控制器知道被控对象的执行状态,可以根据反馈修改输出值以优化控制。其控制模型如下:

4.2.2 PID算法模型

核心思想:根据系统的“当前误差”(P)、“过去累积的误差”(I)和“未来误差的变化趋势”(D)这三个因素,通过线性组合的方式计算出控制量,从而让被控对象(电机转速)快速、准确、稳定地达到并维持在目标值(Setpoint)。PID算法是一种常用的反馈控制算法,全称为Proportional-Integral-Derivative。它根据测量值与设定值的差距,经过比例、积分和微分的处理,得到控制器的输出。 其定义如下:

具体控制模型如下图:

离散化的PID控制算法(位置式)公式如下:

5 功能验证

5.1 开环控制(设置Vq)

根据FOC 控制算法的原理,设置Vq的值,驱动电机转动,观察角度值的变化,同时逆变器输出的电压波形图,本测试不将加入PID相关的自动控制算法。

系统电源的工作最大电压为: 12V

电机Uq的取值范围为:(-6, 6),单位为: V

1) 设置Uq = 1(v)时,电压运行的状态

参数意义:

2)设置Uq = 4(v)时,电压运行速度明显加快,其波形如下:

3) 验证算法的运行时间:

使用示波器验证foc算法的运行时间, 通过波形可得,该算法消耗时间为: 256.688 ns

5.2 速度环实现和PID调参验证

5.2.1 电机加速-PID算法验证

目标速度值为: 20 rad/s

运行的波形图:

5.2.2 电机减速-PID算法

目标速度值为: 12 rad/s

运行的波形图:

当前运行速度: 20 rad/s

目标速度值为: 1 rad/s

运行的波形图:

5.2.3 kd参数对速度环的影响

更改PID参数如下:

当前运行速度:20 rad/s

目标速度值为:1 rad/s

运行的波形图如下,其和4.2.2中的运行波形相比,调节速度明显快很多。

当前运行速度: 1 rad/s

目标速度值为: 20 rad/s

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 1:15:10

Python 3 文件操作详解

Python 3 文件操作详解 引言 Python 3 作为一种强大的编程语言,在文件操作方面提供了丰富的功能。无论是读取、写入还是修改文件,Python 都能轻松应对。本文将详细介绍 Python 3 中文件操作的相关知识,包括文件打开、读取、写入、关闭等基本操作,以及文件路径处理、文件权…

作者头像 李华
网站建设 2026/4/19 17:19:16

微爱帮监狱写信寄信小程序与中国邮政焦作支局战略合作技术方案

一、合作背景微爱帮与中国邮政焦作支局达成战略合作,共同构建安全、可靠的监狱信件传输体系,确保特殊群体通信的合法合规与信息安全。二、信件安全保障方案1. 双层安全审核机制class LetterSecuritySystem:def __init__(self):self.content_scanner Con…

作者头像 李华
网站建设 2026/4/28 19:31:30

如何轻松的写一篇内容

管不住顺手刷社媒,那就反手写内容!2024年做个决定,每周关注一个话题,然后写一篇内容,要尽量用花里胡哨的表达风格。就是为了练键盘,文字随便敲。如果只写专业的方向,固定的实践经验和思路&#…

作者头像 李华
网站建设 2026/4/28 20:55:44

GCC -fhardened 面向生产构建的安全加固落地指南

GCC 14 引入的 -fhardened 是一个面向生产环境的安全加固选项集合,旨在不改变 ABI 的前提下,系统性启用主流 Linux 平台的编译期与链接期防护能力。本文将深入解析 -fhardened 的设计目标、与 PIE/ASLR 的关系、与 LTO 的已知问题,以及在 CMa…

作者头像 李华
网站建设 2026/4/28 7:20:38

首尔大学团队揭秘:为什么AI绘画总是用“高斯分布“?

这项由首尔大学数据科学研究院的李俊豪、金官锡和李俊锡团队完成的研究发表于2025年12月的《机器学习研究汇刊》(Transactions on Machine Learning Research),感兴趣的读者可以通过论文编号arXiv:2512.18184查阅完整内容。说到AI绘画&#x…

作者头像 李华