本帖最后由 Angus 于 2024-9-12 16:17 编辑
今天调试一个新板子,总结一下调试步骤:修改好电机Lq, Ld,绕线电阻RESISTER_COIL,以采样电阻及运放倍数CURRENT_Adc1000以后,核对以下事项
1,核对PWM, PWM024 驱动上MOS, PWM135 驱动下MOS。如果不是这样,代码改动稍大。
2,核对PWM 的输出极性,PWM 输出高时功率管导通,如果不是,在函数PWM_Init()中124~125行注释或放开反相函数。
3,核对电流运放的极性,电流流入电机时,运放输出电压增高。电流 ADC 的值为正。若正负反了,在ADC 中断里把Current_PWM01/PWM23/PWM45 数据取反。
4,核对电流 ADC 输入引脚与输出 PWM01/23/45 对应关系。
以上若没错,可以烧录代码,通电了。若转速旋钮=0,上电后在状态0,功率管关闭。这时可以在 ADC 中断代码中增加一个状态7(下面详述两处代码改动)。然后在仿真状态,依次写变量的值 Motor_Status=7, Angle_q=0,PWM->MSKEN=0(PWM输出), Id_set_f12 = CURRENT_Adc1000<<2 (电流值=1A), 这个时候,Current_PWM01的值刚好是1A电流对应的ADC 值。
调试电路,代码如下稍做修改。
ADC 中断里,349 行这里是增加的状态7,什么都不用做,这个状态用于仿真状态直接变量的值
main.c 中主循环这里,333行,增加if(Motor_Status != 7)排除状态7,即状态7也是什么都不做。
CURRENT_Adc1000 = 0xB333, 此值相当于0.25A电流值,设定电流1A, 就是把 Iq_Set_f12写成其4倍的值 = 0x0002CCCC
如下图,10毫欧电阻放大5.6倍相当于56毫欧。
电流1A时,5V 参考源,12位ADC 值是: (1A*56毫欧/5000毫伏)*4096 = 45.875, 仿真看到 Current_PWM01 = 45,
如果Current_PWM01的值若比45小,可能是A相电流有振荡或ADC转换时间窗太短。不过,在0度时,代码中是用Current_PWM23/PWM45计算Ia,Ib的, 所以,只要Current_PWM23/PWM45的电流和=45电流控制就是对的,不影响控制。
输出电压 Vq_out_f17 =1441344,右移17位得0.1V的数值是 : 1441344/131072 = 11, 即输出电压Vq是1.1V,电机电阻是1欧,这个电压值也是对的。
|