一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

采用六步換相法實現(xiàn)直流無刷電機的正反轉(zhuǎn)驅(qū)動

CHANBAEK ? 來源:旋轉(zhuǎn)的電機 ? 作者:小師兄1995 ? 2023-05-24 11:18 ? 次閱讀

前言

主控板STM32F302R8+驅(qū)動板X-NUCLEO-IHM07M1+直流無刷電機WR36BL61,采用六步換相法實現(xiàn)電機的正反轉(zhuǎn)驅(qū)動。

一、驅(qū)動板X-NUCLEO-IM07M1簡單介紹

X-NUCLEO-IHM07M1驅(qū)動板有一顆MOS管集成芯片L6230,該驅(qū)動芯片集成有3個橋臂6顆MOS管可驅(qū)動PMSM及BLCD電機,內(nèi)部結(jié)構(gòu)如下圖所示。

圖片

其典型應(yīng)用如下圖所示:

圖片

X-NUCLEO-IHM07M1驅(qū)動板的驅(qū)動電路如下圖所示,采用橋臂1、橋臂2以及橋臂3構(gòu)成的三相逆變電路驅(qū)動無刷直流電機,EN1、EN2以及EN3為為每相橋臂的使能控制輸入,IN1、IN2以及IN3為每相橋臂的開關(guān)控制輸入,OUT1、OUT2以及OUT3為輸出,外接無刷直流電機。

圖片

二、STM32F302R8+X-NUCLEO-IHM07M1驅(qū)動直流無刷電機

2.1.功能需求

采用六步換相法驅(qū)動無刷直流電機轉(zhuǎn)動,并實現(xiàn)直流無刷電機的換向控制。按下一次按鍵電機正轉(zhuǎn);再按一次按鍵電機停止;再按一次按鍵電機反轉(zhuǎn);再按一次按鍵電機停止,以此循環(huán)。

2.2.硬件設(shè)計

圖片

控制板:STM32F302R8

驅(qū)動板:X-NUCLEO-IHM07M1

直流無刷電機:WR36BL61,額定功率10W,額定電壓24V,額定電流0.5A,轉(zhuǎn)速2000RMP,極對數(shù)2。

圖片

2.3.軟件設(shè)計

本次軟件設(shè)計框架為:STM32CubeMX配置底層代碼;底層與應(yīng)用層的接口代碼在Keil環(huán)境下開發(fā);應(yīng)用層代碼在Matlab/Simulink中開發(fā)。

STM32CubeMX底層配置

為了更直觀簡單地實現(xiàn)直流無刷電機的六步換相控制,將所用引腳均設(shè)置為普通I/O口模式。

1、RCC設(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);
}


//無刷直流電機驅(qū)動
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ū)動
void LED_Driver(void)
{
  Set_LED1State(LED1_State);
  Set_LED2State(LED2_State);
}

應(yīng)用層開發(fā)

圖片

輸入處理:包括霍爾信號處理模塊和按鍵處理模塊。

圖片

圖片

圖片

電機運行模式:設(shè)計有電機停止、電機正轉(zhuǎn)、電機反轉(zhuǎn)三種模式,LED1用于指示程序運行“500ms亮,500ms滅”。

圖片

圖片

電機模式運行執(zhí)行模塊:

電機停止:關(guān)閉引腳驅(qū)動輸出

圖片

電機正轉(zhuǎn):內(nèi)部邏輯用Stateflow寫,根據(jù)霍爾狀態(tài)控制開關(guān)管進行六步換相控制

圖片

電機反轉(zhuǎn):內(nèi)部邏輯用Stateflow寫,根據(jù)霍爾狀態(tài)控制開關(guān)管進行六步換相控制

圖片

輸出處理:將需要的信號進行輸出

圖片

模型搭建完成仿真無誤后生成代碼,與底層代碼在Keil中集成。

圖片

應(yīng)用層與底層的代碼集成

將Matlab/Simulink模型生成的代碼文件夾復(fù)制到底層生成的工程下。

圖片

在工程中將Matlab/Simulink生成的代碼文件BLDC_SixStep目錄中的.c/.h文件都添加進工程。

圖片

注:此時編譯工程會報錯,缺少“solver_zc.h”頭文件,該頭文件在Matlab/Simulink/Include路徑下面,可以直接把該文件粘貼復(fù)制到Matlab/Simulink生成的代碼文件BLDC_SixStep目錄中,也可以將該文件的路徑進行添加。

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ù)一次,相當于在Matlab中運行模型一次, 根據(jù)BLDC_SixStep_step()函數(shù)的運算結(jié)果進行電機驅(qū)動。在Matlab/Simulink中設(shè)置模型1ms運行一次,所以在工程下也要確保BLDC_SixStep_step()函數(shù)1ms運行一次。

2.4下載驗證

電機正轉(zhuǎn):A相和B相上的電壓

圖片

電機反轉(zhuǎn):A相和B相上的電壓

圖片

總結(jié)

本章節(jié)基于STM32F302R8控制板和X-NUCLEO-IHM07M1驅(qū)動板,采用六步換相法實現(xiàn)了直流無刷電機的正反轉(zhuǎn)驅(qū)動,并且軟件編程的工具鏈采用STM32CubeMX+Matlab/Simulink+Keil,大部分代碼采用自動生成的方式簡化了編程的難度。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • MOS管
    +關(guān)注

    關(guān)注

    108

    文章

    2501

    瀏覽量

    69431
  • STM32
    +關(guān)注

    關(guān)注

    2283

    文章

    10986

    瀏覽量

    361299
  • 正反轉(zhuǎn)
    +關(guān)注

    關(guān)注

    2

    文章

    129

    瀏覽量

    18555
  • Simulink
    +關(guān)注

    關(guān)注

    22

    文章

    538

    瀏覽量

    63435
  • 直流無刷電機
    +關(guān)注

    關(guān)注

    15

    文章

    301

    瀏覽量

    24102
