小白入门STM32(2)---控制SG90舵机---基础工作原理详解

article/2025/10/7 13:10:27

文章目录

  • 序言
  • 一、基础理论
    • 1.1 舵机控制原理--PWM
      • 习题
    • 1.2 定时器
      • 1.2.1 基础定时器
        • 时钟装置
        • 循环计数器
      • 1.2.2 比较定时器
      • 习题
  • 二、实战上手
    • 2.1 设置定时器和单片机接线
      • 习题
    • 2.2 代码
  • 三、习题答案

序言

本人一枚软件编程人员,有一定C语言基础,目前自学STM32单片机,写下此篇一巩固所学二交流分享。

按照惯例,先介绍理论再实战上手,穿插习题,最后给出我的愚见。

SG90属于一种舵机,最适合小白入门,可直接由单片机驱动。另外,单片机中给我们封装了很多东西,所以有些地方,读者只要记住就好,不理解的地方,不要寻根究底,你就默认单片机底层给你实现了某项功能就好,不用在意其实现基础细节原理。

这篇理论讲的很浅显,是为了让大家容易看懂。

一、基础理论

1.1 舵机控制原理–PWM

舵机一般可以再0-180度或0-360度转动任意角度,经常用于小车小船转向控制和机械臂的关节等。舵机的转动角度范围不是固定的,请购买时问问商家,到底是哪个范围的。实际使用中,我们对舵机有两个基本需求:

  1. 舵机转动一定角度。
  2. 舵机转动时,控制者要求舵机转到一个新的角度。

机器如何给舵机发送其转动角度呢?首先,要低成本,信号线要少。其次,要满足任意角度和中途打断。设计者推出了一个简单的方法:用一个时长为20ms的信号去控制舵机,信号的前一段为高电平,持续时间0.5ms到2.5ms,代表转动角度0-180或者360度,后半段为低电平,这就是PWM信号,具体如下图:
在这里插入图片描述
容易看出来,PWM信号利用前段为高电平持续时间控制旋转角度,本质用占空比控制了旋转角度。
运转时,舵机转到你指定的角度需要一定的时间,转动的角度越大,需要的时间越久,所以你可能需要等待一定的时间。如果你刚刚给舵机发送指令转到180度,紧接着又发送指令转到90度,舵机会不转到180度再转到90度,而是在接受到信号时直接在当前的角度直接转到90度去。

习题

习题110. 如果2.5ms为90度,那么36度的PWM信号是高电平时间长度是?
习题111. 为什么是PWM控制舵机,有没有其他的方法?
习题112. PWM信号属于串行还是并行通信?全工还是单工?为什么要这么设计?
习题113. PWM信号长度为20ms,为什么一般只用前2.5ms?

1.2 定时器

为什么要讲解定时器,要用它去产生PWM信号。

1.2.1 基础定时器

定时器,顾名思义,按照定下闹钟到了某个时刻做某件事情。比如,你定下闹钟早上6点起床跑步,或者每隔半个小时喝一次水。你也可以给机器制作一个闹钟,每隔半秒二极管发光或者熄灭,或者每隔4秒灯亮起来再过4秒灯熄灭。
为了达成“每隔4秒二极管亮起来再过4秒二极管熄灭”,咱们构造一套定时器系统,它也许很奇怪,设计的有些复杂,但是还请你压制疑问,跟我一起把它造出来。

  1. 咱们构造一个时钟装置,每过20ms,它响一次,也就是它将1秒切成50份,每份长20ms。(为什么要造这么一个时钟呢,这是因为单片机的时钟就是这种时钟,将1秒切成n份)
  2. 为了能够实现间隔4秒,咱们再做一个循环计数装置:每当时钟响1次,它的数值加一,但是智商有限,只知道0-199,到了199后再加一,数值归为0。
  3. 最后做一个开关装置,当计数装置数字为199时开关就反转一次,灯亮或者熄灭。
    动画效果如下:
    请添加图片描述

在上述的过程中,我们就利用制作了一个套装置,其中时钟是现实世界的时间源循环计数装置提供实际需要的循环固定间隔,它们两个组成一个完整的简陋定时器,与单片机的基础定时器基本功能一致,下面正式介绍他们。

时钟装置

时钟装置:一般是STM32单片机的系统时钟,用变量sys_tck表示,频率72MHz,即将1秒分为720万份,显然太细,频率太高了,需要降低频率,将原来的频率切分为原来的n分之一,即 7200000 n \frac{7200000}{n} n7200000,术语叫做分频。如果采用720分频,即将原来72M频率除以720,即0.1MHz,每份0.01ms。STM32单片机允许的最大分频数为65536,其为uint16类型数字,这个分频数其实是一个寄存器。

循环计数器

循环计数器:由一些寄存器构成。最重要的两个:

  1. 计数寄存器CK_CNT,可以存储一个uint16数字,时钟前进一下,其数值自动加一或减一
  2. 自动重载寄存器ARR,当CK_CNT大于ARR时,CK_CNT会自动变化,重新循环计数。如果你会设置中断的话,当CK_CNT>ARR时,会触发一个中断。

