自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (5)
  • 收藏
  • 关注

原创 【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】

本节使用stm32cubemx配置外设,生成keil工程,代码适配本文的硬件电路板。

2024-09-29 17:32:32 23797 56

原创 【永磁同步电机数学模型全程推导】【7 转矩方程】

摘要:本文推导了永磁同步电机的转矩方程。通过分析输入功率构成,指出只有电磁功率与转矩相关。基于等功率变换原理,建立了电磁功率表达式,并结合物理关系式P=Tω,最终得出转矩公式T=3/2·p(ψfiq+(Ld-Lq)idiq),其中p为极对数。推导过程涉及坐标变换和功率守恒原理,明确了各功率分量的物理意义。该方程为永磁同步电机控制提供了理论基础。

2025-08-10 21:09:30 159

原创 【永磁同步电机数学模型全程推导】【6 电表测量方法】

本文介绍了永磁同步电机关键参数的测量方法:1)通过电阻表测量线电阻并除以2得到相电阻$R_s$;2)采用电感表测量两相间电感随转子位置变化的极值$L_{min}$和$L_{max}$,推导计算$L_0$、$L_2$、$L_d$和$L_q$;3)通过外力匀速拖动电机测量反电动势线电压峰峰值,结合转速计算磁链常数$\psi_f$;4)给出了厂商提供的反电动势常数$K_e$(V/kRPM)与$\psi_f$的转换公式。这些方法为电机控制提供了必要的参数获取途径。

2025-07-16 09:24:34 939

原创 【永磁同步电机数学模型全程推导】【5 推导结论整理】

本文总结了永磁同步电机在不同坐标系下的数学模型。在abc相坐标系中给出了磁链方程和电压方程的基本形式;在αβ坐标系中推导了隐极电机的电压方程,指出凸极电机需参考扩展反电动势理论;在dq坐标系中得出了磁链和电压方程的简化表达。重点给出了dq轴电压方程:d轴包含电阻压降、电感压降和速度电动势项,q轴除类似项外还包含永磁体磁链产生的反电动势项。这些方程为后续电机控制算法设计提供了理论基础。

2025-07-16 09:24:06 1163 1

原创 【永磁同步电机数学模型全程推导】【4 dq轴磁链、电压方程】

本文介绍了Park变换及其在无刷电机磁场定向控制(FOC)中的应用。Park变换通过旋转坐标变换将αβ轴转换为dq轴,其变换矩阵为顺时针旋转矩阵,逆变换为逆时针旋转矩阵。通过Park变换推导了dq轴的磁链方程,最终得到简化的磁链方程形式,其中包含电感参数Ld、Lq和永磁体磁链ψf。推导过程利用了等幅值变换和矩阵运算技巧,简化了复杂的计算步骤。该结果为无刷电机FOC控制提供了理论基础。

2025-07-15 14:16:23 986

原创 【永磁同步电机数学模型全程推导】【3 αβ轴磁链、电压方程】

本文推导了αβ坐标系下的磁链和电压方程。通过等幅值Clarke变换将三相abc变量转换为αβ轴分量,变换矩阵为2/3比例系数。磁链方程由电感矩阵转换和永磁体磁链贡献两部分组成,其中蓝色部分经三角函数化简后得到简洁表达式ψ_f[cosθ; sinθ],红色部分涉及复杂的电感矩阵计算。推导过程利用三角恒等式简化运算,最终得到αβ轴磁链方程。该推导为无刷电机FOC控制奠定了理论基础,详细步骤可参考相关技术文档。

2025-07-15 14:15:36 318

原创 【永磁同步电机数学模型全程推导】【2 abc相磁链、电压方程】

摘要:本文推导了凸极永磁同步电机三相绕组磁链方程。a相电压方程由电阻压降和电感感应电动势组成,磁链包含自感、互感和永磁体磁链三部分。自感磁链受相电感和凸极电感影响,互感磁链通过dq轴投影分析,永磁体磁链直接投影。最终推导出abc三相磁链的矩阵表达式,其中电感矩阵包含固定分量和随转子角度变化的周期分量。该模型为后续电机控制算法提供了理论基础。

2025-07-14 11:35:39 1212

原创 【永磁同步电机数学模型全程推导】【1 前言】

