BLDC电机控制算法——FOC简述

BLDC电机控制算法——FOC简述最近做完了一个直流无刷电机的电机调速项目 查阅了各种大神所写的博客和论文 在这里我只做一下小小的总结 FOC FiledOriente 是采用数学方法实现三相马达的力矩与励磁的解耦控制 主要是对电机的控制电流进行矢量分解 变成励磁电流 IdIdId 和交轴电流 IqIqIq 励磁电流主要是产生励磁 控制的是磁场的强度 而交轴电流是用来控制力矩 所以在实际使用过程中 我们常

第一步:根据AD采样得到 i a , i b i_a,i_b ia,ib两相电流值;

通过ADC采样得到电机的 i a , i b i_a,i_b ia,ib 两项电流信息,由于基尔霍夫电流定律,同一个节点流入电流值与流出电流相等,我们可以计算出 i c i_c ic。三个电流的相位差为120°。


i a + i b + i c = 0 i_a+i_b+i_c=0 ia+ib+ic=0


基尔霍夫电流定律

第二步:通过Clark变换,将三相定子坐标系(三个轴互为120°, i a , i b , i c i_a,i_b,i_c ia,ib,ic)转化为两相的定子直角坐标系( i α , i β i_{\alpha},i_{\beta} iα,iβ

第三步:通过Park变换将两相定子坐标系变换到两相转子坐标系

因为我们主要控制的是转子的旋转,所以需要通过Park变换将两相定子坐标系变换到两相转子坐标系( i q , i d i_q,i_d iq,id),本质上就是矩阵的旋转变换,在这里,我们用到的转子的位置信息
park变换


{ I q = I β c o s ( θ ) − I α s i n ( θ ) I d = I α c o s ( θ ) + I β s i n ( θ ) \begin{cases} I_q=I_{\beta}cos({\theta})-I_{\alpha}sin({\theta})\\ I_d=I_{\alpha}cos({\theta})+I_{\beta}sin({\theta}) \end{cases} {
Iq=Iβcos(θ)Iαsin(θ)Id=Iαcos(θ)+Iβsin(θ)


该位置信息便是由磁编码器返回的绝对角度信息,(其实也可以用增量式编码器,我感觉应该只是在电机位置校准的时候需要定义零点,其他的应该一样,我暂时还没有做过,属于猜想的,当然有的还可以通过无位置的控制方式,通过三相采样电流值计算转子位置信息,还有需要注意的是得到的是角度信息,我们需要将其转化为电角度信息, 电 角 度 = 角 度 ∗ 磁 极 对 数 电角度=角度*磁极对数 =),其中 i d i_d id 为励磁电流分量, i q i_q iq为转矩电流分量,可以建立两个PI调节器分别对两个电流分量进行调节。
当励磁电流分量为0时,磁通完全由永磁体提供。电机所有的电流全部用来产生电磁转矩,只用控制 i q i_q iq就可以控制电机转矩,就实现了电机的静态解耦。(其实这里很好理解,根据左手定则,F=BIL,这个公式中L是电机的固有参数,B磁通由两部分组成,一是由永磁体提供,二是由电流变化产生磁场;所以如果我们要实现给定的力距,需要控制单一变量:电流,则需要让B保持恒定,也就是使 i d i_d id =0)

第四步:根据PI调节器输出电压 V q , V d V_q,V_d VqVd

这里需要注意有一个前提调节,那就是你已经基本调通了SVPWM波,电机可以正在旋转了,FOC控制算法主要是电机的稳定性控制,而不是电机本体的驱动。 V q , V d V_q,V_d VqVd本身的参考值已定, i q , i d i_q,i_d iq,id只是根据给定值与实际返回值得差值调节电机的稳定性。
在调参的时候,人为给定 i q r e f = 0 , i d r e f = X X X ( 参 考 电 流 值 ) i_qref=0,i_dref=XXX(参考电流值) iqref=0,idref=XXX(,通过与实时采样电流比较,调节电流环PID,调节的目标是启动响应速度足够快,平稳运动波动足够小,通过DAC输出实时采样电流来进行调试;

第五步通过反Park变换将 V q , V d V_q,V_d VqVd(两相转子坐标系)转换为 U α , U β U_{\alpha},U_{\beta} Uα,Uβ两相定子坐标系

反park变换


{ U α = V d c o s ( θ ) − V q s i n ( θ ) U β = V d s i n ( θ ) + V q c o s ( θ ) \begin{cases} U_{\alpha}=V_dcos({\theta})-V_qsin({\theta})\\ U_{\beta}=V_dsin({\theta})+V_qcos({\theta}) \end{cases} {
Uα=Vdcos(θ)Vqsin(θ)Uβ=Vdsin(θ)+Vqcos(θ)

第六步:得到 U α , U β U_{\alpha},U_{\beta} Uα,Uβ之后,通过SVPWM算法计算 U A , U B , U C U_A,U_B,U_C UA,UB,UC

另外一篇经典FOC与SVPWM波详述(稚晖君):https://zhuanlan.zhihu.com/p/147659820




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220678.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:54
下一篇 2026年3月17日 下午7:54


相关推荐

  • host地址_hostname在哪个目录

    host地址_hostname在哪个目录https://laod.cn/hosts/hosts-position.html

    2022年8月4日
    11
  • vue的双向绑定原理及实现_vue的数据绑定怎么实现

    vue的双向绑定原理及实现_vue的数据绑定怎么实现vue双向绑定原理浅析1、什么是双向绑定?​ 所谓双向绑定,指的是vue实例中的data与其渲染的DOM元素的内容保持一致,无论谁被改变,另一方会相应的更新为相同的数据。(数据变化更新视图,视图变化更新数据)2、如何实现双向绑定?在vue中可以通过v-model实现双向绑定<template><divid=”app”>{{username}}<br/><inputtype=”text”v-model=”username”&

    2022年10月18日
    4
  • wicket 乱码

    wicket 乱码使用 wicket 有时会莫名的乱码 最好方法是在以下所有地方都统一成 UTF 8 1 如果保用 mysql 数据库 要使数据库 表的字符集都为 utf8 2 如果用 spring 在 web xml 中加入 characterEnc springframew web filter CharacterEnc

    2026年3月18日
    2
  • 一些软件黑盒测试工具列表

    一些软件黑盒测试工具列表WinRunner8 0 企业级测试工具下载 http www verycd com topics 56939 nbsp 约 190M nbsp QuickTestPro 2 中文版强大测试工具下载 http www verycd com topics 56964 nbsp 约 250M nbsp QACenter 软件黑盒测试工具 Compuware 的 QACenter 家族集成了一些强大的自

    2026年3月26日
    2
  • SkipList 原理

    SkipList 原理跳表是允许在有序序列元素内快速搜索的数据结构 通过维护子序列的链接层次结构可以快速搜索 每个连续的子序列跳过比前一个更少的元素 搜索开始于最小的子序列 直到找到两个连续的元素 一个更小 一个大于或等于所搜索的元素 通过链接层次结构 这两个元素链接到下一个最短子序列的元素 其中搜索继续 直到最后我们以完整的顺序搜索 可以概率地或确定性地选择跳过的元素完整的跳表的图示

    2026年3月26日
    2
  • c++常量指针和指针常量_指针指向二维数组

    c++常量指针和指针常量_指针指向二维数组**一:常量**常量指针,指针常量,常量指针常量a)常量定义:不可修改的值,例如250,’A’b)const关键字功能:将变量常量化,四种形式(1)const可以修饰普通变量,一旦修饰该变量,该变量就当做常量看待,不可再更改Constinta=250;//将变量a常量化A=200;//gcc编译器报错(2)常量指针:不能通过指针变量来修改指向的内存区域的数据,主要…

    2022年8月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号