循环计数器有三种模式:

模式名解释图像表示
向上计数计数是自动加一,CK_CNT从0增长到ARR请添加图片描述
向下计数计数是自动减一,CK_CNT从ARR减小到0请添加图片描述
中心对齐计数是先自动加一,再自动减一,CK_CNT先从0加到ARR然后再减到0请添加图片描述

1.2.2 比较定时器

只有基础时钟是无法产生PWM信号的,因为它只能提供循环固定间隔,不能将间隔分为前半段和后半段,进而产生PWM。为了做到这点,需要给循环计数器加一个比较数字CCR,当计数器的值更新时,与CCR比较,并对外输出比较的结果,以方便做其他动作。

接上面灯泡明亮的例子,我们改成灯泡在一秒亮三秒灭的模式。我们只需要在上述提到的理想装置中再加一个比较数字就好:
请添加图片描述
CCR在STM32中是叫做比较寄存器,是循环计数器的第三个重要的寄存器。是STM32高级定时器才有的功能。

习题

习题121. 定时器的时钟装置,循环计数器各发挥了什么作用,请谈谈您的理解?
习题122. 循环计数器有哪些重要参数要设置?
习题123. STM32时钟频率为72MHz,分频数为uint16,CK_CNT为uint16,则最大循环时间间隔为多久时间?最小呢?
习题124. 如果要产生一个旋转360度的PWM信号,请设置时钟装置和循环计数器的寄存器值?

二、实战上手

STM32已经为我们在硬件上封装好了上述的提到的:时钟装置、循环计数器和对外输出装置,以及计数器的自动比较等功能,你我现阶段无需关心其细节。我们只需要对这些东西进行相关设置和接线就好。

2.1 设置定时器和单片机接线

请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

习题

习题211: 为什么Counter Period是这里为1999,而不是2000?

2.2 代码

请添加图片描述

  /* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){TIM1->CCR1=50;HAL_Delay(1000);TIM1->CCR1=150;HAL_Delay(1000);}/* USER CODE END 3 */
}

三、习题答案

习题110. 如果2.5ms为90度,那么36度的PWM信号是高电平时间长度是?

  • PWM信号最短0.5ms(对应0度),最长2.5ms(对应90度),所以:(2.5 - 0.5) / 90 * 36 + 0.5 = 1.3ms。

习题111. 为什么是PWM控制舵机,有没有其他的方法?

  • PWM将用时间长度表示转动角度,在硬件支持的情况下,该协议能够满足不同精度的细分转动角度。只用了一根导线来传输信号,相对价格便宜,好用。
  • 可能有。

习题112. PWM信号属于串行还是并行通信?全工还是单工?为什么要这么设计?

  • 一根导线,所以是串行。舵机是信息接收端,不会发信息给另一端,所以是单工。
  • 很显然,一根导线很便宜,PWM机制很可靠,执行端不用发信息给信号源端。

习题113. PWM信号长度为20ms,为什么一般只用前2.5ms?

  • 2.5ms为20ms的八分之一,利用率确实不高,我不知道确切原因。我的猜想是:空余出来的17.5ms,足够让执行端区分出线路上的杂音信号,并准备好接收下一次的pwm信号。

习题121. 定时器的时钟装置,循环计数器各发挥了什么作用,请谈谈您的理解?

  • 定时器一般会循环执行某一操作。时钟装置提供了现实世界中的时间粒度,循环计数器记录一次循环中已经流失的时间以方便在特定的时刻,执行特定的操作。

习题122. 循环计数器有哪些重要参数要设置?

  • 循环周期长度,即一个轮回的长度。

习题123. STM32时钟频率为72MHz,分频数为uint16,CK_CNT为uint16,则最大循环时间间隔为多久时间?最小呢?

  • uint16的值为0~65536,则分频后的时钟频率为 72 65536 \frac{72}{65536} 6553672 ~ 72 MHZ,即时钟间隔范围为1.38e-07~0.00910秒。
  • CK_CNT为uint16,则ARR为1~65536。
  • 最小循环时间间隔为1.38e-07s x 1 = 1.38e-07s。最小循环时间间隔为65536s*0.00910 = 596.3776s。

习题124. 如果要产生一个旋转360度的PWM信号,请设置时钟装置和循环计数器的寄存器值?

  • 360度对应时间为2.5ms,

http://chatgpt.dhexx.cn/article/lf1BGQ3j.shtml

相关文章

舵机的控制

舵机是一种位置「角度」伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具、航模、机器人中已经得到普遍使用。舵机是一种俗称,其实是一种伺服马达。本篇通过官方驱动库来实现舵机控制。 一. 舵机介绍 1、结构组成 舵机…

51单片机SG90舵机控制原理

舵机三根线的接法:黄线接信号线,红线接vcc,褐色线接GND 舵机控制原理:通过控制PWM来控制舵机转动的角度,关于PWM的知识可以去智能小车专栏进行学习,转动周期设置为20ms,控制高电平的时间来进行舵机转动的角度。 对于1…

单片机PWM舵机控制原理

舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度舵机为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms---…

STM32 PWM控制舵机——原理、接线、源程序

STM32——PWM 控制舵机 通用定时输出PWM PWM的工作原理PWM的模式 TIM_OCMode_PWM1 (边沿对齐模式)TIM_OCMode_PWM2(中央对齐模式) 占空比 舵机 实物图接线舵机工作原理周期TPWM占空比 TIM3 PWM输出 驱动SG90电机 配置过程&#xf…

pwm波控制舵机原理(转)

文章转自:http://www.geek-workshop.com/thread-70-1-1.html 一、关于舵机: 舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。…

pwm信号控制舵机的简单原理

pwm信号控制舵机的简单原理 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后&…

SG90舵机的原理和控制方式

前言 做过机器人、智能车或者玩航模的朋友应该对舵机不会陌生,这种舵机也是很常用的。 舵机只是我们通俗的叫法,它的本质是一个伺服电机,也可以叫做位置(角度)伺服驱动器。一般被应用在那些需要控制角度变化的系统中,可以方便的…

舵机控制原理和结构

原文:https://blog.zeruns.tech/index.php/archives/358/ 什么是PWM信号 PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅…

舵机控制原理/舵机内部电路原理

舵机结构 舵机是我们常用到的末端执行器,但是在应用时我们只知道利用一定频率和周期的PWM来控制其摆动一定角度。及控制器给舵机一个周期为20ms的PWM波,高电平时间为0.5ms时对应0,高电平时间为2.5ms时对应180。以上规律适用于大多数180摆角的…

矩阵谱半径与矩阵范数的关系

摘自 程云鹏. 矩阵论(第二版)[M]// 矩阵论(第二版). 西北工业大学出版社, 2000. p135~p137

谱半径

矩阵的谱或叫矩阵的谱半径,在特征值估计、广义逆矩阵、数值分析以及数值代数等理论的建树中,都占有极其重要的地位; 矩阵的谱半径为矩阵的特征值的模的最大值。 关于矩阵的谱(半径)的一个重要性质即是:任意…

【矩阵论笔记】谱半径

定义 例子 谱半径比他的诱导范数都小。 证明 例子 hemite对称矩阵 谱半径什么时候跟诱导范数相等?答曰:Hermite矩阵。

python求矩阵的谱半径

在学习计算方法的时候,线性方程组的迭代法中的雅可比(Jacobi)迭代法和高斯-塞德尔(Gauss-Seidel)迭代法的收敛条件中需要求矩阵的谱半径,而经过查阅资料,python numpy库中没有直接求谱半径的函数。 谱半径的定义为: 设A是n n矩阵…

实对称阵的谱半径是连续函数

矩阵的诱导范数(算子范数)的定义: ∣ ∣ A ∣ ∣ sup ⁡ ∣ ∣ x ∣ ∣ 1 ∣ ∣ A x ∣ ∣ ||A|| \sup_{||x|| 1}||Ax|| ∣∣A∣∣∣∣x∣∣1sup​∣∣Ax∣∣其中,||||可以是任何向量范数,由于该矩阵范数是由向量范…

PTA 1063 计算谱半径(Python3)

在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { a1​b1​i,⋯,an​bn​i },它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。 现在给定一些复数空间的特征值&a…

1063 计算谱半径

问题描述: 在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { a​1​​b​1​​i,⋯,a​n​​b​n​​i },它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大…

如何判断矩阵的谱半径 C语言,矩阵谱半径

矩阵谱半径指的是矩阵的最大特征值(含绝对值)。 它可以判断收敛性,也可以判断方程解的稳定性。 一般情况下,当存在一个单位矩阵减去另外一个矩阵的形式时, 谱半径小于一就是为了确保它们之间的差值为正这样逆矩阵才会存在,可以用来验证一个方案是否可行。 The radius of t…

一、向量范数、矩阵范数、谱半径、条件数

一、范数、条件数与谱半径 1. 范数 1.1 向量范数 向量范数的具体形式可以有很多种(满足上述三个条件的),但常用的有以下三种 设 向 量 x ( ξ 1 , ξ 2 , … , ξ n ) T ∈ C n , 设向量 x\left(\xi_{1}, \xi_{2}, \dots, \xi_{n}\right)^{T} \in C^{n} , 设向量…

【高等工程数学】南理工研究生课程 突击笔记2 谱半径,条件数

高等工程数学 突击笔记2 文章目录 高等工程数学 突击笔记2写在前面一、谱半径什么是正规矩阵矩阵级数敛散性判断 二、条件数举个栗子条件数求误差总结 写在前面 提示:这里可以添加本文要记录的大概内容: 本文主要是为了应付考试,因此很多原…

线性代数(四十八) : 谱半径

本节介绍复欧几里得空间映射到其自身的矩阵.给出其范数的一个简单而有用的下界. 该矩阵范数的定义同实欧几里得空间. 0 说明: 本节以下的研究都是针对复欧几里得空间到自身的映射 1 范数 2 特征值 设A为任意的复方阵.h为A的一个长度为1的特征向量.a为对应的特征…