部件号: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。
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.
部件号: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
因此,我需要以这种方式设置系数:
//初始化控制器系数
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;//锁模导联
使用最后一行更改初始化例程。