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.

[参考译文] MSP430G2553:MSP430中用于 BLDC 的 PID 控制器

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/741962/msp430g2553-pid-controller-in-msp430-for-bldc

器件型号:MSP430G2553
主题中讨论的其他器件:LM331

你好! 我尝试将具有 PWM 的分立式 PID 用于 BLDC 电机、我获取电机速度的方法是通过我自己构建的编码器、 而光耦合器生成的频率变为 LM331 (电压转换效率)、 对于生成的电压、我尝试通过 ADC10获取电机速度、但问题是我的 PID 执行它所需的任何操作、即使它忽略了我的设定点。 我检查了其他现有代码(来自其他微控制器)、它们看起来运行良好、我想说的是、PID 已经使用 Ziegler-Nichols 方法进行了调整。


#include "io430.h"
unsigned int adc、v、out;
float sp=380;//等效电压来自"x"量的 Hz 或 RPM
float ak=0、ak_1_0、ek=0、ek_1_0、ek_2=0、ki=0、kp=0、kp=0、kd=0、q0=0、q0=0、q1=0、q2=0、q2=0、ti=0、td=0;
float u=0、u_1=0;
float T = 0.0002;
float Thao = 1.2、theta =.5、k=.958;


int main( void )


BCSCTL1 = CALBC1_16MHz;
DCOCTL = CALDCO_16MHz;
WDTCTL = WDTPW + WDTHOLD;
_bis_SR_register (GIE);
/*P1SEL = 0x00;
P1DIR |= BIT0;*/



TACTL = tassel_2+MC_1+TAIE;
TACCR0 = 10666;//采样频率5kHz


TA1CTL = tassel_1+MC_1;
TA1CCR0 =385;    //85Hz PWM
TA1CCTL1 = OUTMOD_7;
P2SEL |= BIT1;
P2DIR |= BIT1;


KP=(1.2*Thao)/(k*theta);
TI=2*theta;
td=0.5*theta;

Q0=KP*(1+T/(2*TI)+TD/T);
Q1-KP*(1-T/(2*ti)+(2*td)/t);
Q2=(KP*TD)/T;


ADC10CTL0=SREF_0+ADC10SHT_3+ADC10IE+ADC10ON;
ADC10CTL1=INCH_0+CONSEQ0;
ADC10AE0 |=BIT0;

while (1)



ADC10CTL0 |= ENC+ADC10SC;




#pragma vector=TIMER0_A1_vector
_interrupt void Timer0 (void){
Switch( TAIV ){
情况2:中断;//未使用 CCR1
情况4:中断;//未使用 CCR2
案例10:

ek=sp-v;
U = u_1 + Q0*EK + Q1*EK_1 + Q2*EK_2;
//if (u >= 3300) u=1500;
//if (u <=0) u=0;

输出= u*385/1500;

EK_2=EK_1;
EK_1=EK-;
u_1=u;
TA1CCR1 = OUT;



中断;


#pragma vector=ADC10_vector
_interrupt void ADC10 (void){

ADC=ADC10MEM;

V=ADC*3300/1024;
_delay_cycles (500);

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

    您好、阿尔多、

    MSP430没有 HW 的浮点算术功能、因此我可以想象、您在 ISR 中执行的所有计算都花费了很长时间、会导致代码执行停止。

    我的意思是 G2553也没有硬件乘法器、因此所有复杂的乘法器、如 u = u_1 + Q0*EK + Q1*EK_1 + Q2*EK_2、都需要大量的 CPU 消耗

    另请参阅:
    e2e.ti.com/.../186814

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你是对的!让我来证明一下、我会告诉你它是否正常工作、如果可以的话、还有一个问题、你是否建议我将易失性变量用于这个软件? 因为 MCU 会不断更改变量。 非常感谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、阿尔多、
    我不认为这会产生很大的影响、但会增加风险、因此当哪个函数改变变量时、你需要控制。
    在这样一个简短的程序中可能有意义、在这个程序中、变量完全受控、但是如果在中断访问和更改同一个变量中使用了多个函数、则在您无法正确同步调用时会很危险。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aldo、

    首先、

    毫无疑问、在闪亮的 MSP430G2553上可以实现非常好的 PID。

    PID 运行的两个主要概念:

    -当我们控制快速交换进程时,需要快速计算。 如果 BLDC 的负载变化不超过,比如说,在一秒钟内变化5%,并且根据 BLDC 速度的变化,您可能需要计算 PWM 值每秒50、20或10次。 换句话说、您可以每秒测量5000次的旋转速度、但是设置新的 PWM 值需要时间、您应该使用最近100、250或500个读数的平均值! 此外、您不应在中断中执行此计算

    -您为数字化世界构建软件,拥有 ADC10 10 10位输入和8/16位输出。 可以将浮点值(如 float T=0.0002)重新因子为有符号32位值、并使用32位长执行所有计算。

    其他提示:

    -删除未使用的变量以保存快速 RAM

    -本地使用的变量在本地声明、它会将它们放置在使用快速 RAM 的堆栈上

    -根据可用的 RAM,您可以将大多数 CPU 扩展计算移动到 RAM,如 DIVS 32、mult32,它们是小对象:

    但是、它需要深入研究 RTS 库
    -使用 CCS 时钟计数功能来估算代码执行时间。  

    最后两个问题:

    -如果您发布了一个代码、请使用"插入代码、附加文件等..." " "使用 Syntax荧 光笔、

    -两三天前、我已经从 Mozilla 转向 Chrome、因为 TIREX 和 GUI Composer 基于 Chrome 和 javascript 工具。 此外,Mozilla 的内存管理问题很糟糕,而且可能是垃圾收集器,在5天之后,她分配了10 GB 以上的内存。 在内存处理方面、Chrome 比 Mozilla 看起来要好得多。

    我的问题是、当我向您撰写回复时、拼写检查器会让我的文本中有50%存在疑问。 在 Mozilla 下,拼写检查程序几乎是完美的。

    使用 Chrome 时、要进行良好的拼写检查、我需要做什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不知道是否存在用于 MSP 的 CCS、我使用 IAR Embedded 进行编程和仿真、我会尝试您的建议、以制作更智能的 PID、因为我修改了我的最后一个代码、现在它正在工作、但我希望它能 Caster。 谢谢
    您真的很有帮助。
    问候语。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了使其正常工作、您做了哪些更改?
    因为我记得您没有使用过 ki。

    github.com/.../FastPID
    www.embedded.com/.../PID-without-a-PhD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、阿尔多、

    我假设此主题已解决、如果有任何打开的内容、可以关闭、请打开一个新主题并参考此主题。 谢谢!