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.

[参考译文] TMS320F28379D:tmdxiddk379d 示例代码-

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1126547/tms320f28379d-tmdxiddk379d-example-code--

器件型号:TMS320F28379D
主题中讨论的其他器件:TMDXIDDK379D

您好!

我对 tmdxiddk379d FOC 快速电流环路代码的实现有几个问题。 在 fcl_f2837x_tmdxiddk.c 源文件中,调用 FCL_initadc ()函数以指定将用于快速电流环路电流感应的两个通道:

    //
    // This function initializes the ADC PPB result bases, as well as the ADC
    // module used to sample phase W. Ensure that the final argument passed
    // corresponds to the ADC base used to sample phase W on the HW board
    //
    FCL_initADC(ADCARESULT_BASE, ADC_PPB_NUMBER1,
                ADCBRESULT_BASE, ADC_PPB_NUMBER1,
                ADCA_BASE);

1) 1)从 CONFIG_ADC()函数中,传递到 FCL_initADC()函数的通道为电机相电流 V (模拟输入 A2)和 W (模拟输入 B2)。 传递到 FCL_initADC()的最后一个参数是用于对 W 相进行采样的 ADC 基址。从上一句中可以看出这应该是 ADCB_BASE,但是在示例代码中,ADCA_BASE 被传递到函数中。 您通过哪个测试是否重要? 它看起来用于设置适当的中断标志。

2) 2)设置 FCL ADC 初始化后、在 FCL_CPU_code.c 中调用具有 ADC PPB 结果的寄存器、以获取控制过程的相电流值:

#define FCL_CLARKE_ADC_IN()                                                    \
    clarke1Alpha = (float32_t)((int16_t)HWREGH(curA_PPBRESULT) *               \
                            FCL_params.adcScale);                              \
    clarke1Beta  = ((clarke1Alpha +                                            \
                     (2.0 * ((float32_t)((int16_t)HWREGH(curB_PPBRESULT)) *    \
                      FCL_params.adcScale))) * ONEbySQRT3);

cura_PPBRESULT 和 curBPPBRESULT 是保存电机相电流 V 和 W 值的寄存器的指针。 从这一部分代码中、您可以看到 V 相电流被设定为等于 Clarke 变换的 α 分量。 不应将 U 相设置为 α 分量? cura_PPBRESULT 和 curBPPBRESULT 的命名方式似乎意味着应对相电流 U 和 V 进行采样、而不是对 V 和 W 进行采样

我之所以提出这一点、是因为我在环路仿真中运行了一些硬件。 我的环路系统中的硬件 PMSM 电机模型将 Clarke 变换定义为 U 相电流同相 、等于 α 分量。 由于 TI 代码将 Clarke 变换定义为与 α 分量同相的 V 相电流、因此它会在不应生成某些 d 轴电流时(这是 SPM 电机)产生独特性能。 然后、很显然、这会偏离我在仿真期间生成的扭矩。 我尝试将 U (模拟输入 A0)和 V (模拟输入 A2)相电流通道传递到 FCL_initADC ()中,并将 ADC_abase 作为最终输入参数,但尽管寄存器被正确读取,但控制仍无法正常工作。

3) 3)我能否针对 FCL 代码而不是相电流 V 和 W 测量相电流 U 和 V?

