MK4.01电调换向的BUG?
本帖最后由 LingYi 于 2013-9-20 22:02 编辑SIGNAL(SIG_COMPARATOR)
//############################################################################
{
unsigned char sense = 0;
do
{
if(SENSE_H) sense = 1; else sense = 0;
switch(Phase)
{
case 0:
STEUER_A_H;
if(sense)
{
STEUER_C_L;
if(ZeitZumAdWandeln) AdConvert();
SENSE_FALLING_INT;
SENSE_B;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_B_L;
}
break;
case 1:
STEUER_C_L;
if(!sense)
{
STEUER_B_H;
if(ZeitZumAdWandeln) AdConvert();
SENSE_A;
SENSE_RISING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_A_H;
}
break;
case 2:
STEUER_B_H;
if(sense)
{
STEUER_A_L;
if(ZeitZumAdWandeln) AdConvert();
SENSE_C;
SENSE_FALLING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_C_L;
}
break;
case 3:
STEUER_A_L;
if(!sense)
{
STEUER_C_H;
if(ZeitZumAdWandeln) AdConvert();
SENSE_B;
SENSE_RISING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_B_H;
}
break;
case 4:
STEUER_C_H;
if(sense)
{
STEUER_B_L;
if(ZeitZumAdWandeln) AdConvert();
SENSE_A;
SENSE_FALLING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_A_L;
}
break;
case 5:
STEUER_B_L;
if(!sense)
{
STEUER_A_H;
if(ZeitZumAdWandeln) AdConvert();
SENSE_C;
SENSE_RISING_INT;
Phase = 0;
CntKommutierungen++;
}
else
{
STEUER_C_H;
}
break;
}
}
while((SENSE_L && sense) || (SENSE_H && !sense));
ZeitZumAdWandeln = 0;
}
//MK的MITTEL 接的是 比较器的 +, NULLA 、B、C接的是比较器的-端
在AB相导通的时候,C过0信号是由高到低的变化,所以比较器输出的结果是由0到1的变化(刚好相反)。
然后有 图片05可以看出,只有过0信号又低到高才会出现消磁信号,AB 、BC、CA 都没有消磁信号。
AC BA CB 导通,都有消磁信号,因此,只需要对这3组做消磁检测。
所以,以上代码我们只关心 case1,3,5。
这里就只对1做个剖析。
if(SENSE_H) sense = 1; else sense = 0; //过0信号 或者 消磁信号出现的时候 __|----(低到高),SENSE_H的值是 ----|__(高到低) (A)
case 1: AC相导通
STEUER_C_L; //开下臂C,同时关掉下臂A,B (1)
if(!sense) //过0信号或消磁信号都进 if
{
STEUER_B_H; //开B上臂的PWM (2)
if(ZeitZumAdWandeln) AdConvert(); //电流监测,不用关心
SENSE_A; //比较器监测 A相
SENSE_RISING_INT; //比较器监测 A相
Phase++; //相位切换到 BC
CntKommutierungen++;
}
else
{
STEUER_A_H; (3)
}
break;
while((SENSE_L && sense) || (SENSE_H && !sense)); (B)//如果给 A, B都认为是过0 或者是 消磁信号则推出 do while
现在,假设 信号是个消磁信号, A监测到是 过0 信号,那么执行if语句,(1) (2) 组合 把相位切换到了BC相,然后比较器监测由 监测C相 ,变成了监测A相,在 B 的时候监测到的是个 消磁 信号, 那么继续执行 do while,此时 A监测到的是 消磁信号,执行else 语句,(1)(3)组合,把 BC相切换到原来的 AB 相位, 但是 比较器 监测 却没有从 A 相 变回原来的 C相(BUG在此),然后 (B)监测到的也是消磁信号,所以推出。
最后,消磁信号的产生 改变了 比较器 监测的 对象,下一次,真正的过0信号来的时候,却监测不到了,所以我觉得这里有点问题。
个人分析的,不知道正确与否,望高手指教。
页:
[1]