This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28075:FCL PI 实现

Guru**** 2797815 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1028235/tms320f28075-fcl-pi-implementation

器件型号:TMS320F28075

您好!

我正在使用 FCL 控制 器、并根据电机是在象限2还是3中运行、看到相同 Iq 值的不同扭矩输出。

这使我深入了解了 FCL_PI 实现、因为它的实现中有一个速度元素。  然而、在我从 CLA 和 ISR 中删除了这些部分之后、它看起来与我之前使用过的任何 PI 都不一样。

根据我的理解、PI 控制器的作用如下:

在时间 n:

ERR_n =  ir_ref - IQ_测量值

Kp = L * I * WCC / V -假设相对恒定  

Ki = R * I * WCC * dt /V -假设相对恒定

KERR = KI / 2 + KP

KERR_OLD = KI / 2 - KP

care_over =(ERR_n * KERR_OLD)+ Bemf * dSpeed

carry _over = err_n* ki/2 - err_n* Kp + Bemf*dSpeed

在 n+1时:

ERR_n_1 = ir_ref - IQ_测量值

OUT = ERR_n_1* Kerr + carry + over

输出= ERR_n_1 * KI/2 + ERR_n_1*KP + ERR_n * K/2 - ERR_n* KP + Bemf*dSpeed

输出= KI*(ERR_n_1 + ERR_n)/2+ KP *(ERR_n_1 - ERR_n)+ Bemf*dSpeed

因此 、令人惊喜:

OUT = Ki * avg_err (超过2个周期)+ Kp *(误差变化)+ Bemf *(速度变化)

是否有任何有关 FCL_PI 工作原理的文档?  积分器在哪里?  为什么 KP 被应用于 IQ 误差的变化而不是误差本身? 为什么反电动势常数乘以电机加速度?

似乎该实现结合了大量逻辑并针对性能进行了优化。  这很好、但很难理解。  在我转到 Dave Wilsons 博客之前、我已经阅读过它、无法弄清楚这个实现

非常感谢、

-科林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该实现基本上是积分器的实现。 如果您集成 KP 的乘积和误差差异、它基本上与使用 KP 和误差的乘积相同。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、

    但实际求和(积分)发生在哪里?  它看起来像是直接放入逆向 Park 中、而不是与之前版本的 Out 相加。  或者我是否缺少了什么?

    当我提出问题时、您是否有任何原因会因电机方向而导致相同 Iq 值的扭矩输出变化?  即象限2与象限3操作?

    -科林  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    实际上、我现在看到求和发生在哪里。  我错过了+=

    #define  FCL_PI_MACRO(v)                                                       \
    {                                                                              \
        v.out += (v.err * v.Kerr) + v.carryOver;                                   \
        v.out = (v.out > v.Umax) ? v.Umax : v.out;                                 \
        v.out = (v.out < v.Umin) ? v.Umin : v.out;                                 \
    }

    我仍然想知道象限2与3扭矩变化。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在理想世界中、它应该是相同的。 但这种变化是可能的。 它取决于反馈感应的不等性+方向相关粘滞/摩擦/负载/...