本文介绍了永磁同步电机的数学模型建立过程。重点分析了电机内部复杂的电磁环境,包括定子绕组的电阻电感特性、三相绕组互感关系以及转子磁场作用。通过数学推导,建立了αβ轴和dq轴坐标系下的磁链方程和电压方程,这些方程是电机高级控制算法的基础。文章还列出了学习该内容所需的前置知识,包括FOC基础、求导运算和线性代数知识,并预告了后续将涉及的磁链方程推导方法和电机参数测量技术。

2025-07-14 11:34:59 255

原创 【无刷电机FOC进阶基础准备】【04 clark变换、park变换、等幅值变换、等功率变换】

本文重点解析了FOC控制中的Clark变换、Park变换及等幅值变换原理。Clark变换将三相静止坐标系(abc)投影到两相静止坐标系(αβ),其矩阵形式为2×3矩阵;Park变换则将αβ坐标系旋转至两相旋转坐标系(dq),通过2×2旋转矩阵实现。等幅值变换通过在Clark变换前乘以2/3系数,使坐标轴幅值统一为1,便于数学推导与代码实现。分析表明,Clark逆变换无需额外系数即保持等幅值特性,而Park变换作为旋转矩阵天然满足等幅值要求。文中通过矩阵运算验证了变换与逆变换的乘积为单位矩阵,并对比了等幅值变

2025-06-23 19:55:36 1548 1

原创 【无刷电机FOC进阶基础准备】【03 电机凸极性】

本文分析了永磁电机转子的两种常见结构:表贴式和内嵌式。表贴式电机永磁体直接贴在转子表面,气隙均匀;内嵌式电机永磁体嵌入转子铁芯凹槽,形成不均匀气隙。关键差异体现在磁链特性:表贴式仅受永磁体影响,而内嵌式还受周期性气隙变化影响。电感特性方面,表贴式d轴和q轴电感相等,内嵌式因永磁体位置导致d轴电感小于q轴。基于这些电磁特性差异,内嵌式又称为凸极电机,表贴式则称为隐极电机。

2025-06-23 19:54:34 811

原创 【无刷电机FOC进阶基础准备】【02 常用电磁名词】

本文简要介绍了几种高频电磁名词的概念。磁导率反映材料受磁场影响的能力,低磁导率如木头,高磁导率如铁。气隙指线圈与材料间的空气距离,越小越好。磁感应强度表示单位面积内的磁力线密度,受介质影响。磁通量为非单位面积的磁力线数量,磁链则是多圈线圈的叠加磁通量。电感值描述线圈产生磁链的能力,会随介质变化而变化。感应电动势由磁链变化产生,包括电流变化、介质变化和外部磁场影响三种方式,电机中的反电动势属于第三种情况。这些概念虽不严格但非常实用。

2025-06-03 10:28:42 937 1

原创 【无刷电机FOC进阶基础准备】【01 前言】

本文介绍了无刷电机FOC控制的进阶知识框架,重点阐述了永磁同步电机的数学模型构建。文章指出电机绕组并非纯电阻,而是存在电感、互感和感应电动势等复杂电磁特性,电压与电流矢量方向不一致。作者将电机控制知识分为模型、算法和参数整定三大模块,强调理解电磁学基础概念的重要性。文章预告后续将涉及电磁学名词解析、永磁同步电机电感特性等内容,并提示读者做好数学推导的心理准备。该系列需要导数知识和高中电磁学基础,适合已完成《从零开始实现stm32无刷电机FOC》基础内容的读者继续深入学习。

2025-06-03 10:27:27 763

原创 【扩展卡尔曼滤波理论推导与实践】【理论】【2/3 公式推导】

这节文章是完整充分地推导扩展卡尔曼滤波公式。

2024-12-26 21:01:11 1141

原创 【扩展卡尔曼滤波理论推导与实践】【理论】【1/3 前言】

扩展卡尔曼滤波,【扩展】是指在标准卡尔曼滤波基础上扩展算法而来。标准卡尔曼滤波是建立在二阶弹簧阻尼质量块系统上的线性模型,最明显的是状态转移方程和测量方程是线性的。将系统模型笼统地建模为弹簧阻尼质量块系统,这是不准确的;很多场景测量模型不是线性倍数关系,在那些场景下是不准确的。扩展卡尔曼滤波就是为了解决这类非线性问题的。

2024-12-26 21:00:13 1246

