当前位置: 首页 > article >正文

【STM32F1】——舵机角度控制与TIM定时器

【STM32F1】——舵机角度控制与TIM定时器

一、简介

本篇主要对舵机DS-S002M模块调试过程进行总结,实现了以下功能:

1)舵机转动角度的控制:利用STM32F103C8T6的TIM定时器产生PWM信号控制舵机DS-S002M转动一定的角度。

二、DS-S002M数字舵机介绍

  1. 电压:4.8-6.0V
  2. 操作角度:180°
  3. 质量:5.8g
  4. 信号周期:20ms
  5. 脉冲宽度:500-2500us(0.5-2.5ms)
  6. 数字舵机/模拟舵机:数字舵机只需要发一次信号,模拟舵机需要持续发信号

三、相关基础知识

  1. 舵机控制原理

    向舵机发送一个时长为20ms的PWM信号,其高电平持续时间0.5 ~ 2.5ms,即所谓的占空比可以对应控制转角转动0 ~ 180°,即PWM的占空比决定舵机转角

  1. 信号基础——时钟周期与分频

    1)一般,STM32单片机的系统时钟Sys_tck = 72MHz(1MHz = 1 0 6 10^6 106 Hz),即将1秒分成7200万份,作为时基。在实际使用时,对Sys_tck进行切分,即分频。如采用7200分频(PSC=7200-1),即时基为0.01MHz,每份约0.1ms

    2)STM32单片机的最大分频数为65536

    3)为什么是PSC=分频数-1,是因为计算机是从0开始计数的。

  2. 如何产生PWM信号

    1)PWM波的产生需要两个因素:高低电平跳变+控制高低电平持续时间

    2)单片机中,PWM波的产生可以依靠定时器来实现

  3. 定时器——如何构造高低电平跳变:利用循环计数器自动复位计数

    1)STM32单片机的定时器本质上就是循环计数器,由一些寄存器构成。其中最重要的是计数寄存器CK_CNT和自动重载寄存器ARR

    2)对计数寄存器CK_CNT来说,时钟前进一下,其存储的数值自动加一或减一

    3)对自动重载寄存器ARR来说,相当于储存一个上限值。当CK_CNT大于ARR时,计数寄存器CK_CNT会自动复位重新循环计数。如果设置了中断时,还会触发对应的中断

    4)计数模式分为向上(0→ARR)、向下(ARR→0)、中心对齐(0→ARR→0)

  1. 定时器——如何控制高低电平持续时间:通过比较寄存器控制高电平持续时间

    从上面的内容我们可以看出:依靠循环计数器,可以实现跳变,但不能将间隔分成前后两端。如果在循环计数中,增加一个比较寄存器CCR,在计数器更新时与CCR比较,并输出比较的结果便可实现。当 0 < CK_CNT < CCR时,输出高电平,而CCR < CK_CNT < ARR时输出低电平,便实现了控制高低电平的持续时间。

  2. 定时器配置

    1)最重要的是定时器周期TIM_Period(ARR)和分频数TIM_Prescaler(PSC),两者之间存在确定的关系:

    PWM信号的周期20ms = (ARR-1) * 时基 = (ARR-1) * (PSC-1)/Sys_tck

    有:(PSC-1)*(ARR-1) = 1440000

    2)脉宽2ms转180°,则每转动1°,脉宽增加(2/180)ms。而每转动1度的计数值x与ARR-1也存在确定关系:

    (2/180) / x = 20 / (ARR-1)

    有:(ARR-1) = 1800x

    以上两式子可以用来确定PSC和ARR

四、代码部分


http://www.kler.cn/a/387077.html

相关文章:

  • 【面试题】发起一次网络请求,当请求>=1s,立马中断
  • Elastic Observability 8.16:增强的 OpenTelemetry 支持、高级日志分析和简化的入门流程
  • 解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url
  • C++,STL 054(24.11.13)
  • 软件测试面试2024最新热点问题
  • 【深度解析】CSS工程化全攻略(1)
  • MySQL性能测试方案设计
  • 网站架构知识之Ansible(day020)
  • MySQL重难点(一)索引
  • 高并发分布式是什么,包含哪些核心技术
  • 45-best-time-to-buy-and-sell-stock-with-cooldown 力扣 714. 买卖股票的最佳时机包含手续费
  • JavaSE:初识Java(学习笔记)
  • 标定之---EPSON机械手与第三方相机的校准功能设计By python
  • Qt 使用QTreeView显示并动态的增删改查JSON文件数据
  • MySQL_第13章_视图
  • 量化交易系统开发-实时行情自动化交易-Okex K线数据
  • 基于深度学习的地物类型的提取
  • 【VR】PICO 手部追踪 steamvr内无法识别,依旧识别手柄的解决方案
  • Ubuntu18更新Linux内核5.15及Linux内核编译
  • 如何1小时掌握Vue3
  • 前端代码分析题(选择题、分析题)——JS事件循环分析
  • 如何在 Android 上增加 SELinux 权限
  • 为什么分布式光伏规模是6MW为界点
  • 使用HTML、CSS和JavaScript创建动态圣诞树
  • vue2 和 vue3的区别
  • Markdown设置字体大小、颜色,CSDN编写字体大小、颜色等样式