找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3672|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32直流無(wú)刷電機(jī)開(kāi)環(huán)控制代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:602087 發(fā)表于 2020-4-5 17:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
用霍爾傳感器的直流無(wú)刷電機(jī)開(kāi)環(huán)控制代碼,上傳分享,賺一點(diǎn)黑幣,驅(qū)動(dòng)板是STM32F407ZET6

轉(zhuǎn)自硬石的單片機(jī)源程序如下:
  1. /* 包含頭文件 ----------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32f4xx_hal.h"
  4. #include "bldc/bsp_bldc.h"
  5. #include "key/bsp_key.h"
  6. #include "led/bsp_led.h"
  7. /* 私有類(lèi)型定義 --------------------------------------------------------------*/
  8. /* 私有宏定義 ----------------------------------------------------------------*/
  9. /* 私有變量 ------------------------------------------------------------------*/
  10. uint32_t IS_EnableMotor = 0;  // 使能電機(jī)標(biāo)志
  11. /* 擴(kuò)展變量 ------------------------------------------------------------------*/
  12. /* 私有函數(shù)原形 --------------------------------------------------------------*/
  13. /* 函數(shù)體 --------------------------------------------------------------------*/
  14. /**
  15.   * 函數(shù)功能: 系統(tǒng)時(shí)鐘配置
  16.   * 輸入?yún)?shù): 無(wú)
  17.   * 返 回 值: 無(wú)
  18.   * 說(shuō)    明: 無(wú)
  19.   */
  20. void SystemClock_Config(void)
  21. {

  22.   RCC_OscInitTypeDef RCC_OscInitStruct;
  23.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  24.   __HAL_RCC_PWR_CLK_ENABLE();                                     // 使能PWR時(shí)鐘

  25.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);  // 設(shè)置調(diào)壓器輸出電壓級(jí)別1

  26.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;      // 外部晶振,8MHz
  27.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;                        // 打開(kāi)HSE
  28.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;                    // 打開(kāi)PLL
  29.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;            // PLL時(shí)鐘源選擇HSE
  30.   RCC_OscInitStruct.PLL.PLLM = 8;                                 // 8分頻MHz
  31.   RCC_OscInitStruct.PLL.PLLN = 336;                               // 336倍頻
  32.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;                     // 2分頻,得到168MHz主時(shí)鐘
  33.   RCC_OscInitStruct.PLL.PLLQ = 7;                                 // USB/SDIO/隨機(jī)數(shù)產(chǎn)生器等的主PLL分頻系數(shù)
  34.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  35.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  36.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  37.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系統(tǒng)時(shí)鐘:168MHz
  38.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB時(shí)鐘: 168MHz
  39.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;               // APB1時(shí)鐘:42MHz
  40.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;               // APB2時(shí)鐘:84MHz
  41.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

  42.   HAL_RCC_EnableCSS();                                            // 使能CSS功能,優(yōu)先使用外部晶振,內(nèi)部時(shí)鐘源為備用
  43.   
  44.          // HAL_RCC_GetHCLKFreq()/1000    1ms中斷一次
  45.         // HAL_RCC_GetHCLKFreq()/100000         10us中斷一次
  46.         // HAL_RCC_GetHCLKFreq()/1000000 1us中斷一次
  47.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);                 // 配置并啟動(dòng)系統(tǒng)滴答定時(shí)器
  48.   /* 系統(tǒng)滴答定時(shí)器時(shí)鐘源 */
  49.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  50.   /* 系統(tǒng)滴答定時(shí)器中斷優(yōu)先級(jí)配置 */
  51.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  52. }

  53. /**
  54.   * 函數(shù)功能: 主函數(shù).
  55.   * 輸入?yún)?shù): 無(wú)
  56.   * 返 回 值: 無(wú)
  57.   * 說(shuō)    明: 無(wú)
  58.   */
  59. int main(void)
  60. {
  61.   /* 復(fù)位所有外設(shè),初始化Flash接口和系統(tǒng)滴答定時(shí)器 */
  62.   HAL_Init();
  63.   /* 配置系統(tǒng)時(shí)鐘 */
  64.   SystemClock_Config();
  65.   /* 初始化按鍵配置 */
  66.   KEY_GPIO_Init();
  67.   /* 初始化指示燈 */
  68.   LED_GPIO_Init();
  69.   /* 初始化霍爾傳感器接口 */
  70.   HALL_TIMx_Init();
  71.   /* 初始化定時(shí)器各通道輸出 */
  72.   BLDCMOTOR_TIMx_Init();
  73.   /* 啟動(dòng)定時(shí)器 */
  74.   HAL_TIM_Base_Start(&htimx_BLDC);  
  75.   while (1)
  76.   {
  77.     /* 使能電機(jī) */
  78.     if(KEY1_StateRead() == KEY_DOWN)
  79.     {
  80.       Enable_BLDC();
  81.       IS_EnableMotor = 1;  
  82.       LED3_OFF;
  83.     }
  84.     /* 電機(jī)換向 */
  85.     if(KEY2_StateRead() == KEY_DOWN)
  86.     {
  87.       Dir = -Dir;
  88.     }
  89.     /* 電機(jī)停止 */
  90.     if(KEY3_StateRead() == KEY_DOWN)
  91.     {
  92.       Disable_BLDC();
  93.       IS_EnableMotor = 0;      
  94.     }
  95.   }
  96. }

  97. /**
  98.   * 函數(shù)功能: 系統(tǒng)滴答定時(shí)器中斷回調(diào)函數(shù)
  99.   * 輸入?yún)?shù): 無(wú)
  100.   * 返 回 值: 無(wú)
  101.   * 說(shuō)    明: 每發(fā)生一次滴答定時(shí)器中斷進(jìn)入該回調(diào)函數(shù)一次
  102.   */
  103. void HAL_SYSTICK_Callback()
  104. {
  105.   if(IS_EnableMotor)
  106.   {
  107.     Lock_Time++;
  108.     /* 超過(guò)100ms 則認(rèn)為是堵轉(zhuǎn),停止PWM輸出 */
  109.     if(Lock_Time >= 100)  //100ms
  110.     {
  111.       Disable_BLDC();
  112.       LED3_TOGGLE;
  113.       Lock_Time = 0;
  114.     }
  115.   }
  116. }
  117. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開(kāi)發(fā)團(tuán)隊(duì) *****END OF FILE****/
復(fù)制代碼

所有資料51hei提供下載:
YSF4_HAL_MOTOR-503. 霍爾傳感器接口(開(kāi)環(huán)控制).7z (3.63 MB, 下載次數(shù): 96)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:445750 發(fā)表于 2021-10-14 10:25 | 只看該作者
STM32F407ZET6  芯片貴,不易用開(kāi)推廣
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表