Microchip有一篇Application Note "Sensorless BLDC Control with Back-EMF Filtering Using a Majority Fuction"  此篇有許多複雜的表格和演算法 困惑了我一段時間,所以我分享一下我對這篇的理解

AN1160 前半段篇幅都在講解Sensorless基礎,我相信仔細閱讀的話不難理解,所以我重點就放在Page 9之後的數位濾波(Digital Filter)技巧與演算法實現的部分  註:閱讀此篇文章建議搭配看程式碼

 

Majority Function :  簡單說是一種布林函數(Boolean Function),輸出只會是 1 或 0 , 從下表可以看出,假設有3個輸入,有兩個1(66%) 輸出就是1 ,反之有兩個0(66%) ,輸出就是0。

image

Majority Function不難理解,此文章最難理解的莫屬於下面這張表格,需要拆開來慢慢說明。

image

 

 

 

以下圖為例   Logical test 何時為0 何時為1??  

image

 

 

BEMF Phase: 因為偵測反電動勢是否有過零點(Zero - Crossing) ,因此需要先將反電動勢訊號數位化 ,BEMF那欄只有0跟1 ,至於何時會是0,何時會是1 ,讀者自己推敲一下既可明白。

XOR Masked: 用來判斷BEMF是上升或下降(註:XOR那欄的0代表BEMF處於下降,1處於上升) , 對BEMF做XOR運算,例如 Angle 3時 BEMF CBA 是 110  ,XOR Masked 是000

 

 

                                                                                                                                                 因此           110 

                                                                                                                                                         XOR   000  

                                                                                                                                                      -----------------

                                                                                                                                                                    110 (運算完之後接著運算AND)

 

 

 

AND Masked :用來判斷哪個過零點要偵測哪一個phase,(註:AND那欄的1代表過零點在那一Phase判斷)

剛才經過XOR運算完的結果再放到AND Masked做運算,

                                                            110

                                                  AND  010

                                            --------------------

                                                            010 

經過XOR 、AND運算後的結果 稱為 " Active-Masked BEMF "  

Active-Masked BEMF 3個位元在經過OR運算  結果稱為"Logical Test"   

0 | 1 | 0  =>  1  (Logical Test)  

AN1160範例程式下面這段,就是在判斷(Logical Test)  

  if((ComparatorOutputs^ADC_XOR[ADCCommState])& ADC_MASK[ADCCommState]){   //ACTIVE BEMF signal 
        adcBackEMFFilter|=0x01;   //logical test          
   }

 

濾波器會不斷查找Logical Test  從 1(真) 變成 0(假) 的變化,一但查找到之後,會在查找連續3個假 ,才會判斷Zero-Cross Event 為有效

參考下圖就能明白整體的運作方式。  

image

 

接下來的重點是如何用程式實現數位濾波器

程式的濾波器寫法只用兩個判斷式,就實現數位濾波器的功能

   if((ComparatorOutputs^ADC_XOR[ADCCommState])& ADC_MASK[ADCCommState]){   //ACTIVE BEMF signal 
                adcBackEMFFilter|=0x01;        //logical test 
    }

        adcBackEMFFilter = ADC_BEMF_FILTER[adcBackEMFFilter];    //Majority detection filter  
            LATAbits.LATA10 = 0;
    if (adcBackEMFFilter&0b00000001) {     //如果成立 就判斷Zero-Corssing 有效

        ..........................

    }

請注意在def.c 的這個濾波器表格,其中0x01代表過零點為有效(Ture)

const unsigned char ADC_BEMF_FILTER_CLKW[64]=                                               //unique index is 24,25,26,28,40,41,42,44,48,49,50,52,56,57,58,60
                                    {0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,0x1E,
                                     0x20,0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x01,0x01,0x01,0x36,0x01,0x3A,0x3C,0x3E,  //first half 
                                     0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x01,0x01,0x01,0x16,0x01,0x1A,0x1C,0x1E,
                                     0x01,0x01,0x01,0x26,0x01,0x2A,0x2C,0x2E,0x01,0x01,0x01,0x36,0x01,0x3A,0x3C,0x3E  }; //second half

 

請注意,假設目前的ADC_BEMF_FILTER[adcBackEMFFilter];    是指向最後一個元素 0x3E(62)  index = 63; 

當logical test |= 1不成立時,

adcBackEMFFilter  = ADC_BEMF_FILTER[ 0x3E(62) ]     // adcBackEMFFilter   =  0x3C

logical test |= 1 還是不成立,

adcBackEMFFilter  = ADC_BEMF_FILTER[ 0x3C(60) ]     // adcBackEMFFilter   =  0x01

 

此時下列就成立(注:AN1160是說會判斷3個假的logical test,但是按照程式的邏輯推敲只會判斷2次假)

if (adcBackEMFFilter&0b00000001) {     //如果成立 就判斷Zero-Corssing 有效

        ..........................    

}

 

注意: 由於Sersorless啟動的過程,首先馬達在正常運轉狀態之前,會有個啟動模式,此時會讓馬達轉子進行定位、加速(ramp-up)和穩定運轉,期間偵測ZC

由於無感測是用反電動勢偵測ZC,因此速度不能太慢。

所以可以看到程式碼有個BLANKING_COUNT,這個時間就是在等待馬達ramp-up的時間

 

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    全站熱搜

    小影 發表在 痞客邦 留言(5) 人氣()