靈動微電子 MM32SPIN360C 電機(jī)開發(fā)板驅(qū)動有感 BLDC 的操作方法
一、MM32SPIN360C 電機(jī)開發(fā)板介紹1.簡介
如圖(1),MM32SPIN360C 電機(jī)開發(fā)板以 Mindmotion 的專用 MCU —— MM32SPIN360C 為主控制器,具備霍爾傳感器檢測和反電動勢檢測功能。適用于低壓場合,可廣泛用于工業(yè)或者民用領(lǐng)域的三相無刷永磁電機(jī)驅(qū)動器,如電動工具等。
主控制器 MM32SPIN360C 是 ARM Cortex-M0 的 32 位微控制器,內(nèi)置 5V 輸出的 LDO 穩(wěn)壓器(Input : 7~13.5V),內(nèi)置 3 組具有自舉二極管的 N 溝道半橋柵極驅(qū)動器(7~48V、1A Sink、1A Source),以及 3 個比較器和 3 個運(yùn)算放大器等等。MM32SPIN360C 的具體參數(shù)和用法請參考靈動微的官網(wǎng)(https://www.mindmotion.com.cn/)上的數(shù)據(jù)手冊和用戶手冊。
圖(1)
2.電路板圖解
如圖(2)為電路板正面的圖解,開發(fā)板帶有 10KΩ 可調(diào)電阻器,可用于調(diào)節(jié)電機(jī)的轉(zhuǎn)速。帶有 UART/LIN 通訊接口,以及兩種形式的 JTAG/SWD 接口。電源輸入電壓為 12~36V,可以有兩種接入方式(DC-JACK 或者 接線端子)。
圖(2)
3.原理圖介紹
圖(3)是電機(jī)驅(qū)動部分的原理圖。由于 MM32SPIN360C 這顆 MCU 內(nèi)自帶預(yù)驅(qū),所以可以直接驅(qū)動 MOS 管(PXN012-60QL),簡化了電機(jī)驅(qū)動電路。
圖(3)
圖(4)是反饋電路,可以通過 JP4~JP8,JP10~JP12 選擇霍爾傳感器方式反饋或者是反電動勢方式反饋。如果選擇霍爾傳感器方式,則只需要將 JP6、JP7、JP8 的 1-2 腳短接。
圖(4)
二、 驅(qū)動軟件簡介
1.啟動電機(jī)此驅(qū)動軟件首先通過 12-bit ADC 采集可調(diào)電阻器的電阻值,確定電機(jī)的轉(zhuǎn)速。當(dāng)電機(jī)速度的 PWM 波形占空比大于 5% 才開始啟動電機(jī)。電機(jī)啟動之前通過讀取 U/V/W 的 3 個霍爾傳感器的值確定電機(jī)轉(zhuǎn)子位置,進(jìn)而根據(jù)轉(zhuǎn)子位置來確定 U/V/W 的上電順序。
//RM 旋鈕啟動與調(diào)速
do {
hwAdcValue = GetAdcAverage(5); // 采集可調(diào)變阻器的電壓值
if (0xffff == hwAdcValue) {
break;
} else {
g_tMotor.tDuty = hwAdcValue * 100 / 4095; // 設(shè)置 PWM 占空比
SET_DUTY_U(g_tMotor.tDuty);
SET_DUTY_V(g_tMotor.tDuty);
SET_DUTY_W(g_tMotor.tDuty);
if ((g_tMotor.tDuty > 5) && (g_tMotor.tMotorState == STOP)) {
g_tMotor.tMotorState = START; // 如果電機(jī)速度的波形占空比大于 5%,則啟動電機(jī)
}
}
} while(0);
2.霍爾傳感器信號的采集
軟件中包含 3 種霍爾傳感器信號采集方式:主循環(huán)、EXTI、Timer 。
主循環(huán) 方式是在主函數(shù)的 while(1) 循環(huán)里讀取 U/V/W 這 3 個霍爾傳感器對應(yīng)的 MCU 管腳(PA0/PA1/PA2)上的電平, 進(jìn)而驅(qū)動換相。
EXTI 方式是設(shè)置 U/V/W 這 3 個霍爾傳感器對應(yīng)的 MCU 管腳(PA0/PA1/PA2)為外部中斷,雙邊沿觸發(fā)。當(dāng)任一 HALL 線上電平發(fā)生變化時,都會有對應(yīng)中斷線產(chǎn)生中斷,在 EXTI 中斷服務(wù)函數(shù)中進(jìn)行 HALL 引腳電平檢測,進(jìn)而驅(qū)動換相。
Timer 方式是設(shè)置 U/V/W 這 3 個霍爾傳感器對應(yīng)的 MCU 管腳(PA0/PA1/PA2)為定時器輸入腳 ( CC1、CC2、CC3)。使用這 3 個定時器輸入腳通過一個異或門連接到 TI1 輸入通道;當(dāng)捕獲到 CC1、CC2、CC3 上有引腳發(fā)生電平變化時,由于異或門的存在, TI1 上產(chǎn)生一個跳變沿;經(jīng)過輸入濾波器和邊沿檢測器后傳輸給 TI1F_ED ,由于配置了 TIM 的觸發(fā)源為 TI1F_ED 和使能了觸發(fā)中斷,這里會進(jìn)入觸發(fā)中斷,在觸發(fā)中斷中我們可以判斷霍爾狀態(tài)的有效值,根據(jù)霍爾狀態(tài)的有效值控制電機(jī)對應(yīng)的繞組供電,進(jìn)而驅(qū)動電機(jī)旋轉(zhuǎn)。
這 3 種方式可以通過 hall.h 中的如下定義來選擇:
#define HALL_POLLING_MODE 0 // 1:采用 主循環(huán) 方式采集霍爾信號
#define HALL_TIM_MODE 1 // 1:采用 Timer 方式采集霍爾信號
#define HALL_EXTI_MODE 0 // 1:采用 EXTI 方式采集霍爾信號
電機(jī)堵轉(zhuǎn)檢測
驅(qū)動軟件中開啟了系統(tǒng)節(jié)拍定時器(systick),每 1 毫秒中斷一次。此定時器用于檢測電機(jī)運(yùn)轉(zhuǎn)時堵轉(zhuǎn) 2 秒之后,停止電機(jī)運(yùn)行。
void Systick_Callback(void)
{
if(RUN == g_tMotor.tMotorState) {
g_tMotor.tCount.hwTimeCount ++;
if(g_tMotor.tCount.hwTimeCount > 2000) { // 2s超時,電機(jī)卡住不運(yùn)轉(zhuǎn)超過2s時間
GATE_DRIVER_DISABLE();
BLDC_UVW_DISABLE();
g_tMotor.tMotorState = STOP;
g_tMotor.tMotorErr = LOCKED_ERR;
g_tMotor.tCount.hwTimeCount = 0;
}
}
}
三、調(diào)試開發(fā)板
1.接線方法
開發(fā)板、BLDC 電機(jī)、調(diào)試器的接線圖如圖(8)所示。
圖(8)
2.調(diào)試器的設(shè)置
開發(fā)板采用 SWD 接口調(diào)試。調(diào)試器可以采用靈動微官方的調(diào)試下載器,也可以采用適用于 ARM Cortex-M 核的調(diào)試器,比如圖(8)用的就是 WPI 自制的調(diào)試器。
如果使用靈動微官方的調(diào)試器,則需要從靈動微官網(wǎng)上下載調(diào)試器的驅(qū)動(https://www.mindmotion.com.cn/support/development_tools/debug_and_programming_tools/)。并在 keil 的調(diào)試設(shè)置中,選擇 MM32-LINK Debugger ,如圖(9)所示。
圖(9)
我這里使用的是 WPI 自制的調(diào)試器,這種調(diào)試器免驅(qū),在 keil 的調(diào)試設(shè)置中,選擇 CMSIS-DAP Debugger ,如圖(10)所示。
圖(10)
3.開發(fā)板上的設(shè)置
開發(fā)板上的跳線設(shè)置如圖(11)所示,紅色標(biāo)記的地方需要接跳線帽,其他位置可以忽略。
圖(11)
4.代碼下載 & 運(yùn)行
將代碼下載到開發(fā)板上之后,旋轉(zhuǎn)可調(diào)電阻器的旋鈕,電機(jī)啟動?烧{(diào)變阻器的阻值越大,電機(jī)的轉(zhuǎn)速越高。
四、總結(jié)
MM32SPIN360C 電機(jī)開發(fā)板上的主控制器(MM32SPIN360C)內(nèi)置預(yù)驅(qū),所以 MCU 只需要外接 6 個 MOS 管就可以驅(qū)動 BLDC 電機(jī),整個驅(qū)動電路比較簡單。
本文檔介紹了如何使用 MM32SPIN360C 電機(jī)應(yīng)用開發(fā)板驅(qū)動低壓有感BLDC 電機(jī)的方法。由于有霍爾傳感器反饋電機(jī)轉(zhuǎn)子的位置,所以在電機(jī)啟動和運(yùn)行的過程比較平穩(wěn),而且不需要算法,驅(qū)動代碼比較簡單。
此外,此開發(fā)板也可以驅(qū)動有感/無感正弦波電機(jī),這個驅(qū)動的方法將在后面的博文中介紹,敬請期待。如需要了解更多靈動微MCU產(chǎn)品,請聯(lián)系靈動微核心代理商-穎特新科技
編輯:ls 最后修改時間:2022-06-13