感谢您的帮助、非常感谢您的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="520172" URL"~/support/microrims/C2000-microset-group/C2000/f/C2000-microset-forum/1126547/tms320f28379d-tmdxiddk379d-example-code---"]您传递哪一个是否重要?

    这取决于硬件。 您可以将 ADC 基址用于 V 或 W、但需要相应地更改中断配置代码。

    [引用 userid="520172" URL"~/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1126547/tms320f28379d-tmdxiddk379d-example-code---"]不应将 U 相设置为 α 组件?

    您可以使用取决于硬件的 U/V 或 V/W、并且需要相应地将 PWM 分配给 U/V/W。

    [引用 userid="520172" url="~/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1126547/tms320f28379d-tmdxiddk379d-example-code---]3)我能否测量 FCL 代码的相电流 U 和 V 而不是相电流/W?]

    是的,但需要更改 FCL_initADC()和 FCL_Clarke_ADC_in()代码。 或者、您也可以更改 PWM 的顺序、以在示例代码中将 U/V 用作 V/W。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1126547/tms320f28379d-tmdxiddk379d-example-code-/4178430#4178430"]、具体取决于硬件。 您可以将 ADC 基址用于 V 或 W、但需要相应地更改中断配置代码。

    谢谢、这对我来说很有意义。

    [引用 userid="35051" URL"~~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1126547/tms320f28379d-tmdxiddk379d-example-code-/4178430#4178430"]您可以使用相应的 U/V 或 v_defintrl/f379d/ cl_mc2000_guels=/t430/f_guels4mc2000/ines/ cl-example-f374mc2000/f/f/f/f374wm 代码 。 或者、您也可以更改 PWM 的顺序、以在示例代码中将 U/V 用作 V/W。

    您能在这一点上展开吗? 我已将 FCL_initADC()代码更改为与 U 和 V 相配合使用,如您在此处所见:

        FCL_initADC(ADCARESULT_BASE, ADC_PPB_NUMBER1,
                    ADCARESULT_BASE, ADC_PPB_NUMBER2,
                    ADCA_BASE);

    我还更改了中断配置代码。 我已确认 FCL 控制现在从 ADC 接收到正确的寄存器值。 但是控制不起作用。 为什么我需要更改 FCL_Clarke_ADC_IN ()或 PWM 的顺序? 我尝试将 U 相设置为 α 轴、这正是 FCL_Clarke_ADC_IN ()所做的。

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

    您无需更改 FCL_initADC ()和 FCL_Clark_ADC_IN ()、只需更改 PWM 顺序即可将 U/V/W 设为 V/W/U、因此您板上的 U/V 将用于项目中的 V/W。

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

    您好、Yanming、感谢您的评论。 我已经按照您的建议尝试将 PWM 阶数更改为 VWU、但这会导致控制不稳定。 我还尝试插入 U 相和 V 相电流、而不是 V 和 W、这也会导致不稳定。 系统正常运行的唯一方法是将默认 VW 相电流插入 FCL 算法。 我是否缺少其他东西?

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

    您能否与我分享 为什么 clarke1Beta 计算为:

     

    clarke1Beta  = ((clarke1Alpha +                                            \
                     (2.0 * ((float32_t)((int16_t)HWREGH(curB_PPBRESULT)) *    \
                      FCL_params.adcScale))) * ONEbySQRT3);

    根据 clake 变换定义、β 分量为:

    ibeta = 1/sqrt (3)* ib - 1/sqrt (3)* ic

    当 α 分量与 b 相电流对齐时、它将是:

    ibeta = 1/sqrt (3)* ic - 1/sqrt (3)* ia

    您能否分享此公式的构建方式?

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

    如果使用这两个输入、可以在一些电机控制教科书中找到 Clarke 公式、如下所示。

    Ialpha = ia;

    Ibbeta = 1/sqrt (3)*(ia + 2 * ib);

     FCL_params.adcScale 是将 ADC 结果数据转换为采用 PU 格式的电流的换算系数。  

    是的、如果使用三个输入、则可以使用上述公式。

    ialpha = 1/3 *(2*ia - IB - IC);

    ibeta = 1/sqrt (3)*(IB - IC);

    因此、您可以在这些公式中替换 ia/ib/ic、因为 ia + ib + ic = 0;

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

    您好!

    我已经执行了更多的测试来隔离我的问题、我认为这可能与通过编码器计算转子角度有关。

    下面是我对启动期间编码器初始化阶段的理解:

    首先、编码器对齐例程从 d 轴电流 IDREF_START 被注入的位置开始、以将电机与 d 轴对齐。 然后、电机以 lsw1speed 设置的低速开环运行、直到触发编码器索引。 然后校准完成、电机开始闭环运行。

    1) 1)这是正确的吗?

    几个问题:

    2) 2)在开环运行期间、转子必须旋转以使指数燃烧的距离会因转子初始位置而异。 在闭环运行期间、该距离是否用作编码器偏移? 如果是、哪个变量保存该值? 看起来应该是 qep1.CalibratedAngle、但该值从未更新。

    对于 HIL 仿真、电机模型接受初始角度、速度和编码器偏移。 我现在将它们全部设置为零。 如果控制器在启动例程期间计算出不同的值、我将在控制器和 HIL 之间具有不同的角度。

      

    3) 3)鉴于我之前的陈述是正确的、我能否将 HIL 转子初始条件和编码器偏移直接加载到我的控制器中、并跳过初始化例程、因为这些值是已知的? 然后、当我在硬件上实施时、我可以使用初始化例程。

    谢谢。

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

    您能否与我分享转子角度0度位置的定义位置? 我的测量结果表明、它与 W 相对齐、而 α 轴与 V 相对齐。 非常希望在提供的示例代码中明确 FOC (abc、Clarke、Park)轴的定义位置。

    如图所示、每次 W 相电流处于最大值时、电角都会重置为零、这表示这些对齐。

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

    我们不需要关心转子与哪个相位对齐。 只需注入右 d 轴并将转子对齐到某个位置、然后假设该位置是转子的零角。

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

    好的、谢谢、这回答了我的问题。 我的 HIL 仿真在计算 D 轴和 Q 轴电流时测量相对于 U 相电流轴的角度。 基准差异似乎导致仿真报告一些 d 轴电流、而实际上、由于角度定义的差异、它是一个误差。 谢谢你。