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法:计算一段固定时间内所捕获的脉冲数。

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/kerwincui/p/12032362.html
Copyright © 2011-2022 走看看