zoukankan      html  css  js  c++  java
  • HAL库直流电机编码测速(L298N驱动)笔记

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


    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){}

  • 相关阅读:
    云计算设计模式(十一)——健康端点监控模式
    大数据R语言简析
    git查看/修改 用户名和邮箱
    MySQL查询和修改auto_increment的方法
    git 配置用户名和邮箱
    discuz安装小云app
    二维码转化为链接
    discuz更换域名,登录不了解决
    数据结构很重要
    C++ vector错误(1)
  • 原文地址:https://www.cnblogs.com/kerwincui/p/12039092.html
Copyright © 2011-2022 走看看