STM32无刷电机控制中滑膜观测器的应用与电机调整指南

发布者:BlissfulMoments最新更新时间:2025-09-23 来源: cnblogs关键字:STM32  无刷电机控制 手机看文章 扫描二维码
随时随地手机看文章

这个教程是针对KY_Motor的无刷电机开发板,滑膜观测器反正切的补充教程,大家比较关注现有的程序如何适配到自己的电机上,因此我们团队推出了如下教程,让大家在学习的过程中有迹可循。

e8132ece6313a863af56c376d2feff27_1dcd1cfaed4f4418bded87e812bb391c.png?imageView2/2/w/1000

开发板链接:开发板

1. 电机电气参数

电机的定子电阻 Rs 和定子电感 Ls 是影响电机控制的重要参数,不同电机的这两个参数可能会有较大差异。需要参考新电机的规格书获取这些参数,并更新到代码中。


积分系数 Ki


  • 文件位置:Userconfig.h 和 Sensorless_SMO.h

  • 修改方法:


// Userconfig.h

#define  Motor_Rs   新电机定子电阻值f  // 根据新电机规格书修改

#define  Motor_Ls   新电机定子电感值f  // 根据新电机规格书修改


// Sensorless_SMO.h

typedef struct{

    float  Rs;                // 定子电阻,更新为新电机的定子电阻

    float  Ls;                // 定子电感,更新为新电机的定子电感

    // 其他参数...

} SMO_Motor;


#define SMO_Motor_DEFAULTS {新电机定子电阻值, 新电机定子电感值, 0.0, 0.0, 0.0, 0, 0, 0.0, 0.0}

2. 电机极对数

电机的极对数 POLES 也会影响电机的控制,不同电机的极对数可能不同。需要根据新电机的规格书更新该参数。

文件位置:Userconfig.h 和 Sensorless_SMO.h

// Userconfig.h

#define  Motor_Pn   新电机极对数  // 根据新电机规格书修改


// Sensorless_SMO.h

typedef struct{

    // 其他参数...

    uint32_t   POLES;         // 电机极对数,更新为新电机的极对数

    // 其他参数...

} SMO_Motor;


#define SMO_Motor_DEFAULTS {0.0, 0.0, 0.0, 0.0, 0.0, 新电机极对数, 0, 0.0, 0.0}

3. 速度设定值

新电机的最大和最小转速可能与原电机不同,需要调整最大速度 MAXSpeed 和最小速度 MinSpeed,以及速度参考函数 SPEEDREF。

文件位置:Userconfig.h

// Userconfig.h 

 #define MAXSpeed 新电机最大转速 // 根据新电机规格书修改

 #define MinSpeed 新电机最小转速 // 根据新电机规格书修改 

 #define SPEEDREF(X) ((MAXSpeed - MinSpeed)/4096.0*X + MinSpeed)

4. 对齐和开环运行电压设定值

电机的对齐和开环运行阶段的电压设定值 UD_Align、UQ_Align、UD_Open 和 UQ_Open 可能需要根据新电机的特性进行调整。

文件位置:Userconfig.h

// Userconfig.h

#define UD_Align               _IQ(新的对齐阶段d轴电压值)  // 根据新电机特性调整

#define UQ_Align               _IQ(新的对齐阶段q轴电压值)  // 根据新电机特性调整

#define UD_Open                _IQ(新的开环运行阶段d轴电压值)  // 根据新电机特性调整

#define UQ_Open                _IQ(新的开环运行阶段q轴电压值)  // 根据新电机特性调整

5. PI 控制器参数

PI 控制器用于控制电机的电流和速度,不同电机的动态特性可能不同,需要调整 PI 控制器的参数 Kp 和 Ki。

文件位置:PI_Controler.c

修改方法:

// PI_Controler.c

void PI_init(void)

