1 KF8S1101面向BLDC控制的特性
u ChipON自主的KungFu內(nèi)核——高效的處理器平臺(tái)
? 典型的RISC架構(gòu),程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開
? 具有8個(gè)8位寄存器組成的寄存器組堆
? SFR無需分組,簡化程序設(shè)計(jì)和代碼密度
? 16bit指令代碼,多數(shù)指令在一個(gè)周期內(nèi)完成
? 工作頻率*高20MHZ
u 面向BLDC控制的豐富的外設(shè)
? 帶死區(qū)控制的增強(qiáng)型PWM,每個(gè)通道極性可獨(dú)立設(shè)置
? 緊急故障輸入端口,內(nèi)部自帶比較器,自動(dòng)關(guān)斷PWM輸出
? 可觸發(fā)ADC事件,PWM中間點(diǎn)采樣電流
? 內(nèi)部集成無霍爾信號(hào)檢測陣列,降低外圍器件成本
2 軟件庫特點(diǎn)
u 簡單易用,提供完整的樣例程序
u 支持有霍爾模式/無霍爾模式
u 平穩(wěn)的無霍爾啟動(dòng)算法
u PI恒流控制
u 詳盡完善的方案保護(hù)功能
u 改進(jìn)的控制算法,電機(jī)適應(yīng)性廣
u 針對(duì)不同電機(jī)參數(shù),只需在頭文件中更改宏定義參數(shù)
u 提供硬件參考電路,結(jié)合樣例程序,用戶針對(duì)具體應(yīng)用開發(fā)周期短
3 開發(fā)套件的使用
提供完整的開發(fā)環(huán)境(IDE)、ANSI C99標(biāo)準(zhǔn)的C編譯器、仿真器、編程器和DEMO 評(píng)估板,詳盡的用戶手冊(cè)和免費(fèi)的軟件源程序代碼。用戶無需設(shè)計(jì)硬件即可進(jìn)行馬達(dá)驅(qū)動(dòng)性能的評(píng)估,方便用戶針對(duì)具體應(yīng)用添加和刪減代碼,開發(fā)出符合需求、高性價(jià)比的產(chǎn)品。
下圖為基于KF8S1101芯片設(shè)計(jì)的工作電壓DC24V的DEMO板。
圖1 KF8S1101 BLDC DEMO板
3.1 BLDC控制板主要接口說明
1.電機(jī)相線接口,從上到下依次為電機(jī)相線U、V、W。
2.控制板工作電源,左邊為正,右邊為負(fù)。Rated Voltage 額定電壓: 24V (DC),Voltage Range 使用電壓范圍: 9-26V(DC)。
3.電機(jī)霍爾信號(hào)接口,從左到右依次霍爾電源、霍爾信號(hào)U相、霍爾信號(hào)V相、霍爾信號(hào)W相、霍爾地。
4.電機(jī)正反轉(zhuǎn)控制信號(hào),跳線帽接上電機(jī)逆時(shí)針運(yùn)行,跳線帽去除電機(jī)順時(shí)針運(yùn)行。
5.MCU程序下載接口。
6.電機(jī)啟??刂瓢存I,按一次開啟,再按一次關(guān)閉。
7.電機(jī)轉(zhuǎn)速調(diào)整旋鈕。
8.電機(jī)運(yùn)行狀態(tài)指示燈。
3.2 開發(fā)軟件的安裝
使用ChipOn的ChipON IDE v1.1.0版本的開發(fā)環(huán)境和ANSI C99標(biāo)準(zhǔn)的C編譯器,按照向?qū)б哉0惭b順序?qū)④浖惭b到電腦上。
3.3 建立KungFu8項(xiàng)目
運(yùn)行ChipON IDE v1.1.0,選擇工作空間地址。
新建一個(gè)項(xiàng)目。注意項(xiàng)目類型需要選擇KF8-C。進(jìn)入下一步,選擇芯片型號(hào)KF8S1101,再點(diǎn)擊下一步就建好了項(xiàng)目。
3.4 添加源文件
把提供的源程序文件(包括.c文件和.h文件)復(fù)制到新建項(xiàng)目下。鼠標(biāo)放到項(xiàng)目名上點(diǎn)右鍵,選擇粘貼,覆蓋掉原來的“main.c”文件。
選擇構(gòu)建項(xiàng)目。
將庫文件“CommutationRun.o”、“BEMF.o”粘貼到項(xiàng)目里的“Release”。
鼠標(biāo)指向項(xiàng)目名稱單擊右鍵選擇“屬性”,選擇“C/C++ 構(gòu)建”下的設(shè)置,修改 C 鏈接器 命令參數(shù),加入“CommutationRun.o”和“BEMF.o”。
這時(shí)再選擇構(gòu)建項(xiàng)目,即可成功的生成HEX文件。
3.5 樣例程序清單
? 源程序C文件
? 源程序頭文件
3.6 庫文件
庫文件包含下面兩個(gè)文件
庫文件對(duì)應(yīng)的兩個(gè)頭文件為“CommutationRun.h”和“BEMF.h”,主要聲明了庫文件中包含的兩個(gè)函數(shù),為
voidBEMFFuction(void); //感生電動(dòng)勢(shì)過零點(diǎn)檢測處理函數(shù)
voidCommutationInSpect(void); //換相檢測處理函數(shù)
庫函數(shù)中變量聲明全部以“CHIPON_”開頭,程序中用的函數(shù)名不要以其開頭命名,以免出現(xiàn)重復(fù)。
庫函數(shù)中用到的公有變量有:
unsignedchar fGlobe_SynchronizingRectify;//同步續(xù)流狀態(tài)標(biāo)志
unsignedchar SensorlessFirstCommutation;//無傳感器模式初始換向狀態(tài)標(biāo)志
unsignedchar FrontTimesAfterZeroStart; //靜態(tài)啟動(dòng)換向次數(shù)計(jì)數(shù)器
unsignedchar CntForPWMTwo; //PWM 2 占空比
unsignedchar fGlobe_SensorlessStatus; //有無傳感器模式標(biāo)志
unsignedchar Fwd_RevFlag; //正反轉(zhuǎn)標(biāo)志
unsignedchar fGlobe_MotorBrockStart; //開始堵轉(zhuǎn)標(biāo)志
unsignedchar fGlobe_MotorBrock; //堵轉(zhuǎn)標(biāo)志
unsignedchar fGlobe_Run; //系統(tǒng)運(yùn)行標(biāo)志
unsignedchar U8Globe_PwmShadow; //PWM占空比
庫函數(shù)中用到的宏定義為:
#defineHALL_PORT P2 //霍爾信號(hào)狀態(tài)寄存器
#define HALL_STATE_012 0x07 //hall 有效位(低三位)
4 基于KF8S1101開放套件實(shí)現(xiàn)實(shí)際項(xiàng)目的開發(fā)
針對(duì)實(shí)際項(xiàng)目開發(fā)時(shí),程序只需做少量的修改即可實(shí)現(xiàn)功能。
4.1 有霍爾模式、無霍爾模式選擇
樣例程序中在子函數(shù)“void InitSystem(void)”里通過檢測按鍵是否長按來選擇有霍爾模式或者無霍爾模式,實(shí)際應(yīng)用中只需把變量直接賦給所需的值即可實(shí)現(xiàn)模式選擇。目前庫文件中有霍爾模式只適合霍爾電角度為120°的電機(jī),如果是60°電角度的話需要和我們聯(lián)系,重新提供霍爾角度為60°電角度的庫文件。
fGlobe_SensorlessStatus= 1; //無霍爾模式fGlobe_SensorlessStatus= 0; //有霍爾模式
4.2 電機(jī)正反轉(zhuǎn)模式選擇
樣例程序中在子函數(shù)“void FWDREV_Function(void)”里通過檢測“FWD_REV”IO口是高電平還是低判斷來調(diào)節(jié)電機(jī)轉(zhuǎn)向,實(shí)現(xiàn)順時(shí)針或者逆時(shí)針旋轉(zhuǎn)。實(shí)際應(yīng)用中只需把變量直接賦給所需的值即可實(shí)現(xiàn)電機(jī)旋轉(zhuǎn)方向的選擇。
SYFwd_Rev =0; //電機(jī)正向選擇
SYFwd_Rev =1; //電機(jī)反向選擇
4.3 不同類型電機(jī)參數(shù)修改
實(shí)際應(yīng)用中會(huì)涉及到不同參數(shù)的BLDC電機(jī),只需根據(jù)電機(jī)參數(shù)修改“system.h”里的宏定義即可。
/*電流參數(shù)*/
#define SENSOR_RES 0.05 //電流傳感器阻值 ohm
#define CURRENT_AMP 6.5 //電流放大器放大倍數(shù)
#define LIMITCURERNT_REALY 1.5 // 均值電流限制值A
#define BLOCKING _CURRENT_START_A 0.885 // 堵轉(zhuǎn)判斷電流值A
#define RECTIFY_CURRENT_START_A 0.45 // 同步整流開始值A
#define PEAK_CURRENT_LIM_A 4 // 峰值電流限制值A
/*電機(jī)堵轉(zhuǎn)時(shí)間,20ms周期*/
#define BROCKTIME 70 //堵轉(zhuǎn)計(jì)數(shù)器 70*20ms = 1.4s