前言
主控板STM32F302R8+驅(qū)動(dòng)板X-NUCLEO-IHM07M1+直流無刷電機(jī)WR36BL61,采用六步換相法實(shí)現(xiàn)電機(jī)的正反轉(zhuǎn)驅(qū)動(dòng)。
一、驅(qū)動(dòng)板X-NUCLEO-IM07M1簡(jiǎn)單介紹
X-NUCLEO-IHM07M1驅(qū)動(dòng)板有一顆MOS管集成芯片L6230,該驅(qū)動(dòng)芯片集成有3個(gè)橋臂6顆MOS管可驅(qū)動(dòng)PMSM及BLCD電機(jī),內(nèi)部結(jié)構(gòu)如下圖所示。
其典型應(yīng)用如下圖所示:
X-NUCLEO-IHM07M1驅(qū)動(dòng)板的驅(qū)動(dòng)電路如下圖所示,采用橋臂1、橋臂2以及橋臂3構(gòu)成的三相逆變電路驅(qū)動(dòng)無刷直流電機(jī),EN1、EN2以及EN3為為每相橋臂的使能控制輸入,IN1、IN2以及IN3為每相橋臂的開關(guān)控制輸入,OUT1、OUT2以及OUT3為輸出,外接無刷直流電機(jī)。
二、STM32F302R8+X-NUCLEO-IHM07M1驅(qū)動(dòng)直流無刷電機(jī)
2.1.功能需求
采用六步換相法驅(qū)動(dòng)無刷直流電機(jī)轉(zhuǎn)動(dòng),并實(shí)現(xiàn)直流無刷電機(jī)的換向控制。按下一次按鍵電機(jī)正轉(zhuǎn);再按一次按鍵電機(jī)停止;再按一次按鍵電機(jī)反轉(zhuǎn);再按一次按鍵電機(jī)停止,以此循環(huán)。
2.2.硬件設(shè)計(jì)
控制板:STM32F302R8
驅(qū)動(dòng)板:X-NUCLEO-IHM07M1
直流無刷電機(jī):WR36BL61,額定功率10W,額定電壓24V,額定電流0.5A,轉(zhuǎn)速2000RMP,極對(duì)數(shù)2。
2.3.軟件設(shè)計(jì)
本次軟件設(shè)計(jì)框架為:STM32CubeMX配置底層代碼;底層與應(yīng)用層的接口代碼在Keil環(huán)境下開發(fā);應(yīng)用層代碼在Matlab/Simulink中開發(fā)。
STM32CubeMX底層配置
為了更直觀簡(jiǎn)單地實(shí)現(xiàn)直流無刷電機(jī)的六步換相控制,將所用引腳均設(shè)置為普通I/O口模式。
1、RCC設(shè)置為外接時(shí)鐘,72MHz
2、PA8、PA9、PA10、PC10、PC11、PC12設(shè)置為推挽輸出、無上下拉電阻、高速,初始化狀態(tài)設(shè)為0; PA15、PB3、PB10設(shè)置為輸入,無上下拉電阻; PB13、PB2設(shè)置為推挽輸出,下拉電阻、高速,初始化狀態(tài)為0; PC13設(shè)置為輸入,無上下拉電阻。
3、IDE設(shè)置為MDK-RAM,在Keil環(huán)境中完成編譯下載
Keil應(yīng)用層與底層的接口開發(fā)
#include "Interface.h"
uint8_t EN1_State;
uint8_t EN2_State;
uint8_t EN3_State;
uint8_t IN1_State;
uint8_t IN2_State;
uint8_t IN3_State;
uint8_t LED1_State;
uint8_t LED2_State;
//獲取按鍵狀態(tài)
uint8_t Get_KeyState(void)
{
return HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin);
}
//獲取三路霍爾傳感器狀態(tài)
uint8_t Get_HallAState(void)
{
return HAL_GPIO_ReadPin(H1_GPIO_Port, H1_Pin);
}
uint8_t Get_HallBState(void)
{
return HAL_GPIO_ReadPin(GPIOB, H2_Pin);
}
uint8_t Get_HallCState(void)
{
return HAL_GPIO_ReadPin(GPIOB, H3_Pin);
}
//設(shè)置引腳狀態(tài)
void Set_EN1State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOC, EN1_Pin, (GPIO_PinState) PinState);
}
void Set_EN2State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOC, EN2_Pin, (GPIO_PinState) PinState);
}
void Set_EN3State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOC, EN3_Pin, (GPIO_PinState) PinState);
}
void Set_IN1State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOA, IN1_Pin, (GPIO_PinState) PinState);
}
void Set_IN2State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOA, IN2_Pin, (GPIO_PinState) PinState);
}
void Set_IN3State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOA, IN3_Pin, (GPIO_PinState) PinState);
}
void Set_LED1State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOB, LED1_Pin, (GPIO_PinState) PinState);
}
void Set_LED2State(uint8_t PinState)
{
HAL_GPIO_WritePin(GPIOB, LED2_Pin, (GPIO_PinState) PinState);
}
//無刷直流電機(jī)驅(qū)動(dòng)
void BLDC_SixStepDriver(void)
{
Set_EN1State(EN1_State);
Set_EN2State(EN2_State);
Set_EN3State(EN3_State);
Set_IN1State(IN1_State);
Set_IN2State(IN2_State);
Set_IN3State(IN3_State);
}
//LED驅(qū)動(dòng)
void LED_Driver(void)
{
Set_LED1State(LED1_State);
Set_LED2State(LED2_State);
}
應(yīng)用層開發(fā)
輸入處理:包括霍爾信號(hào)處理模塊和按鍵處理模塊。
電機(jī)運(yùn)行模式:設(shè)計(jì)有電機(jī)停止、電機(jī)正轉(zhuǎn)、電機(jī)反轉(zhuǎn)三種模式,LED1用于指示程序運(yùn)行“500ms亮,500ms滅”。
電機(jī)模式運(yùn)行執(zhí)行模塊:
電機(jī)停止:關(guān)閉引腳驅(qū)動(dòng)輸出
電機(jī)正轉(zhuǎn):內(nèi)部邏輯用Stateflow寫,根據(jù)霍爾狀態(tài)控制開關(guān)管進(jìn)行六步換相控制
電機(jī)反轉(zhuǎn):內(nèi)部邏輯用Stateflow寫,根據(jù)霍爾狀態(tài)控制開關(guān)管進(jìn)行六步換相控制
輸出處理:將需要的信號(hào)進(jìn)行輸出
模型搭建完成仿真無誤后生成代碼,與底層代碼在Keil中集成。
應(yīng)用層與底層的代碼集成
將Matlab/Simulink模型生成的代碼文件夾復(fù)制到底層生成的工程下。
在工程中將Matlab/Simulink生成的代碼文件BLDC_SixStep目錄中的.c/.h文件都添加進(jìn)工程。
注:此時(shí)編譯工程會(huì)報(bào)錯(cuò),缺少“solver_zc.h”頭文件,該頭文件在Matlab/Simulink/Include路徑下面,可以直接把該文件粘貼復(fù)制到Matlab/Simulink生成的代碼文件BLDC_SixStep目錄中,也可以將該文件的路徑進(jìn)行添加。
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
BLDC_SixStep_initialize();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
BLDC_SixStep_step();
BLDC_SixStepDriver();
LED_Driver();
HAL_Delay(1);
}
/* USER CODE END 3 */
}
在主函數(shù)中調(diào)用Matlab/Simulink生成代碼中的函數(shù),BLDC_SixStep_initialize()為模型初始化函數(shù);BLDC_SixStep_step()為模型函數(shù), 執(zhí)行該函數(shù)一次,相當(dāng)于在Matlab中運(yùn)行模型一次, 根據(jù)BLDC_SixStep_step()函數(shù)的運(yùn)算結(jié)果進(jìn)行電機(jī)驅(qū)動(dòng)。在Matlab/Simulink中設(shè)置模型1ms運(yùn)行一次,所以在工程下也要確保BLDC_SixStep_step()函數(shù)1ms運(yùn)行一次。
2.4下載驗(yàn)證
電機(jī)正轉(zhuǎn):A相和B相上的電壓
電機(jī)反轉(zhuǎn):A相和B相上的電壓
總結(jié)
本章節(jié)基于STM32F302R8控制板和X-NUCLEO-IHM07M1驅(qū)動(dòng)板,采用六步換相法實(shí)現(xiàn)了直流無刷電機(jī)的正反轉(zhuǎn)驅(qū)動(dòng),并且軟件編程的工具鏈采用STM32CubeMX+Matlab/Simulink+Keil,大部分代碼采用自動(dòng)生成的方式簡(jiǎn)化了編程的難度。
-
MOS管
+關(guān)注
關(guān)注
108文章
2315瀏覽量
65696 -
STM32
+關(guān)注
關(guān)注
2258文章
10828瀏覽量
352497 -
正反轉(zhuǎn)
+關(guān)注
關(guān)注
2文章
128瀏覽量
18251 -
Simulink
+關(guān)注
關(guān)注
22文章
517瀏覽量
62056 -
直流無刷電機(jī)
+關(guān)注
關(guān)注
15文章
285瀏覽量
23720
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論