收藏 人收藏

    評論

    相關(guān)推薦

    六步pwm控制bldc電機,電機超過額定電壓控制的原因?

    六步pwm控制bldc電機,供電設(shè)置為額定電壓24v,設(shè)置為額定轉(zhuǎn)速為3000rpm,此時占空比100%。 如果以超過額定電壓的母線電
    發(fā)表于 07-24 07:11

    如何實現(xiàn)直流無刷電機中的

    ,無刷電機的三組線圈必須根據(jù)轉(zhuǎn)子的實際位置進行相互獨立的控制。這種驅(qū)動方式就充分說明的對無刷電機控制的復(fù)雜性。二、直流無刷電機是怎樣
    發(fā)表于 12-20 16:21

    無刷電機驅(qū)動調(diào)試問題

    采用STM32F103芯片、六步、方波驅(qū)動(頻率為16K)、PI控制調(diào)節(jié)。目前無刷電動輪椅控制器(驅(qū)
    發(fā)表于 04-17 10:08

    采用六步驅(qū)動無刷直流電機,最高速度只有電機額定速度的一半

    本帖最后由 博科生化 于 2020-10-23 15:07 編輯 采用六步驅(qū)動無刷
    發(fā)表于 10-22 11:44

    無刷電機六步換向兩兩導(dǎo)通和三三導(dǎo)通的區(qū)別在哪兒?

    兩兩導(dǎo)通的工作原理是什么?三三導(dǎo)通的工作原理是什么?無刷電機六步換向兩兩導(dǎo)通和三三導(dǎo)通的區(qū)別在哪兒?
    發(fā)表于 06-26 06:21

    怎樣去實現(xiàn)STM32與直流無刷電機正反轉(zhuǎn)?

    實現(xiàn)電機轉(zhuǎn)動的原理是什么?實現(xiàn)電機轉(zhuǎn)動的相位是什么?怎樣去實現(xiàn)STM32與直流
    發(fā)表于 06-26 07:01

    無刷直流電機六步的原理是什么?

    什么是安培定則?六步的原理是什么?
    發(fā)表于 07-20 06:42

    電子無刷電機

    ,控制器跟據(jù)三個霍爾傳感器輸出的種不同信號輸出相應(yīng)的控制信號驅(qū)動電子開關(guān)向馬達供電。這就是所謂六步
    發(fā)表于 09-07 07:12

    什么是六步

    ,控制器跟據(jù)三個霍爾傳感器輸出的種不同信號輸出相應(yīng)的控制信號驅(qū)動電子開關(guān)向馬達供電。這就是所謂六步
    發(fā)表于 09-07 06:45

    無刷無感直流電機方波驅(qū)動六步分析

    六步中的啟動包括哪幾個步驟?六步
    發(fā)表于 09-18 07:35

    詳解BLDC六步***

    BLDC***的方法是什么?BLDC六步的軟件架構(gòu)是怎樣組成的?
    發(fā)表于 11-19 06:57

    直流無刷電機如何控制正反轉(zhuǎn)

     直流電機具有響應(yīng)快速、較大的起動轉(zhuǎn)矩、從零轉(zhuǎn)速至額定轉(zhuǎn)速具備可提供額定轉(zhuǎn)矩的性能。我們知道直流無刷電機在許多場合不但要求電機具有良好的起動和調(diào)節(jié)特性,而且要求
    發(fā)表于 05-08 16:10 ?2.5w次閱讀
    <b class='flag-5'>直流</b><b class='flag-5'>無刷電機</b>如何控制<b class='flag-5'>正反轉(zhuǎn)</b>

    直流無刷電機FOC控制算法——理論

    稱之為精確控制,F(xiàn)OC和普通的六步控制有什么區(qū)別呢? 對于直流無刷電機的控制,采用
    發(fā)表于 03-08 11:07 ?7次下載
    <b class='flag-5'>直流</b><b class='flag-5'>無刷電機</b>FOC控制算法——理論

    無刷電機無感六步方波驅(qū)動原理及過零現(xiàn)象產(chǎn)生分析

    近期在琢磨關(guān)于無刷電機驅(qū)動,發(fā)現(xiàn)在談?wù)摕o感六步方波驅(qū)動時,都只是提及到會有這么一個過零現(xiàn)象,而沒有具體分析為什 么,根據(jù)本人有限的電磁學(xué)理論,反而把自己繞糊涂了,找了本關(guān)于
    發(fā)表于 03-21 14:20 ?3次下載
    <b class='flag-5'>無刷電機</b>無感<b class='flag-5'>六步</b>方波<b class='flag-5'>驅(qū)動</b>原理及過零現(xiàn)象產(chǎn)生分析

    無刷電機正反轉(zhuǎn)由什么控制

    無刷電機(Brushless DC Motor, BLDC)是一種沒有電刷的電機,它通過電子換向器來控制電流的流向,從而實現(xiàn)電機的轉(zhuǎn)動。無刷電機
    的頭像 發(fā)表于 09-03 14:14 ?1268次閱讀