单片机
返回首页

HAL库直流电机编码测速(L298N驱动)笔记

2025-09-09 来源:cnblogs

主函数开始后的处理流程:


1.外设初始化:HAL_Init()


2.系统时钟配置

  • RCC振荡器初始化:HAL_RCC_OsConfig()

  • RCC时钟初始化:HAL_RCC_ClockConfig()

  • 系统滴答定时器初始化:HAL_SYSTICK_Config()


3.按键GPIO初始化

  • GPIO端口时钟使能:__HAL_RCC_GPIOA_CLK_ENABLE()

  • 工作模式

  • 激活下拉或上拉

  • 引脚初始化:HAL_GPIO_Init()

 

4.串口初始化

  • 串口GPIO端口使能:__HAL_RCC_GPIOA_CLK_ENABLE()

  • 串口初始化(包含串口硬件初始化):HAL_UART_Init()

 

5.编码器定时器初始化

  • 定时器时钟使能:__HAL_RCC_TIM3_CLK_ENABLE()

  • 编码器GPIO引脚初始化

    • GPIO端口时钟使能:__HAL_RCC_GPIOB_CLK_ENABLE()

    • 工作模式

    • 激活下拉或上拉

    • 引脚初始化:HAL_GPIO_Init()

  • 编码器中断优先级配置

    • 设置中断优先级:HAL_NVIC_SetPriority()

    • 使能中断请求:HAL_NVIC_EnableIRQ()

  • 定时器基本环境初始化:HAL_TIM_Base_Init()

  • 定时器时钟源配置:HAL_TIM_ConfigClockSource()

  • 定时器输入捕获环境初始化:HAL_TIM_IC_Init()

  • 定时器主输出模式同步:HAL_TIMEx_MasterConfigSynchronization()

  • 定时器输入捕获配置:HAL_TIM_IC_ConfigChannel()

 

6.编码器定时器启动:HAL_TIM_Base_Start()

 

7.L298N定时器初始化

  • 基本环境初始化:HAL_TIM_Base_Init()

  • 时钟源配置:HAL_TIM_ConfigClockSource()

  • 比较输出初始化(包含mcu硬件初始化):HAL_TIM_PWM_Init()

    • 初始化:HAL_TIM_Base_MspInit()

    • 反初始化:HAL_TIM_Base_MspDeInit()

  • 主输出模式同步:HAL_TIMEx_MasterConfigSynchronization()

  • 刹车和死区时间配置:HAL_TIMEx_ConfigBreakDeadTime()

  • 通道比较输出配置:HAL_TIM_PWM_ConfigChannel()

    • 定时器实际时钟频率为:72MHz/(定时器预分频+1)=36MHz

    • PWM频率为:定时器实际时钟频率/(定时器周期+1),[定时器周期为900的话,36MHz/(900+1)=40Khz]

    • 实际PWM频率为:PWM频率/(高级定时器重复计数寄存器值+1),[高级定时器重复计数寄存器值为0的话,40KHz/0+1=40KHz]

    • PWM占空比为:定时器通道比较输出脉冲/定时器周期*100%,占空比为50%时电机不转。[定时器通道比较输出脉冲为450,定时器周期为900的话,则占空比为50%,电机不转]

  • GPIO引脚初始化

    • a.GPIO端口时钟使能:__HAL_RCC_GPIOA_CLK_ENABLE()

    • b.设置IO引脚:Pin

    • c.设置工作模式:Mode

    • d.设置速度:Speed

    • e.完成初始化:HAL_GPIO_Init()

 

8.编码器定时器中断捕获启动:HAL_TIM_IC_Start_IT()

 

9.L298N定时器通道和互补通道PWM输出(可控制电机正反转)

  • HAL_TIM_PWM_Start() 、

  • HAL_TIMEx_PWMN_Start()

 

10.循环:while(1){}

 

备注:

系统滴答定时器中断回调函数(每发生一次滴答定时器中断进入该回调函数一次):HAL_SYSTICK_Callback()

定时器输入捕获中断回调函数:HAL_TIM_IC_CaptureCallback()

重定向C库函数printf:int fputc(int ch, FILE *f){}

重定向C库函数getchar、scanf:int fgetc(FILE * f){}


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 设计汽车集群电源

  • 6晶体管H桥

  • 温度控制风扇

  • USB LED调光器

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

    相关电子头条文章