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.

[参考译文] CCS/TMDSOLARPEXPKIT:为什么2p2z中的A1为_IQ26 (1.0)

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/574993/ccs-tmdssolarpexpkit-why-a1-in-2p2z-is-_iq26-1-0

部件号:TMDSOLARPEXPKIT

工具/软件:Code Composer Studio

你好。 我想知道,为什么要让2p2z作为PID工作,您让 CNTL_2P2Z_CoefStrut_Vpnl.A1  =_IQ26 (1.0);  ??

最小值和最大值在_IQ(24)中,反馈和参考值为_iQ24。  但A1是_IQ26。  但是_IQ26 (1.0)=_iQ24 (4.0) ,那将不是PID控制器?

我的错觉在哪里?

Michael。

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

    您好Michael:

    这就是2P2Z控制器的编码方式。  输入和输出端子具有iQ24格式,但IQ26用于内部计算,因此系数必须采用此格式。  如果你看一下Pgain,Igain和Dgain值,它们都是IQ26格式。  随附相关的库文档-请参阅第18页了解此控制器。

    我希望这能有所帮助。

    此致,

    Richard

    e2e.ti.com/.../2100.DPLib.pdf

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

    因此,我需要以这种方式设置系数:

    //初始化控制器系数

    CNTL_2P2Z_CoefStrut1.B2 =_IQ26 (0.05);

    CNTL_2P2Z_CoefStrut1.B1 =_IQ26 (- 0.20);

    CNTL_2P2Z_CoefStrut1.b0 =_IQ26 (0.20);

    CNTL_2P2Z_CoefStrut1.A2 =_IQ26 (0.0);

    CNTL_2P2Z_CoefStrut1.A1 =_IQ26 (1.0);

    CNTL_2P2Z_CoefStrut1.max =_iQ24 (0.7);

    CNTL_2P2Z_CoefStrut1.I_MIN =_iQ24 (-Q24 0.9);

    CNTL_2P2Z_CoefStrut1.min =_iQ24 (0.0);

    //初始化网络变量/节点

    ref=_iQ24 (0.0);

    fdbk=_iQ24 (0.0)

    out =_iQ24 (0.0);

    ???

    ________________________________________________________________

    还有另一个问题。 我在 CNTL_2P2Z.ASM中发现了很好的余芬:

    在完成部分(F2803x_v及3.3 更低版本)中:

    缩放u (n):Q24,饱和(max>u (n)>min0)并保存历史记录

    MINL ACC,* XAR3++;饱和至<最大值(Q24)

    MAXL ACC,* XAR3;饱和至>分钟(Q24)

    ;将控制器结果写入输出端子(Q24)

    MOVL *XAR2,ACC;输出控制工作至终端网络

    ;将u(n)转换为Q30格式并存储在数据缓冲区中

    LSL  ACC,#6;逻辑左移6,Q {24}<6-> Q {30}

    MOVL * XAR4,附件;u(n-1)= u(n)=附件

    ________________________________________________________________

    和新产品(来自F2803x 3.5 :

    ;缩放u (n):Q24,饱和(max>u (n)>min0)并保存历史记录

    MINL ACC,* XAR3++;饱和至<最大值(Q24)

    MAXL ACC,* XAR3++           ;饱和至内径最小值>内径最小值(1.0 ,Q24)

    MOVL  @XAR1, ACC;将此值临时保存在XAR1中

    ;将内部u(n)转换为Q30格式并存储在数据缓冲区中

    LSL  ACC,#6;逻辑左移6,Q {24}<6-> Q {30}

    MOVL * XAR4,附件;u(n-1)= u(n)=附件

    MOVL  ACC,@XAR1;将Q24中的临时保存值从XAR1加载到ACC

    MAXL ACC,*XAR3;饱和至>最小输出(Q24)

    (这部分给我的价值很差。 这个 *XA3似乎没有指向任何东西。   

    ;将控制器结果写入输出端子(Q24)

    MOVL *XAR2,ACC;输出控制工作至终端网络

    这种变化的感觉是什么?

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

    选择Q点是为了优化周期计数和提高系数变量的分辨率而做出的决定,模块确实是这样编码的,并且您描述的项目需要Q26,  

    如果您注意到代码中的注释,我们将数据缓冲区保留为Q30,然后如果系数在Q26中,则简单的乘法将直接提供Q24。不需要额外的偏移。  

    您指出的更改是在版本3.4 中完成的, 该增强功能是为了使模块能够在无负载条件下工作,在这种情况下,输出可能必须变为零,如果不允许内部变量变为少量负值,则这种情况永远不会发生。  

    确保您具有正确的结构并已初始化所有变量

    CNTL_2P2Z_CoefStrut1.B2 =_IQ26 (CNTL_3p3z_B2_1);// B2
    CNTL_2P2Z_CoefStrut1.B1 =_IQ26 (CNTL_3p3z_B1_1);// B1
    CNTL_2P2Z_CoefStrut1.b0 =_IQ26 (CNTL_3p3z_B0_1);// b0
    CNTL_2P2Z_CoefStrut1.A2 =_IQ26 (CNTL_3p3z_A2_1);// A2
    CNTL_2P2Z_CoefStrut1.A1 =_IQ26 (CNTL_3p3z_A1_1);// A1
    CNTL_2P2Z_CoefStrut1.max = CNTL_3p3z_Max_1;//夹钳高
    CNTL_2P2Z_CoefStrut1.min = CNTL_3p3z_min_1;//最小夹紧
    CNTL_2P2Z_CoefStrut1.I_MIN = CNTL_3p3z_Imin_1;//锁模导联

    使用最后一行更改初始化例程。