原创 【卡尔曼滤波理论推导与实践】【理论】【5/5 实践】

卡尔曼滤波要人工调节的参数包括初值、Q、R,就和调PID参数一样,要调出一个好的参数还是不容易的。文章中的电机进行电机速度数据滤波测试,设置为纯电流控制模式,对速度进行卡尔曼滤波,设置了。结果如下图,红色数据为测量出来的电机速度,绿色数据为卡尔曼滤波之后的速度。这些矩阵都只有一维,退化成一个数了,协方差矩阵退化成方差了。

2024-12-22 15:21:46 972

原创 【卡尔曼滤波理论推导与实践】【理论】【4/5 公式总结】

模型噪声和测量噪声的协方差矩阵,是人为假设的,这也是需要调参的点。卡尔曼的推导过程中将卡尔曼增益做了一个变换。是最优估计值,是卡尔曼滤波的最终输出值。是状态转移矩阵,是人为建模给定的。是控制矩阵,是人为建模给定的。左乘、右乘、转置是一样的,

2024-12-22 15:20:58 946

原创 【卡尔曼滤波理论推导与实践】【理论】【3.2/5 卡尔曼增益02】

用测量值修正系统模型值,得到当前轮次的最优估计值。再将该最优估计值当作下一轮的系统模型输入,继续进行下一轮的最优估计,如此迭代进行。到此为止,所有东西都被推导出来了,能看到这是一轮迭代求解的过程,下一节对公式进行整理,也就是卡尔曼滤波的5个公式。是一个模型噪声的协方差矩阵,是人为假定的常数,是已知的,记做。上节推导得到的两个表达式如下,注意只是将。等式右边全是上轮迭代得到的已知数,但是。代入表达式,即可得到最优估计时的。等号右边都是上轮迭代得出的值,的表达式,将最优估计时的。根据协方差定义的公式,

2024-12-22 15:20:12 685

原创 【卡尔曼滤波理论推导与实践】【理论】【3.1/5 卡尔曼增益01】

上节,推导得到了状态空间方程,可以得到系统模型值了。目前核心思想中的【修正】这个概念还处于迷雾中,本节对此进行推导。往下看之前,如果让你来原创,你会怎么用表达式将【测量值修正系统模型值】这句话的逻辑清晰地写出来?有差值才有【修正】,而差值是测量值和系统模型之间的差,是在被修正值的基础上加这个差值,因此这是一个关于测量值和系统模型值的逻辑。【修正】的逻辑应当是这样的:将测量值与模型值的差作为修正值,乘个系数后,叠加到模型值,这就是卡尔曼滤波的【修正】。这个系数,被称为卡尔曼增益。

2024-12-22 15:18:47 1458

原创 【卡尔曼滤波理论推导与实践】【理论】【2/5 状态空间方程】

测量值是我们测量得到的,这个是已知的。系统模型现在还没有建模,本节建立系统模型,系统模型值就是系统模型计算得到的值。由于一阶微分表述的是当前量与当前量的导数的关系,离散后具有有迭代的性质,符合状态转移理念,因此我们要想办法将上面这个二阶微分方程转换为一阶微分方程,当然二阶量就无法作为状态的一员了。大部分情况下,会使用弹簧阻尼质量块这个模型进行分析,大部分物理现象被抽象概括成这个模型,当然不一定准确,但是具有一定的普适性。,这就是系统模型所谓的【描述了上一轮次的状态与本轮次状态的转换关系】。

2024-12-22 15:17:38 1211 4

原创 【卡尔曼滤波理论推导与实践】【前言】【1/5 前言】

滤波是在一串有先后顺序的观测值中尽量估计出接近真值的操作。估计出的值是最优估计值,每收到一个杂乱数据都算出一个最优估计值,即每轮次都有最优估计值。当然,真值永远也无法知道。现在看这个思想是符合自然逻辑的,卡尔曼提出来了并用数学语言进行描述,这就是人家的创新之处。这样,每轮次的最优估计值都算出来了。

2024-12-22 15:17:08 592

原创 【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】

为了承载和验证本文的FOC代码工程,本节设计了一个简易的三相无刷电机,主控采用非常常用的stm32f103c8t6单片机,电机编码器采用MT6701,电机采用22xx系列云台电机,驱动电路采用集成驱动芯片DRV8313,电流传感器采用INA199A1在线采样。该使用无工具快拆装设计,到手即可直接快速手拧安装拆卸。

