请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSPM0G1507 工具/软件:
你(们)好
目前、我正在使用 采用 MSP430 微控制器的 PMP7647_RevC 设计解决方案。 我计划迁移到 MSPM0G1507、
我需要有关所面临问题(附加了电流波形)的帮助
使用计时器、PI 控制以非常慢的速度在 5ms 运行
我正在尝试使用负载部分的 PI 控制。
此致、
Yogesh

/* Ki = 0.1, 0.1 x 2^31 = 2,147,483,648 = 0x0CCCCCCC (0.001) 0x0020C49B*/
#define Ki (0x00CCCCCC)
/* Kp = 0.1, 0.3 x 2^31 = 644,245,094 = 0x2666 6666 */
#define Kp (0x00CCCCCC)
const DL_MathACL_operationConfig gMpyConfig = {
.opType = DL_MATHACL_OP_TYPE_MPY_32,
.opSign = DL_MATHACL_OPSIGN_SIGNED,
.iterations = 1,
.scaleFactor = 0,
.qType = DL_MATHACL_Q_TYPE_Q31};
int error = Ref_Load_Current-Load_Current;
errorQ31 = (error << (31-12))-1;;
DL_MathACL_startMpyOperation(MATHACL, &gMpyConfig, Ki, errorQ31);
DL_MathACL_waitForOperation(MATHACL);
integral = integral + DL_MathACL_getResultOne(MATHACL);
if(integral>=0x50000000){
integral = 0x50000000;
}
else if(integral < 0){
integral =0;
}
DL_MathACL_startMpyOperation(MATHACL, &gMpyConfig, Kp, errorQ31);
DL_MathACL_waitForOperation(MATHACL);
Proportional = DL_MathACL_getResultOne(MATHACL);
output = integral + Proportional ;
if(output>=0x50000000){
output = 0x50000000;
}
else if(output < 0){
output = 0;
}
DL_MathACL_startMpyOperation(MATHACL, &gMpyConfig, 320, output);
DL_MathACL_waitForOperation(MATHACL);
outputPI = DL_MathACL_getResultOne(MATHACL);
Duty_Boost = outputPI;