请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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;