1 BLDC驱动的核心就是电子换相;以方波驱动为例,常用的手法就是过零点换相; 那么如何检测过零点,常见的可以采用两种方式: 1 ADC端口电压检测,与虚拟中点电压值比较,受ADC转换时间的影响,这种方式无法在高速及超高速BLDC中应用; 2 基于VC比较器,将悬空相与虚拟中点比较,VC比较器的响应时间可以做到ns级别,非常适合高速BLDC的驱动;
图中, PHASE_A,PHASE_B, PHASE_C 分别接电机的 A, B, C 线,经过一个分压网络后分别为 NULL_A, NULL_B, NULL_C, 再连接到单片机的ADC0, ADC1, ADC2 引脚。而MITTEL 为估测的变形后的中点电压,接单片机的 AIN0 引脚。只要在 AB 通电期间开通NULL_C 和 MITTEL 的比较; AC 通电期间开通 NULL_B和 MITTLE 的比较; BC 通电期间开通NULL_A 的比较,就可以成功检测出各相的过零事件。(VC比较器的用法类似,核心就是比较中点电压和悬空相的分压) 下面来说说这个分压网络到底是怎么回事,这是个比较经典的反电动势采集电路,很多无刷电机的教材上都有照搬。现在我们来分析,先无视图中这几个电容,把它当成纯电阻网络。假设AB 相开始通电的时候, PHASE_A的电压约为 12V, PHASE_B 的电压约为 0V, C 线圈此时产生 6V 的反向感生电动势,叠加在绕组中点上后,在 PHASE_C 输出的电压应为 12V 左右,问:此时MITTEL 点电压值是多少? NULL_C点电压值又是多少?
基尔霍夫定律学得好的朋友可以手算,学得不好的朋友,可以用电路软件仿真。答案是: MITTEL=4V, NULL_C=5.3V。此时 NULL_C 点电压高于 MITTEL 点电压,模拟比较器输出 AC0为 0。接着转子继续向前转动, C 线圈的感生电动势逐渐减小,当减小到零时,PHASE_C 端输出的电压就是绕组中点电压 6V,此时可以算得: MITTLE=3V, NULL_C=3V,可见此时模拟比较器处于零界状态。随着转子继续转动 C 线圈产生的电动势方向变反, PHASE_C 端测得的电压会小于中点 6V,假设现在 C 线圈产生-1V 的电动势,则PHASE_C端测得的电压为 5V,放到这个电阻网络里一计算,结果得: MITTEL=2.8V, NULL_C=2.6V。此时 MITTLE 点电压高于 NULL_C 点电压,说明刚才模拟比较器的输出已发生了一次跳变,过零事件被检测到。
3 VC比较器换相核心功能函数: void Phase_Change(void) {
unsigned char sense = 0;
do { if(SENSE_H) sense = 1; else sense = 0;
switch(uvstep) { case 0: FETs_OFF(); A_H; SET_ADT0_CHA_PWM;
if(sense) { C_L;
SENSE_FALLING_INT; SENSE_B; uvstep++; VC_IRQ_CNT++; } else { B_L; } break;
case 1: FETs_OFF(); C_L; if(!sense) { B_H; SET_ADT1_CHA_PWM;
SENSE_A; SENSE_RISING_INT; uvstep++; VC_IRQ_CNT++; } else { A_H; SET_ADT0_CHA_PWM; }
break;
case 2: FETs_OFF(); B_H; SET_ADT1_CHA_PWM; if(sense) { A_L;
SENSE_C; SENSE_FALLING_INT; uvstep++; VC_IRQ_CNT++; } else { C_L; }
break;
case 3: FETs_OFF(); A_L; if(!sense) { C_H; SET_ADT2_CHA_PWM;
SENSE_B; SENSE_RISING_INT; uvstep++; VC_IRQ_CNT++; } else { B_H; SET_ADT1_CHA_PWM; }
break;
case 4: FETs_OFF(); C_H; SET_ADT2_CHA_PWM; if(sense) { B_L;
SENSE_A; SENSE_FALLING_INT; uvstep++; VC_IRQ_CNT++; } else { A_L; }
break;
case 5: FETs_OFF(); B_L; if(!sense) { A_H; SET_ADT0_CHA_PWM;
SENSE_C; SENSE_RISING_INT; uvstep = 0; VC_IRQ_CNT++;
} else { C_H; SET_ADT2_CHA_PWM; } break; } } while((SENSE_L && sense) || (SENSE_H && !sense));
}
3 参考意义: HC32L130 BLDC电机基础驱动参考(ADT,PWM, VC比较器的配置方法);
4 软硬件参考详见附件;欢迎讨论。
|