2024-09-29 17:30:28 8476 12

原创 【从零开始实现stm32无刷电机FOC】【实践】【6/7 CMSIS-DSP】

CMSIS-DSP库是ARM开源的、对ARM处理器优化的数学库,本文使用了其提供的三角函数、反park变换函数、park变换函数、clarke变换函数、PID控制器。CMSIS-DSP原始代码仓库是,官方对其的介绍是一个针对Cortex-M和Cortex-A内核优化的嵌入式系统计算库,此处的DSP不是指的硬件,而是数字处理的意思。

2024-07-18 22:59:24 5225 4

原创 【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

本节介绍的adc外设高级用法用于电机电流控制。从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了q轴电流就是控制了电机力矩。从前文电流控制内容可知,q轴电流从三个相线电流计算得到,三个相线电流通过电流采样单元连接到stm32的adc接口得到。这里要注意,本文全文没有提到过dq轴电压或相线的电压,因为相线电阻会随着温度而改变,而电流才是决定磁场强度。

2024-07-16 22:06:45 6094 7

原创 【从零开始实现stm32无刷电机FOC】【实践】【4/7 stm32高级定时器】

本节对stm32高级定时器中可用于FOC控制的配置项进行了介绍,并尽量开启了TIM1的完整功能,请根据自己的电路环境以及配置项说明图进行配置项的删减,比如是否开启互补和死区功能、是否开启刹车功能、死区时间的修改等等。从上图看到,半桥的上功率管和下功率管不能同时导通,否则功率管会由于短路流经大量电流被烧毁(电机绕组有电阻在,不算短路),因此上下两个的功率管的pwm要求互补导通。下图是定时器配置为上下计数模式的pwm产生示意图,定时器当前计数值与设定的比较线(值)的比较关系控制定时器通道的输出。

2024-07-11 23:14:01 8787 7

原创 【从零开始实现stm32无刷电机FOC】【理论】【3/7 位置、速度、电流控制】

上一节,通过对SVPWM的推导,我们获得了控制电机转子任意受力的能力。本节,我们选用上节得到的转子dq轴解耦的SVPWM形式,对转子受力进行合理控制,实现FOC电机控制的最终目标:位置、速度、电流控制。

2024-07-09 21:43:23 8206 9

原创 【从零开始实现stm32无刷电机FOC】【理论】【2/7 SVPWM数学模型】

本节推导了svpwm数学模型,得到了目标磁矢量的生成函数。

2024-05-22 22:46:36 9714 36

原创 【从零开始实现stm32无刷电机FOC】【理论】【1/7 电机旋转本质】

从电机旋转本质出发,推导得到需要控制线圈合成磁矢量。

2024-05-14 21:57:34 7875 4

原创 Keil 厂商DFP pack实现原理

直接复制别人的厂商文件夹到这里也是相同的效果,比如这里复制了一份ArteryTek的文件夹命名为ArteryTek2,打开Keil时会提示ArteryTek2相应的信息,说明Keil会扫描这个目录下的文件夹。在Keil中用鼠标选择芯片型号操作的原理是读取解析厂商文件夹下对应型号文件夹中的pdsc文件(pack description),这个文件写着芯片的介绍文字、外设功能库的路径、debug时寄存器文件的路径等等芯片相关的信息,Keil读取出这些信息后显示到Keil界面上供程序员鼠标点选。

2023-10-12 11:40:52 779

原创 串口硬件流控RTS、CTS

硬件流控机制:发送端在发送前需要检查自身的CTS,CTS低电平为可以发送。接收端RTS连接到发送端的CTS,接收端准备好接收后拉低自己的RTS即拉低发送R端的CTS。设置流控模式后,芯片内部自动完成以上机制,CTS为高时,即使程序运行发送函数,实际上并不会发送。当接收端的串口处理速度过低时,会丢失数据,因此考虑增加一种通知的机制来告诉发送端是否可以发送,即增加了RTS(Require To Send)和CTS(Clear To Send)信号线。

2023-10-11 14:01:21 2639

原创 MOS管各种概念(三个极、沟道、衬底、电流方向、箭头方向、耗尽型和增强型、寄生二极管、封装引脚)

