Matlab/Simulink - BLDC直流无刷电机仿真基础教程(八) - 变电感法检测转子初始位置

前言

本系列文章分享如何使用Matlab的Simulink功能来进行BLDC无刷直流电机的基础仿真;本文章讲解如何应用变电感法检测BLDC无刷直流电机转子的初始位置。

相关演示操作在Matlab2023b中进行。

一、基本原理介绍

永磁同步电机绕组磁路饱和度受到永磁体转子位置和绕组电流的影响,进而影响电感值的大小。

此处引用一下论文《一种基于电感饱和效应的电流差值检测永磁同步电机转子初始位置的方法》中的相关图片与说明:

假设三相绕组对称,A相绕组电流如下图a所示,转子位置与作用于A相绕组的转子磁通 ϕ \phi ϕ 以及线圈电感 L L L 间的关系如图b所示,当 θ = π 2 \theta=\frac{\pi}{2} θ=2π 和 θ = 3 π 2 \theta=\frac{3\pi}{2} θ=23π 时,转子永磁磁路与绕组轴线正交,转子在绕组上的磁通分量 ϕ \phi ϕ 为零,绕组磁路饱和度最低,此时电感最大。当 θ = 0 \theta=0 θ=0 和 θ = π \theta=\pi θ=π 时,转子在绕组上的磁通分类 ϕ \phi ϕ 最大,绕组磁路饱和度最高,此时电感最小。( θ = 0 \theta=0 θ=0 和 θ = π \theta=\pi θ=π 时线圈电感不相等,存在差值 Δ L \Delta L ΔL ,原因在于绕组电流产生的绕组磁动势方向的影响。)


图片1.1 永磁同步电机转子结构及转子位置与电感的关系

基于此,可以知道当永磁同步电机静止时(无反电动势),对任意两相绕组注入幅值恒定的电压脉冲,此时对应的电路响应数学模型为:

U = R i ( t ) + L d i ( t ) d t i ( t ) = U [ 1 − e − ( R / L ) t ] / R \begin{gather} U=Ri(t)+L\frac{di(t)}{dt}\\ i(t)=U[1-e^{-(R/L)t}]/R \end{gather} U=Ri(t)+Ldtdi(t)i(t)=U[1−e−(R/L)t]/R

由式(2)可知,电流大小与时间常数 R / L R/L R/L 值有关,结合前文分析,可知当电感 L L L 增大,电流响应变化会更缓慢,电感 L L L 减小,电流响应变化剧

烈,可以据此来得到当前转子位置信息。

后续仿真测试,同样参照论文中的电压脉冲注入方法,为了消除剩磁影响,采用AB->AC->BC->BA->CA->CB的两相导通顺序注入进行实验。

二、仿真搭建

在上一篇文章中搭建的模型基础上,我们对BLDC模块进行修改;结合前述的分析,我们可以知道转子位置将会导致电机绕组电感值的变化,具体来说,d轴对应方向的电感值将会比较小,当绕组电流产生的磁动势与转子磁场方向一致时,电感最小,相反时,电感会略微大一些。

为了模拟这一电感的变化,我们这里设定模型定子的Modeling fidelity选项为Tabulated Ld and Lq,表示模型拟真度选项对应的DQ轴电感设定为打表计算数值,接下来设定Ld矩阵参数如图中所示为[0.00020,0.00020,0.00020;0.00030,0.00030,0.00030;0.00010,0.00010,0.00010],表示当d轴电流id为0时,Ld参数为0.0003H,d轴电流为200A时,Ld为0.0001H,d轴电流为-200A时,Ld为0.0002H,用于模拟转子正对方向电感值的减小;设定Lq矩阵参数为0.00030*ones(3,3),表示Lq电感值不受id、iq电流的影响。


图片2.1 BLDC模块设定电感查找表

接下来,我们取消BLDC模型的初始转子旋转速度的设定,而勾选初始转子角度选项,并设定为210deg。


图片2.2 BLDC模块设定转子初始角度

来到三相逆变器模块,我们在电源母线上添加一个电流传感器,并引出其输出和三相电压在一起,便于观察。


图片2.3 逆变器模块添加母线电流检测模块

接下来,使用constant常量模块,设定占空比为1,并取消原本的霍尔传感器给出的换相扇区,而从工作空间导入我们由脚本文件生成的逆变器导通顺序信号,此处命名为inverter_signal_data


图片2.4 模型模块连接初步修改示意图

这里所说的逆变器导通顺序信号,要用到from workspace模块,可以在库浏览器中进行搜索。


图片2.5 from workspace 模块

对于from workspace模块,填写数据一栏的内容为inverter_signal_data,表示会从工作空间中寻找命名为inverter_signal_data的变量数据来进行发送;设定采样时间为1e-5,表示10us采集一次。


图片2.6 逆变器信号数据导入

此外,这里我们需要令电机转子为静止,设定连接到理想转矩源模块的常量模块数值为0,表示没有外力作用在转子上。


图片2.7 置零外部转矩给定

接下来,我们进行.m脚本文件的编写,用于生成inverter_signal_data数据,脚本内容如下所示。

接下来在运行仿真模型前,需要首先运行此脚本文件;或者在模型设置的初始化回调函数中,设置自动执行该脚本文件。

matlab 复制代码
%% 逆变器开关状态数据生成器
% 生成时间步长0.001秒的离散状态序列

clc;
clear;
close all;

