标题:
STM32直流无刷电机开环控制代码
[打印本页]
作者:
melanmoon5
时间:
2020-4-5 17:20
标题:
STM32直流无刷电机开环控制代码
用霍尔传感器的直流无刷电机开环控制代码,上传分享,赚一点黑币,驱动板是STM32F407ZET6
转自硬石的单片机源程序如下:
/* 包含头文件 ----------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
#include "bldc/bsp_bldc.h"
#include "key/bsp_key.h"
#include "led/bsp_led.h"
/* 私有类型定义 --------------------------------------------------------------*/
/* 私有宏定义 ----------------------------------------------------------------*/
/* 私有变量 ------------------------------------------------------------------*/
uint32_t IS_EnableMotor = 0; // 使能电机标志
/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
/* 函数体 --------------------------------------------------------------------*/
/**
* 函数功能: 系统时钟配置
* 输入参数: 无
* 返 回 值: 无
* 说 明: 无
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__HAL_RCC_PWR_CLK_ENABLE(); // 使能PWR时钟
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); // 设置调压器输出电压级别1
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 外部晶振,8MHz
RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 打开HSE
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; // 打开PLL
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // PLL时钟源选择HSE
RCC_OscInitStruct.PLL.PLLM = 8; // 8分频MHz
RCC_OscInitStruct.PLL.PLLN = 336; // 336倍频
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // 2分频,得到168MHz主时钟
RCC_OscInitStruct.PLL.PLLQ = 7; // USB/SDIO/随机数产生器等的主PLL分频系数
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟:168MHz
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB时钟: 168MHz
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; // APB1时钟:42MHz
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; // APB2时钟:84MHz
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_RCC_EnableCSS(); // 使能CSS功能,优先使用外部晶振,内部时钟源为备用
// HAL_RCC_GetHCLKFreq()/1000 1ms中断一次
// HAL_RCC_GetHCLKFreq()/100000 10us中断一次
// HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); // 配置并启动系统滴答定时器
/* 系统滴答定时器时钟源 */
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* 系统滴答定时器中断优先级配置 */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/**
* 函数功能: 主函数.
* 输入参数: 无
* 返 回 值: 无
* 说 明: 无
*/
int main(void)
{
/* 复位所有外设,初始化Flash接口和系统滴答定时器 */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
/* 初始化按键配置 */
KEY_GPIO_Init();
/* 初始化指示灯 */
LED_GPIO_Init();
/* 初始化霍尔传感器接口 */
HALL_TIMx_Init();
/* 初始化定时器各通道输出 */
BLDCMOTOR_TIMx_Init();
/* 启动定时器 */
HAL_TIM_Base_Start(&htimx_BLDC);
while (1)
{
/* 使能电机 */
if(KEY1_StateRead() == KEY_DOWN)
{
Enable_BLDC();
IS_EnableMotor = 1;
LED3_OFF;
}
/* 电机换向 */
if(KEY2_StateRead() == KEY_DOWN)
{
Dir = -Dir;
}
/* 电机停止 */
if(KEY3_StateRead() == KEY_DOWN)
{
Disable_BLDC();
IS_EnableMotor = 0;
}
}
}
/**
* 函数功能: 系统滴答定时器中断回调函数
* 输入参数: 无
* 返 回 值: 无
* 说 明: 每发生一次滴答定时器中断进入该回调函数一次
*/
void HAL_SYSTICK_Callback()
{
if(IS_EnableMotor)
{
Lock_Time++;
/* 超过100ms 则认为是堵转,停止PWM输出 */
if(Lock_Time >= 100) //100ms
{
Disable_BLDC();
LED3_TOGGLE;
Lock_Time = 0;
}
}
}
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码
所有资料51hei提供下载:
YSF4_HAL_MOTOR-503. 霍尔传感器接口(开环控制).7z
(3.63 MB, 下载次数: 96)
2020-4-5 22:27 上传
点击文件名下载附件
直流无刷代码
下载积分: 黑币 -5
作者:
wqy589
时间:
2021-10-14 10:25
STM32F407ZET6 芯片贵,不易用开推广
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1