MOS管各种概念(三个极、沟道、衬底、电流方向、箭头方向、耗尽型和增强型、寄生二极管)

2023-10-09 11:02:37 32373 5

原创 PLL锁相环倍频原理

锁相环倍频原理

2023-10-06 09:01:53 1765

原创 Windows平台Qt6中UTF8与GBK文本编码互相转换、理解文本编码本质

Qt C++ UTF8与GBK文本编码互相转换

2023-09-20 21:22:05 4184 2

原创 WSL2中的ROS2与windows中的webots通信失败的问题

windows中在【控制面板\系统和安全\Windows Defender 防火墙\允许的应用】中,将webots-bin的专用和公用都勾选上,即可解决问题。

2023-06-14 00:04:41 598 1

原创 opencv 快速简单二值化的做法

大家在网上搜索opencv二进制,很多人会告诉你用threshold等函数。这类函数虽然支持自适应等功能,但是参数比较多,有点复杂。我们只要简单二值化的时候可以用以下做法:Mat img = imread("a.png", IMREAD_GRAYSCALE)<100;...

2022-03-06 16:34:40 3158

原创 [有/无]刷,[直/交]流,[同/异]步,各种电机概念区分

各种电机概念区分

2021-12-15 22:56:30 10219 8

原创 windows平台,mingw64编译环境下的socket使用

代码并不重要,主要看最后的编译命令://test.cpp#include <winsock2.h>#include <iostream>using namespace std;int main(){ WSADATA ws; WSAStartup(MAKEWORD(2, 2), &ws); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; add

2021-07-05 14:18:01 3381

原创 windows平台,mingw64编译使用matplotlibcpp

编译以下代码://test.cpp#include "matplotlibcpp.h"namespace plt = matplotlibcpp;int main() { plt::plot({1,3,2,4}); plt::show();}编译命令:g++ test.cpp -DWITHOUT_NUMPY -ID:\application\miniconda3\include -LD:\application\miniconda3 -lpython38注意自行更改pytho

2021-07-05 13:44:38 435

原创 linux平台的三种动态库路径设置方法

方法一:LD_LIBRARY_PATHexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/path建议在~/.profile最后增加一行,写入上述命令。方法二:/etc/ld.so.conf用sudo权限在/etc/ld.so.conf文件最后新增一行动态库路径,比如写入/usr/local/lib。然后命令行运行sudo ldconfig。方法三:gcc添加编译选项-Wl,-rpath=/your/path:/your/path2比如gcc

2021-05-18 15:11:06 5001

原创 从零开始使用交叉编译开发树莓派驱动hello world

【以下命令没有特别说明,皆在上位机端运行(wsl不原生支持树莓派官方的32位编译器,自行查找资料折腾)。】1.交叉编译环境准备arm设备性能低,一般不在arm板上编译东西,所以使用交叉编译。此处上位机为linux pc。kernel源码:运行uname -r查看当前树莓派的内核版本。并下载相应版本的内核git clone git://github.com/raspberrypi/linux.git。compiler chain:git clone git://github.com/raspberr

2021-04-07 12:57:18 387

原创 【简洁清晰】使用ssh自带的反向代理功能,实现访问内网设备的任意端口,包括ssh、vnc等

机器A:内网设备机器B:中转设备,用来转发,最好有公网ip机器C:任意设备,客户端,用来访问机器A,就是你正在用的电脑0.自行配置好[机器A>>机器B]、[机器C>>机器A]、[机器C>>机器B]的ssh密码或密钥。1.配置机器B:将/etc/ssh/sshd_config中的GatewayPorts设置为yes,重启sshdsudo systemctl restart sshd.service2.配置机器A:机器A运行命令:ssh -fNR [中转

2021-03-14 19:31:42 2766 1

libopencv_world450.dll

已经在windows,mingw64编译好的opencv4.5.0所有动态库合集,使用时只需指定这个动态库,并添加所在文件夹到path环境变量即可。

2020-12-06

libopencv_world450.dll.a

已经在windows,mingw64编译好的opencv4.5.0所有静态库合集,使用时只需指定这个动态库,并添加所在文件夹到path环境变量即可。

2020-12-06

opencv.zip

已经在windows,mingw64编译好的opencv4.5.0的编译结果。自行添加环境变量后,可直接使用。里面包括所有零散的dll和dll合集--opencv_world

2020-12-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除