zoukankan      html  css  js  c++  java
  • HAl库控制L298N直流电机旋转笔记

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

    1..所有外设初始化:HAL_Init()

    2.系统时钟配置

    • RCC振荡器初始化:HAL_RCC_OsConfig()
    • RCC时钟初始化:HAL_RCC_ClockConfig()
    • 系统滴答定时器初始化:HAL_SYSTICK_Config()

    3.高级定时器初始化

    • 基本环境初始化: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()

    4.启动定时器:HAL_TIM_BASE_Start()

    5.启动定时器通道和互补通道PWM输出:HAL_TIM_PWM_Start() 、 HAL_TIMEx_PWMN_Start()

    6.死循环:while(1){}

    备注:

    1.设置定时器捕获比较寄存器(定时器通道比较输出脉冲)的值:__HAL_TIM_SET_COMPARE(handle、channel、compare)

    2.设置延时:HAL_Delay(1000)

    3.使用定时器功能输出PWM信号到L298N直流电机驱动器,使其驱动25GA370直流电机转动。

    4.编码器用于电机测速。在电机转动一圈时编码器可以输出固定的脉冲数,通过读取编码器脉冲可以获取当前电机转动状态。一般处理编码器脉冲有两种方法:T法:计算一定量的脉冲数所用的时间;M法:计算一段固定时间内所捕获的脉冲数。

  • 相关阅读:
    Gym
    HDU 4087 ALetter to Programmers (三维坐标旋转 矩阵 + 矩阵快速幂)
    POJ 3845 Fractal (向量旋转,好题)
    HDU 1700 Points on Cycle (向量旋转 + 圆内接三角形周长和面积最大的是正三角形)
    POJ 1271 Nice Milk (半平面交应用)
    POJ 2540 Hotter Colder (半平面交应用 + 向量旋转)
    luoguP3705 [SDOI2017]新生舞会
    luoguP4123 [CQOI2016]不同的最小割
    luoguP2046 [NOI2010]海拔
    luoguP3227 [HNOI2013]切糕
  • 原文地址:https://www.cnblogs.com/kerwincui/p/12032362.html
Copyright © 2011-2022 走看看