找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3213|回复: 1
打印 上一主题 下一主题
收起左侧

STM32直流无刷电机开环控制代码

[复制链接]
跳转到指定楼层
楼主
ID:602087 发表于 2020-4-5 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用霍尔传感器的直流无刷电机开环控制代码,上传分享,赚一点黑币,驱动板是STM32F407ZET6

转自硬石的单片机源程序如下:
  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. /* 私有类型定义 --------------------------------------------------------------*/
  8. /* 私有宏定义 ----------------------------------------------------------------*/
  9. /* 私有变量 ------------------------------------------------------------------*/
  10. uint32_t IS_EnableMotor = 0;  // 使能电机标志
  11. /* 扩展变量 ------------------------------------------------------------------*/
  12. /* 私有函数原形 --------------------------------------------------------------*/
  13. /* 函数体 --------------------------------------------------------------------*/
  14. /**
  15.   * 函数功能: 系统时钟配置
  16.   * 输入参数: 无
  17.   * 返 回 值: 无
  18.   * 说    明: 无
  19.   */
  20. void SystemClock_Config(void)
  21. {

  22.   RCC_OscInitTypeDef RCC_OscInitStruct;
  23.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  24.   __HAL_RCC_PWR_CLK_ENABLE();                                     // 使能PWR时钟

  25.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);  // 设置调压器输出电压级别1

  26.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;      // 外部晶振,8MHz
  27.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;                        // 打开HSE
  28.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;                    // 打开PLL
  29.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;            // PLL时钟源选择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主时钟
  33.   RCC_OscInitStruct.PLL.PLLQ = 7;                                 // USB/SDIO/随机数产生器等的主PLL分频系数
  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;       // 系统时钟:168MHz
  38.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟: 168MHz
  39.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;               // APB1时钟:42MHz
  40.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;               // APB2时钟:84MHz
  41.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

  42.   HAL_RCC_EnableCSS();                                            // 使能CSS功能,优先使用外部晶振,内部时钟源为备用
  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);                 // 配置并启动系统滴答定时器
  48.   /* 系统滴答定时器时钟源 */
  49.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  50.   /* 系统滴答定时器中断优先级配置 */
  51.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  52. }

  53. /**
  54.   * 函数功能: 主函数.
  55.   * 输入参数: 无
  56.   * 返 回 值: 无
  57.   * 说    明: 无
  58.   */
  59. int main(void)
  60. {
  61.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  62.   HAL_Init();
  63.   /* 配置系统时钟 */
  64.   SystemClock_Config();
  65.   /* 初始化按键配置 */
  66.   KEY_GPIO_Init();
  67.   /* 初始化指示灯 */
  68.   LED_GPIO_Init();
  69.   /* 初始化霍尔传感器接口 */
  70.   HALL_TIMx_Init();
  71.   /* 初始化定时器各通道输出 */
  72.   BLDCMOTOR_TIMx_Init();
  73.   /* 启动定时器 */
  74.   HAL_TIM_Base_Start(&htimx_BLDC);  
  75.   while (1)
  76.   {
  77.     /* 使能电机 */
  78.     if(KEY1_StateRead() == KEY_DOWN)
  79.     {
  80.       Enable_BLDC();
  81.       IS_EnableMotor = 1;  
  82.       LED3_OFF;
  83.     }
  84.     /* 电机换向 */
  85.     if(KEY2_StateRead() == KEY_DOWN)
  86.     {
  87.       Dir = -Dir;
  88.     }
  89.     /* 电机停止 */
  90.     if(KEY3_StateRead() == KEY_DOWN)
  91.     {
  92.       Disable_BLDC();
  93.       IS_EnableMotor = 0;      
  94.     }
  95.   }
  96. }

  97. /**
  98.   * 函数功能: 系统滴答定时器中断回调函数
  99.   * 输入参数: 无
  100.   * 返 回 值: 无
  101.   * 说    明: 每发生一次滴答定时器中断进入该回调函数一次
  102.   */
  103. void HAL_SYSTICK_Callback()
  104. {
  105.   if(IS_EnableMotor)
  106.   {
  107.     Lock_Time++;
  108.     /* 超过100ms 则认为是堵转,停止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 硬石嵌入式开发团队 *****END OF FILE****/
复制代码

所有资料51hei提供下载:
YSF4_HAL_MOTOR-503. 霍尔传感器接口(开环控制).7z (3.63 MB, 下载次数: 96)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:445750 发表于 2021-10-14 10:25 | 只看该作者
STM32F407ZET6  芯片贵,不易用开推广
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表