{

    /*******d轴电流PI控制器参数**************/

    pi_id.Kp   = _IQ(新的d轴电流Kp值);  // 根据新电机特性调整

    pi_id.Ki   = _IQ(新的d轴电流Ki值);  // 根据新电机特性调整

    // 其他参数...


    /*******q轴电流PI控制器参数**************/

    pi_iq.Kp   = _IQ(新的q轴电流Kp值);  // 根据新电机特性调整

    pi_iq.Ki   = _IQ(新的q轴电流Ki值);  // 根据新电机特性调整

    // 其他参数...


    /*******速度PI控制器参数**************/

    pi_spd.Kp   = _IQ(新的速度Kp值);  // 根据新电机特性调整

    pi_spd.Ki   = _IQ(新的速度Ki值);  // 根据新电机特性调整

    // 其他参数...

}

        更换电机后,需要重点关注电机的电气参数(电阻、电感、极对数)、速度设定值、对齐和开环运行电压设定值以及 PI 控制器参数。在修改参数时,应参考新电机的规格书,确保参数的准确性。同时,在修改程序后,需要进行充分的测试,以确保电机能够正常运行。


电机的对齐和开环运行阶段的电压设定值 UD_Align、UQ_Align、UD_Open 和 UQ_Open 可能需要根据新电机的特性进行调整,那么这几个参数怎么改?


UD_Align、UQ_Align、UD_Open 和 UQ_Open 这些参数在电机的对齐和开环运行阶段起着关键作用,它们分别代表 d 轴和 q 轴的电压设定值。更换电机后,由于新电机的电气特性(如电阻、电感、极对数等)可能与原电机不同,这些参数需要根据新电机的特性进行调整。以下是调整这些参数的详细步骤:


对齐阶段(UD_Align 和 UQ_Align)

UD_Align:d 轴电压主要用于建立电机的磁场。一般来说,可以先将 UD_Align 设置为一个较小的正值,例如 _IQ(0.05) 或 _IQ(0.1)。如果电机在对齐阶段无法正常对齐,可以适当增加 UD_Align 的值。

UQ_Align:q 轴电压用于产生转矩。在对齐阶段,通常希望电机静止,因此可以将 UQ_Align 设置为 0,即 _IQ(0.0)。

开环运行阶段(UD_Open 和 UQ_Open)

UD_Open:在开环运行阶段,d 轴电压通常用于维持电机的磁场。可以根据电机的额定电流和电阻来估算 d 轴电压的大小。一般来说,可以将 UD_Open 设置为一个较小的正值,例如 _IQ(0.0) 或 _IQ(0.05)。

UQ_Open:q 轴电压用于产生转矩,控制电机的转速。可以根据电机的额定功率和转速来估算 q 轴电压的大小。可以从一个较小的电压值开始,逐渐增加 UQ_Open 的值,观察电机的转速变化,直到达到所需的转速。

PI参数调整

PI 控制器用于控制电机的电流和速度,不同电机的动态特性可能不同,需要调整 PI 控制器的参数 Kp 和 Ki 这个参数应该怎么更改

#include 'PI_Controler.h'


/************电流 - 速度控制器初始化**************/


PI_CONTROLLER pi_id = PI_CONTROLLER_DEFAULTS; //d轴电流控制器

PI_CONTROLLER pi_iq = PI_CONTROLLER_DEFAULTS; //q轴电流控制器

PI_CONTROLLER pi_spd = PI_CONTROLLER_DEFAULTS; //速度控制器


void PI_init(void)