% ===== 参数设置 =====
t_start = 0;           % 起始时间(s)
t_end = 0.2;           % 结束时间(s)
dt = 1e-4;             % 时间步长(s)
state_duration = 1e-4; % 每个状态持续时间(s)
suspend_duration = 4*1e-4;  % 三相悬空状态持续时间

total_cycle_time = state_duration + suspend_duration;   % 完整周期时长
num_cycles = floor((t_end - t_start)/total_cycle_time); % 周期数

% ===== 生成时间序列 =====
t = t_start:dt:t_end;  % 时间向量

% ===== 生成开关状态序列 =====
state = zeros(size(t));
for i = 1:length(t)
    % 当前时间点
    current_t = t(i);

    % 计算当前处于第几轮周期
    cycle_idx = floor(current_t/total_cycle_time);

    % 周期内相对时间
    t_in_cycle = current_t - cycle_idx * total_cycle_time;

    % 判断处于基础状态还是悬空状态
    if t_in_cycle < state_duration-1e-5
        %基础状态,1~6循环
        state_idx = mod(cycle_idx, 6) + 1;
        state(i) = state_idx;
    else
        % 悬空状态
        state(i) = 7;
    end
end

% ===== 数据存储 =====
inverter_signal_data = [t', state'];       % 合并为两列矩阵

% ===== 可视化 =====
figure;
plot(t, state, 'LineWidth', 1.5);
ylim([0.5 6.5]);
yticks(1:6);
xlabel('Time (s)');
ylabel('Switch State');
title('Inverter Switching States');
grid on;

这里我们设定每次发送完一个脉冲后,都会关断逆变器一段时间来使电流续流完毕,因此在换相逻辑模块,为多开关模块添加一个状态7,设定对应的逆变器状态为全关,即[0 0 0 0 0 0]。


图片2.8 换相逻辑表添加逆变器全关处理

三、效果演示

这里我们需要仿真运行的时间比较短,可以设定仿真的停止时间为0.01,之后点击运行。


图片3.1 修改仿真停止时间

等待模型编译、运行完成之后,我们可以打开此前在逆变器模块添加的三相电压-母线电流的示波器,观察其波形的变化。


图片3.2 母线电流-三相电压波形图

截取电流的前六个脉冲的上半部分,可以看到第一个、第四个脉冲幅值比其余要高,且第四个脉冲最高,表明对应的电感最小。

对照电压波形,逆变器按照AC->BC->BA->CA->CB->AB的顺序进行导通切换,第四个脉冲对应CA,即C相上桥、A相下桥导通,此时产生的磁链方向与转子磁链方向大致相同。


图片3.3 母线电流-三相电压波形图(局部放大)

结合下图展示的BLDC电机模块导通相位与磁场方向(蓝色为N极,红色为S极,其中红色表示上桥导通,蓝色为下桥导通),可以知道第四个脉冲对应的CA相导通情况对应电机转子应该在180°~240°范围内,与我们此处设定的210°对应。


图片3.4 六步换相通电顺序-转子定位方向

为了进一步验证当前搭建的变电感法检测转子位置的效果,我们修改BLDC电机模块的初始转子角度为270°。


图片3.5 设定转子初始位置为270°

再次进行仿真,查看电压电流示波器波形数据,对应第五个电流脉冲幅值最高,即CB导通顺序(C相上桥导通、B相下桥导通)对应电感最小,表明转子角度在240°~300°范围内,与设定的270°一致。


图片3.6 修改转子初始角度后的母线电流-三相电压波形图

删减模型中暂时未用到的模块,现有模型如下图所示。


图片3.7 删减后的模型框架

文章相关模型文件下载链接

通过网盘分享的文件:BLDC直流无刷电机仿真基础教程(八) - 变电感法检测转子初始位置

链接:

https://pan.baidu.com/s/1UE5WlwLvlH9Pi4-kwg5o1w?pwd=dpkc 提取码: dpkc

参考

无刷电机转子位子检测------电感法

基于电感饱和效应的转子位置识别

【应用】使用微控制器进行初始位置检测,实现无传感器BLDC电机的平稳快速启动

基于脉冲法(IPD)实现转子初始定位

Sensorless startup methods

一种基于电感饱和效应的电流差值检测永磁同步电机转子初始位置的方法

XC866 - Start-up Control Algorithm for Sensorless and Variable Load BLDC Control Using Variable Inductance Sensing Method

相关推荐
88号技师3 小时前
2025年7月Renewable Energy-冬虫夏草优化算法Caterpillar Fungus Optimizer-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
slandarer15 小时前
MATLAB | 绘图复刻(二十二)| 带树状图的三角热图合集
matlab·nature
yugi98783817 小时前
使用MATLAB生成三维圆柱形Voronoi图
开发语言·matlab
88号技师17 小时前
2025年7月一区SCI-投影迭代优化算法Projection Iterative Methods-附Matlab免费代码
开发语言·人工智能·算法·机器学习·matlab·优化算法
WangYan20221 天前
MATLAB近红外光谱分析:MATLAB编程+BP神经网络+SVM+随机森林+遗传算法+变量降维+卷积神经网络等
matlab·bp神经网络·近红外光谱
SageFlower1 天前
MATLAB 数据掩膜函数
开发语言·matlab
2zcode2 天前
基于Matlab传统图像处理技术的车辆车型识别与分类方法研究
开发语言·图像处理·matlab
仟濹2 天前
【数学建模|Matlab】Matlab「基础知识」和「基础操作」
数学建模·matlab
fyfyfyfyfyl3 天前
【神经网络在MATLAB中是如何实现的?】
人工智能·神经网络·matlab