BLDC開發筆記4 轉速的計算

2022-06-20 02:45:07 字數 1246 閱讀 6902

以下結合自己的理解,如有錯誤請幫忙及時指正。

轉速的計算我現在是通過一定時間內,霍爾訊號的邊沿數量來計算的。這裡每隔50ms在滴答定時器中斷服務函式裡面計算一次。霍爾訊號每變化一次,就產生一次霍爾觸發中斷。因為我的電機是2對極,所以在一圈內有12個霍爾狀態,即電機轉動一圈會觸發12次中斷。假設在50ms內,霍爾觸發了 n 次中斷,我們可以得到轉速 x 的公式:

50ms內,

\[x=n/12 (rpms)

\]則1ms內

\[x=n/12/50 (rpms)

\]1s內

\[x=(n/12/50)*1000 (rps)

\]1min內

\[x=(n/12/50)*1000*60=100n (rpm)

\]根據這個式子就能計算出轉速。

在標頭檔案中宣告電機引數結構體

typedef struct

motor_device;

巨集定義

#define bldc_pole_num 2  //極對數
對電機引數初始化

motor_device bldc_dev;         //電機引數結構體

void motor_init(void)

定時器初始化,每1ms中斷一次

void systick_init(void)

編寫滴答定時器中斷服務函式,每50ms計算一次轉速

void systick_handler(void)

}

在霍爾中斷服務函式中加入計步引數,測量50ms內霍爾感測器脈衝數量,用於計算轉速

void hall_tim_irqhandler(void)

}

通過串列埠除錯助手檢視轉速資訊。

用的24v電機最高轉速有33000rpm,這裡在開環20%占空比下,有100rpm的波動。為什麼是100?其實這就是這種計算方法的侷限性,我們通過一段時間內霍爾變化次數計算轉速,每次變化我們就加1,所以誤差的原因就在這裡,我們每次只能加1,誤差1通過公式中係數100(2對極)進行了放大,就變成了誤差100rpm.

後續將嘗試另一種通過兩個霍爾狀態之間時間差計算轉速的方式。

IPLE 開發筆記 4

10 月 16 日 經過總結得出了一點api設計經驗,即傳識別符號,不穿指標。最初的設計 void demoapi pbyte pfiledata,int width,int height 改良後的設計 void demoapi handle hfile 這樣的好處是,我們只需要在函式外部管理乙個檔...

ios開發筆記 4

title ios開發筆記 4 date 2016 02 21 01 11 55 categories ios tags ios,筆記 一般此問題 都是由inte ce build與 中iboutlet的連線所引起的。可能是在 中對iboutlet的名稱進行了修改,導致inte ce build中的...

iOS開發筆記(4) 反射

反射的強大之處在於,我們可以將物件與依賴物件之間完全解耦,建立物件可以不引用標頭檔案,操作屬性 方法可以不依賴於物件,操作物件可以不依賴於型別,操作型別可以不依賴於引用等等等等。最直觀的效果是,即使不引用標頭檔案亦可操作型別 物件及對應屬性與方法。借助強大的runtime特性,在ios平台上我們也得...