{

  /*******d轴电流控制器**************/

  

  pi_id.Kp   = _IQ(新的d轴比例系数值);

  pi_id.Ki   = _IQ(新的d轴积分系数值);

  pi_id.Umax = _IQ(0.4);

  pi_id.Umin = _IQ(-0.4); 

  pi_id.Kslf = _IQ(0.1057073975);   // 低通滤波系数 _IQ(0.1057073975); 

  pi_id.ui = 0;

  pi_id.i1 = 0; 

  

  /*******q轴电流控制器**************/


  pi_iq.Kp   = _IQ(新的q轴比例系数值);

  pi_iq.Ki   = _IQ(新的q轴积分系数值); 

  pi_iq.Umax = _IQ(0.8);

  pi_iq.Umin = _IQ(-0.3);

  pi_iq.Kslf = _IQ(0.1057073975);  // 低通滤波系数 _IQ(0.1057073975); 

  pi_iq.ui = 0;

  pi_iq.i1 = _IQ(0.15); 

  

 /*******速度控制器**************/  

  

   pi_spd.Kp   = _IQ(新的速度比例系数值);

   pi_spd.Ki   = _IQ(新的速度积分系数值); 

   pi_spd.Umax = _IQ(0.65);

   pi_spd.Umin = _IQ(-0.65);

   pi_spd.ui = 0;

   pi_spd.i1 = _IQ(0.15);  

}


  • 具体调整方法

  • 比例系数 Kp
  • 作用:Kp 决定了控制器对误差的响应速度。Kp 值越大,控制器对误差的响应越迅速,系统的动态响应速度越快,但可能会导致系统出现较大的超调甚至不稳定。

  • 调整方法:可以先将 Kp 设置为一个较小的值,例如 _IQ(0.1),然后逐渐增加 Kp 的值,观察电机的响应。如果电机的响应速度较慢,可以适当增加 Kp 的值;如果电机出现超调或不稳定的情况,需要减小 Kp 的值。

  • 作用:Ki 用于消除系统的稳态误差。Ki 值越大,积分作用越强,系统消除稳态误差的速度越快,但可能会导致系统出现积分饱和现象,使系统的动态性能变差。

  • 调整方法:在调整 Ki 之前,需要先将 Kp 调整到一个合适的值。可以先将 Ki 设置为 0,然后逐渐增加 Ki 的值,观察电机的稳态误差。如果电机存在稳态误差,可以适当增加 Ki 的值;如果电机出现积分饱和现象,需要减小 Ki 的值。


  • pi_id.Kslf = _IQ(0.1057073975); // 低通滤波系数 _IQ(0.1057073975); 这个低通滤波参数是怎么确定?

  • 在电机控制中,pi_id.Kslf 这样的低通滤波系数用于对信号进行平滑处理,减少噪声和高频干扰的影响,以提高系统的稳定性和控制精度。确定这个低通滤波系数通常可以采用理论计算、经验取值和实验调整等方法,下面详细介绍:

  • 1. 理论计算方法

    低通滤波器常用一阶惯性环节来表示,其传递函数为:

  •  

    要通过理论计算确定 Kslf,可以按以下步骤进行:

  • 确定时间常数 T:根据电机系统的特性和需要滤除的噪声频率范围来选择合适的时间常数 T。例如,如果需要滤除较高频率的噪声,可以选择较小的 T 值;如果希望对信号的变化响应较慢,可以选择较大的 T 值。

  • 确定采样周期 (T_s):采样周期 (T_s) 由控制系统的硬件和软件决定,通常是固定的。在你的代码中,Control_Ts = 0.000080f 表示采样周期为 (80 mu s)。

  • 计算滤波系数 (alpha):将 T 和 Ts 代入公式 中,计算得到滤波系数 α。

  • 2. 经验取值方法

            在实际应用中,也可以根据经验来选择低通滤波系数。一般来说,滤波系数的取值范围在 0 到 1 之间,取值越大,滤波器对输入信号的响应越快,但对噪声的抑制能力越弱;取值越小,滤波器对噪声的抑制能力越强,但对输入信号的响应越慢。


    以下是一些常见的经验取值范围:

  • 当需要快速响应信号变化时,可以选择较大的滤波系数,例如 0.2 到 0.5。

  • 当需要较强的噪声抑制能力时,可以选择较小的滤波系数,例如 0.05 到 0.2。

  •         代码中,pi_id.Kslf = _IQ(0.1057073975) 就是一个经验取值,这个值相对较小,说明滤波器对噪声的抑制能力较强,但对信号的响应较慢。

            还可以通过仿真的方式获取,方法有很多种,每个人选择的也不同,有人擅长计算,有人经验丰富,有人运气好,随便拿个参数,电机就能运转正常。


关键字:STM32  无刷电机控制 引用地址:STM32无刷电机控制中滑膜观测器的应用与电机调整指南

