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.
大家好、
我将 Lab1C 与定制板搭配使用、以通过以下数据驱动 BLDC 电机(48V、10000rpm、峰值电流2A)
电机参数
#define USER_MOTOR_TYPE Motor_Type_Pm
#define USER_MOTOR_NUM_POLE_PAIRS (2)
#define USER_MOTOR_RR (空)
#define USER_MOTOR_Rs (1.2)
#define USER_MOTOR_LS_d (0.000721023)
#define USER_MOTOR_LS_q (0.000721023)
#define USER_MOTOR_RATed_VLUX (0.28)
#define USER_MOTOR_磁 化电流 (空)
#define USER_MOTOR_RES_EST_CURRENT (1.0)
#define USER_MOTOR_IND_EST_CURRENT (-1.0)
#define USER_MOTOR_MAX_CURRENT (9.0)
#define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0)
#define USER_MOTOR_FREQ_LOW (2.0)
#define USER_MOTOR_FREQ_HIGH (220.0)
#define USER_MOTOR_FREQ_MAX (250.0)
#define USER_MOTOR_VOLT_MIN (3.0)
#define USER_MOTOR_VOLT_MAX (68.0)
板参数是
#define USER_IQ_FULL_SCALE_FREQ_Hz (433)
#define USER_IQ_FULL_SCALE_VOLTAGE_V (88.0)
#define USER_ADC_FULL_SCALE_VOLTGE_V (69.3)
#define USER_VOLTGE_SF ((float_t)((USER_ADC_FULL_SCALE_VOLTAGE_V)/(USER_IQ_FULL_SCALE_VOLTAGE_V))
#define USER_IQ_FULL_SCALE_CURRENT_A (19.8)
#define USER_ADC_FULL_SCALE_CURRENT_A (33)
#define USER_CURRENT_SF ((float_t)((USER_ADC_FULL_SCALE_CURRENT_A)/(USER_IQ_FULL_SCALE_CURRENT_A))
#define USER_NUM_CURRENT_SENSORS (3)
#define USER_NUM_VOLTGE_SENSORS (3)
#define USER_PWM_FREQ_kHz (15.0)
#define USER_MAX_VS_MAG_PU (0.5)
#define USER_NUM_PWM_TICKS_PER_ISR_TICK (1)
#define USER_NUM_CTRL_TICKS_PER_SPEED_TICK (5)
#define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (5)
#define USER_VOLTGE_FILTER_POLE_Hz (698.34)
实际上、我只有2个电流传感器(不提供相位"A"传感器)、因此我使用 HAL_readAdcData (hal.h)中的以下公式从软件方面对其进行了改编
//转换电流 B
值=(_IQ) ADC_readResult (obj->adcHandle、ADC_ResultNumber_2);
值=_IQ12mpy (value、curry_SF)- obj->adcBias.I.value[1];//除以2^numAdcBits = 2^12
pAdcData->I.value[1]=-value; //-ve 更改电流传感器的极性
//转换当前 C
值=(_IQ) ADC_readResult (obj->adcHandle、ADC_ResultNumber_3);
值=_IQ12mpy (value、curry_SF)- obj->adcBias.I.value[2];//除以2^numAdcBits = 2^12
pAdcData->I.value[2]=-value;
//pAdcData->I.value[2]=(pAdcData->I.value[0]+pAdcData->I.value[1]);
//转换电流 A
值=(_IQ) ADC_readResult (obj->adcHandle、ADC_ResultNumber_1);
值=_IQ12mpy (value、curry_SF)- obj->adcBias.I.value[0];//除以2^numAdcBits = 2^12
//pAdcData->I.value[0]=-value;
pAdcData->I.value[0]=(pAdcData->I.value[1]+pAdcData->I.value[2]);
并在 hal.c 中进行设置、同时声明电流传感器 ADC
ADC_setSockChanNumber (obj->adcHandle、ADC_SockNumber_0、ADC_SockChanNumber_A4);
ADC_setSockTrigSrc (obj->adcHandle、ADC_SockNumber_0、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockSampleDelay (obj->adcHandle、ADC_SockNumber_0、ADC_SockSampleDelay_7_cycles);
ADC_setSockChanNumber (obj->adcHandle、ADC_SockNumber_1、ADC_SockChanNumber_A4); //与 b 相电流感测相同
ADC_setSockTrigSrc (obj->adcHandle、ADC_SockNumber_1、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockSampleDelay (obj->adcHandle、ADC_SockNumber_1、ADC_SockSampleDelay_7_cycles);
ADC_setSockChanNumber (obj->adcHandle、ADC_SockNumber_2、ADC_SockChanNumber_A4);
ADC_setSockTrigSrc (obj->adcHandle、ADC_SockNumber_2、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockSampleDelay (obj->adcHandle、ADC_SockNumber_2、ADC_SockSampleDelay_7_cycles);
ADC_setSockChanNumber (obj->adcHandle、ADC_SockNumber_3、ADC_SockChanNumber_A6);
ADC_setSockTrigSrc (obj->adcHandle、ADC_SockNumber_3、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockSampleDelay (obj->adcHandle、ADC_SockNumber_3、ADC_SockSampleDelay_7_cycles);
bcz 如果选择2个电流传感器、根据 hal.c 中的 ADC、则绘制的是14A (超过限制)
就像这样、当我从软件方面进行管理时、它运行良好、我实现了最高8400RPM 的理想速度、最大加速度为10kRPM。
但现在我的问题是
我想将加速度增加到50KRPM、但无法实现 (即使将电机最大电流增加到18A、我也没有获得)。
读数之后
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/463896 线程我曾尝试过 LAB10a、但它也绘制了14A。(即使不是 Lab1b 和 Lab1C、无论我尝试的是哪个实验、它绘制的是14A)
我的问题是
如何获得更高的加速度?
以及如何运行其他实验(尤其是 Lab10A)?(该实验消耗的电流更高)
您可能只需启用电流环路并禁用速度闭环即可获得更高的加速度。 您应该为启动设置较低的加速度、 然后在仍需要 速度闭环时将加速度更改为较高的值。
您能否布置一些由示波器捕获的相电流波形? 如果 您想实现如此高的加速度、是否可以增大电源板的最大电流?
尊敬的 Yanming:
感谢您的回答。
" 如果 您想实现如此高的加速度、是否可以增大电源板的最大电流?"
是的、最多可使用10A。
"您能否发布一些由示波器捕获的相电流波形? "
连接了从1000rpm 到8400rpm 的电流和电压波形图像(使用 Lab1C)
电流@1krpm
电流@2krpm
电流@3krpm
电流@4krpm
电流@5krpm
电流@6krpm
电流@7krpm
电流@8krpm
Current@8.4krpm
电压
电压@1krpm
电压@2krpm
电压@3krpm
电压@4krpm
电压@5krpm
电压@6krpm
电压@7krpm
电压@8krpm
voltage@8.4krpm
我对有些怀疑
Q1)
"您可能只需启用电流环路并禁用速度闭环即可获得更高的加速度。"
对于 Lab1C 或 Lab10A、您是否建议这么做?
在 lab1c 中、我尝试了以下组合
1) gMotorVars.Flag_enableSpeedCtrl = 0、将速度保持在500rpm 、并将 gMotorVars.Iqref_A 改变 为0.1至更高。
但在 gMotorVars.Iqref_a=0.1时、它仅绘制了14A。
2) gMotorVars.Flag_enableSpeedCtrl = 0、如果我将保持 gMotorVars.Iqref_A=0并通过将 gMotorVars.SpeedRef_krpm 更改为1krpm 且 V_BIAS.IqSet_A=0.5来提高速度、那么它在最大1.3A 时工作正常
3) gMotorVars.Flag_enableSpeedCtrl = 1、并且与(1)和(2)相同的变量
Q2)
根据您的上述建议、
在表达式窗口中、 有3个 IQ
1) 1) gMotorVars.IQ_A
2) 2) gMotorVars.Iqref_A
3) 3) V_BIAS.IqSet_A
在3个 IQ 中、需要更改哪个 IQ?
问题3)
在我的上一篇文章中
"实际上、我只有2个电流传感器(不提供相位"A"传感器)、因此我使用 HAL_readAdcData (hal.h)中的以下公式从软件方面对其进行了改编"
它会影响我的绩效吗? 无论我在加速方面遇到什么问题、这对我来说是否重要?
问题4)
我的最后一个问题也请向我提供建议
"如何运行其他实验(特别是 Lab10A)?(该实验消耗的电流更高)"
我无法执行除 Lab1b 和 Lab1c 以外的所有实验、如果我将根据实验手册继续、则会消耗高电流(14A)。
问题1. lab10a 或 lab05b。 Lab01b 和 Lab01c 仅用于验证硬件、不用于在高速和负载下旋转电机、这就是不能获得更高加速度的原因、这两个实验在没有转子位置的情况下不是开环控制。
如果您想在不使用速度闭合环路的情况下使用扭矩控制、请参阅 lab05a。
问题2. 回答问题1。
问题3. 您无法实现过调制、并且需要在 user.h 中将 USER_MAX_VS_MAG_PU 设置为小于0.5
问题4. 请参阅 InstaSPIN 实验室指南中的操作步骤、您应首先运行 lab02b 或 lab02c 以识别电机参数、然后运行 lab05a/b 或 lab10a 等后续实验。
尊敬的 Yanming:
感谢您的建议。
现在、我已经成功实现了 Lab2a、2b 和 Lab4。
我已参考实验室手册以及 HVkitr1p1套件手册来执行该实验。
但基于速度环路的实验无法正常工作。
Q1) Lab5b
现在我使用的是 HVkitr1p1。 在 Lab5b 中调节 Kp、Ki 时、我的性能完全没有变化。
我已将转速设置为500rpm、突然它将转速设置为高 rpm、它将停止。
我的速度计算值
Kp = 30.14
Ki = 1.49
即使改变它、性能也没有变化。
我的电机参数是
#define USER_IQ_FULL_SCALE_FREQ_Hz (433.0)
#define USER_IQ_FULL_SCALE_VOLTAGE_V (50.0)
#define USER_ADC_FULL_SCALE_VOLTGE_V (409.6)
#define USER_IQ_FULL_SCALE_CURRENT_A (12.0)
#define USER_ADC_FULL_SCALE_CURRENT_A (19.89)
#define USER_MOTOR_NUM_POLE_PAIRS (2)
#define USER_MOTOR_Rs (0.352500051)
#define USER_MOTOR_LS_d (0.00025)
#define USER_MOTOR_LS_q (0.00025)
#define USER_MOTOR_RATed_VLUX (0.045)
#define USER_MOTOR_RES_EST_CURRENT (1.0)
#define USER_MOTOR_IND_EST_CURRENT (-1.0)
#define USER_MOTOR_MAX_CURRENT (10.0)
#define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0)
#define USER_MOTOR_FREQ_LOW (1.0)
#define USER_MOTOR_FREQ_HIGH (200.0)
#define USER_MOTOR_FREQ_MAX (250.0)
#define USER_MOTOR_VOLT_MIN (3.0)
#define USER_MOTOR_VOLT_MAX (48.0)
和
q) Lab1C
即使 在 Lab1C 中、当我更改速度和电流的 KP 和 KI 时、性能和输入电流都没有变化。
如果我增大或减小电流 KP、则它应根据设置的电流 KP 消耗更多/更少的电流。
但未观察到变化。
那么、是否缺少任何内容?
等待您的回复。
Lab01b 和 lab01c 是开环控制、不使用速度环路和位置角度。
对于速度控制器而言、Kp 和 Ki 似乎过高、您可以根据电机的运行状态调整这两个参数。
是的、这是根据计算得出的。
然后、在 Lab5b 中的运行条件期间、I SET
速度 KP = 5
速度 Ki = 0.01至1.66
但是、我没有观察到任何重大变化。
稍后、为了验证它是否接受速度 Kp、ki 更改
我使速度 Kp 和 Ki=0、IQ_ref=0、Speed_krpm=0、此时电机以其高速运行(9500rpm)。
为什么会出现这种行为?
尊敬的 Yanming:
现在、我的电机在800 rpm 到10000 rpm 的速度范围内运转良好、加速度更高。
问题 仅在于速度和电流 Kp、Ki。
我已经使用 Lab2b 测量了电机的多个数据、并相应地计算了 Kp、Ki。
现在、它在 Lab5b 中运行良好。
但无法获得较低的转速范围。
我的 V/f = 0.048、这是消耗量
1) Vphase = 3V &
2)控制器侧的 VOLT_sensing 在800rpm 时=0.18V。
因此、我已经在 Hvkitr1p1的 R2 (电压感测中绕过800k Ω)上连接了所有4个跳线、并在 user.h 中更新了相应的 ADC_VOLT 和 POLE_FREQ
但是、我仍然无法在0至800rpm 的转速范围内旋转电机、它在800rpm 至10000rpm 的转速范围内工作正常、并且加速度更高。
那么、如何获得更低的转速范围?
无传感器 FOC 很难在如此宽的速度范围内以负载旋转电机、尤其是零速或极低的速度。 如果您需要以零速或接近零速运行电机、则必须使用有传感器 FOC。
您可以使用不同的增益来调节低速和高速控制器。
问题1.
"您可以使用不同的增益来调节低速和高速控制器。"
是的、通过这样做、它可以正常工作。
但我不想为高速和低速范围定义不同的增益。
Q2)
"无传感器 FOC 很难在如此宽的速度范围内以负载旋转电机、尤其是零速或极低的速度。 如果您需要以零速或接近零速运行电机、则必须使用传感 FOC。"
好的、您是指 Lab12b。?
在有传感器 FOC 中、我能否同时获得速度和电流控制?
问题3)
进行了比较
参考文献编号:SPRUHJ1F
因此、如果我增大较低的电压感应范围、我是否仅使用 Lab5b 获得较低的 rpm?
问题1. 通常、在实际产品中、对低速和高速使用不同的增益是常见的解决方案。
问题2. 无传感器和有传感器 FOC 都支持速度和电流闭环、唯一的区别是位置反馈。
问题3. 是的、如果采样电压的分辨率足够好、这意味着速度更低、而不是零速度。
"问题1. 通常情况下、对低速和高速使用不同的增益是实际产品中的常见解决方案。"
是的、我已经观察到。
"第三季度. 是的、如果采样电压的分辨率足够好、这意味着速度更低、而不是零速度。"
否、不是零。最小值为300rpm。
现在、通过增大电压感应范围、我还能够以更高的加速度实现400rpm 转速。 但在使用 Lab5b 时减速时遇到问题。
因此、根据您的建议、我转到了传感实验室。 借助 Lab6a、我能够实现更高的加速度+减速以及低转速(测试10rpm)。
感谢 Yanming 的支持。