LingYi 发表于 2013-9-20 22:01:28

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]
查看完整版本: MK4.01电调换向的BUG?