上一篇:STM32核心知识入门指南:标准库、HAL库与STM32CubeMX零基础详解
下一篇:STM32 ADC学习笔记:多重转换、内部参考电压、过采样、逐次逼近原理与采样时间详解

推荐阅读最新更新时间:2026-03-20 11:43

CW32电机控制基础--无刷直流电机的工作原理
一、三个基本定则 1.左手定则 位于磁场中的载流导体,会受到力的作用,力的方向可按左手定则确定,如4-19图所示:伸开左手,使大拇指和其余四指垂直,把手心面向N极,四指顺着电流的方向,那么大拇指所指方向就是载流导体在磁场中的受力方向。 力的大小为: F =BIL 其中:B为磁感应强度(单位:T),I为电流大小(单位:A), L为导体有效长度(单位:m),F为力的大小(单位 N)。 如果磁感应强度B的方向和电流I的方向不互相垂直,而是成一定夹角q,则力的大小为:F =BILsinq。 图1 左手定则 考虑到一个线圈往往有两个有效边AD和CD,如图2(a)所示。在磁场中它们的受力方向正好相反,如图2(b)所示。它们所产生的转矩TD
[嵌入式]
CW32<font color='red'>电机控制</font>基础--<font color='red'>无刷</font>直流电机的工作原理
CW32电机控制基础——无刷直流电机的数学模型
无刷直流电机绕组中的感应电动势与电机转速匝数成正比,电枢绕组串联公式为 其中,E是无刷直流电机电枢感应线电动势(V);p为电机的极对数,α为极弧系数;W为电枢绕组每相串联的匝数;ф为每极磁通;n为转速(r/min); 假定电机定子三相完全对称,空间上互差120°电角度;三相绕组电阻、电感参数完全相同;转子永磁体产生的气隙磁场为方波,三相绕组反电动势为梯形波;忽略定子绕组电枢反应的影响;电机气隙磁导均匀,磁路不饱和,不计涡流损耗;电枢、绕组间互感忽略。无刷直流电机的数学模型方程如式2所示, 其中,Va,Vb,Vc和Vn 分别为三相端电压和中点电压,R和L为三相电枢绕组电阻和电感,Ea,Eb,Ec为三相反电动势
[嵌入式]
CW32<font color='red'>电机控制</font>基础——<font color='red'>无刷</font>直流电机的数学模型
直流电机控制器:有刷与无刷
直流电机控制器是用于管理直流电机运行的特殊电子设备。所有直流电机都需要控制器吗?一点也不。让我们弄清楚哪些直流电机使用它以及用于什么目的。 直流电机控制器是用于管理直流电机运行的特殊电子设备。所有直流电机都需要控制器吗?一点也不。让我们弄清楚哪些直流电机使用它以及用于什么目的。 在本文中,我们将研究两种类型的直流电机:有刷直流 (BDC) 和无刷直流 (BLDC) 电机。两种类型都使用控制器,可以启动和停止电机,调节其速度和扭矩,以及执行其他功能。然而,控制器对于 BLDC 电机更为重要,因为它是换向过程的一部分,对于所有由直流电供电的电机都至关重要。在这里,您将了解有关有刷和无刷直流电机及其控制系统之间的差异的更多信息。
[嵌入式]
直流<font color='red'>电机控制</font>器:有刷与<font color='red'>无刷</font>
低成本无刷直流电机控制MCU
电机对能耗的贡献率在美国接近50%,因此降低电机能耗能有效地提高能源利用率,而采用先进的微控制器(MCU)技术来实现电机控制是一种有效的方法。本文介绍了的电机控制MCU技术发展及其应用。 降低能耗的一个主要对象是电机,它消耗了美国总能耗的大约50%。家庭里随便都可以找到超过50个电机,一般会有70到80个,在工业领域,工厂自动控制对电机的利用也很广泛。 今天,MCU技术的近发展允许电机能在更低的成本下更高效地运行。在某些市场上,这能加快从机电向电子控制的转变,从而能实现变速电机控制以优化电机的工作效率,并在器件的层面上降低所有应用的成本。 低成本无刷直流电机控制MCU 与经常应用在电机控制中的有刷电机相比,MCU控制的
[单片机]
低成本<font color='red'>无刷</font>直流<font color='red'>电机控制</font>MCU
L6234无刷直流电机控制-简易版
我本来今天想来一发源码分析的,但是我手头没有鼠标,我一想截图那么多就算了,我发一个 电机 驱动的代码就行。 SimpleFoc-云台电机2804+AS5600 SimpleFoc-原理图(STL6234+INA240) 所以一个输出要两个接口控制 L6234 驱动器有 3 个输出:OUT1、OUT2 和 OUT3。每个输出由 2 个引脚控制:输入 (IN) 和使能 (EN),例如 OUT1 由 IN1 和 EN1 控制。下图显示了每个半桥的控制逻辑: 逻辑电平 输出电平 另外这个原理图看左边,为了方便可以把使能脚直接都拉低 这样使用三个引脚 模拟 也是可以的 1.L6234 三相 电机驱动器 2
[嵌入式]
L6234<font color='red'>无刷</font>直流<font color='red'>电机控制</font>-简易版
带霍尔传感器的三相无刷直流电机控制
无刷直流电动机 (BLDC),也称为电子换向电动机(ECM、EC 电动机)或同步直流电动机,是由直流电通过逆变器或开关电源供电的同步电动机,该同步电动机会产生交流电流来驱动各相通过闭环控制器控制电机。控制器向控制电机速度和扭矩的电机绕组提供电流脉冲。 与有刷电机相比,无刷电机的优势在于高功率重量比、高速度和电子控制。无刷电机在计算机外围设备(磁盘驱动器、打印机)、手持电动工具以及从模型飞机到汽车的车辆等地方都有应用。 该项目描述了如何使用 GreenPAK™ 控制三相无刷直流电机。 下面我们描述了了解解决方案如何编程以创建直流电机控制所需的步骤。但是,如果您只是想得到编程的结果,下载GreenPAK Designer 软件
[嵌入式]
带霍尔传感器的三相<font color='red'>无刷</font>直流<font color='red'>电机控制</font>
东芝推出面向家用电器及工业设备的三相无刷电机控制器IC
东芝电子元件及存储装置株式会社(“东芝”)今日宣布,推出两款三相无刷电机控制器IC,分别是采用SSOP30封装的“TC78B041FNG”和采用VQFN32封装的“TC78B042FTG”。两款产品均采用东芝原创的自动相位调节功能InPAC ---该技术不仅可消除相位调节,还能在宽电机转速范围内实现高效率。这便于它们与各种不同电压和电流容量的电机驱动器结合使用,而且也能与输出阶段的智能功率器件结合使用。两款控制器适用于空调、空气净化器等家用电器以及工业设备,并于今天开始量产。 家用电器和工业设备制造商越来越多地采用变频器来控制风扇电机,以满足对提高能效并降低噪音的强劲需求。通常情况下,为了获得高效率,需要为每个独立的风扇
[电源管理]
东芝推出面向家用电器及工业设备的三相<font color='red'>无刷</font><font color='red'>电机控制</font>器IC
水磁无刷直流电机控制电路
主要介绍基于现场可编程门阵列(Field Programmable Gate Array,FP-GA)及EDA方法学的永磁无刷直流电机控制系统的电子电路设计。FPGA是一种高密度可编程逻辑器件,其逻辑功能的实现是通过把设计生成的数据文件配置进芯片内部的静态配置数据存储器(SRAM)来完成的,具有可重复编程性,可以灵活实现各种逻辑功能。 与ASIC不同的是,PCA本身只是标准的单元阵列,没有一般IC所具有的功能,但用户可以根据需要,通过专门的布局布线工具对其内部进行重新编程,在最短的时间内设计出自己专用的集成电路,从而大大提高了产品的竞争力。由于它以纯硬件的方式进行并行处理,而且不占用CPU资源,所以可以使系统达到很高的性能。这种新的
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved