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.

[参考译文] C2000Ware 中的 PI 控制器汇编函数 DCL_PI_A1.asm、如何使用它?

Guru**** 2589970 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/666667/pi-controller-assembly-function-in-c2000ware-dcl_pi_a1-asm-how-to-use-it

你好。 我想使用 C2000Ware 中的汇编函数 DCL_PI_A1.asm。 它是 PI 控制的函数、可用于 TMS320F28035等定点处理器。 我找不到任何使用此函数的示例工程、并且不确定如何使用它。 有人可以提供一些指导吗?

汇编函数代码和 DCL32.h 头文件如下图所示。 在调用汇编函数之前,我是否需要自己将*p 放在 XAR4中,将 rk 放在 ACC 中,将 YK 放在[STACK-2]中? 还是在其他地方完成? 我还需要做什么其他事情? 我已经阅读了 DCL 用户指南 PDF、但它并未提供有关如何使用这些函数的大量信息。

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

    您好、Niclas、

    该函数被设计为使用32位定点参数从 C 调用。 您无需编写或修改任何汇编代码。

    与任何定点控制器一样、您必须调整输入和变量、以匹配可用的数字范围和分辨率。 在 C 语言中、如果您使用 IQmath 库、这会简单很多、因此我将在下面假设您正在这样做并使用(例如) iQ24格式。

    您首先要将控制器源文件"DCL_PI_A1.asm"添加到您的项目中、然后声明控制器和变量、如下所示:

    #include"DCL32.h"
    #include "IQmathLib.h"

    DCL_PI32 PI32 = DCL_PI32_DEFAULTS;
    _iQ24 rk、YK、英国;

    然后、根据需要在代码中初始化控制器系数。 例如:
    RK =_IQ24 (0.5);
    PI32.KP =_IQ24 (1.2345);
    PI32.Ki =_IQ24 (0.6789);
    (笑声)

    例如、要在 ISR 中使用该函数、您需要以 IQ24格式加载反馈变量"YK"。。
    YK=(_IQ24)((long) AdcResult.ADCRESULT0 <<12);

    ...并调用 PI "run"函数、如下所示:
    UK = DCL_runPI_A1 (&PI32、rk、YK);

    "UK"将具有 IQ24格式的控制器输出。 您必须将任何偏移量和比例应用到"UK"、具体取决于您要对其执行的操作。 DCL 用户指南(v2.1.1)的第59页介绍了 pi_A1函数的内部工作。

    但愿这对您有所帮助。 如果有任何不清楚或您遇到困难、请回帖。

    此致、

    Richard

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

    使用反向 Euler 近似进行积分是否正确? 在这种情况下、我的连续时间 Ki 是否应与采样频率相乘以获得代码中使用的离散时间 Ki? KI_discrete = Ki * TS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Niclas、
    问得好。 是的、积分器是反向欧拉器、是的、选择 Ki 时必须考虑采样周期。 代码在库的当前版本中不执行该操作。
    此致、
    Richard