【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答

这篇具有很好参考价值的文章主要介绍了【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、(180度)舵机控制要知道的知识

【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件

我们要知道,SG90舵机接收的PWM信号的参数:f=50Hz,T=1/f,所以周期为20ms。
当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。

  • 换句话说,我们要用单片机产生一个周期(20ms)的PWM波,然后获得对应这些时长(分别是0.5ms1ms1.5ms2ms2.5ms)的高电平
  • 或者说:它们是以20ms为周期的方波,分别为 2.5%5%7.5%10%12.5%占空比
    【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件

二、PWM的参数要怎么计算

公式:f = SYSCLK/((TIM_Period+1)*(TIM_Prescaler+1))

  1. 我们已知的有:
  • f=1/50Hz(舵机需要的频率)
  • sys_clk=72MHz(根据板子的系统时钟频率来取值)
  1. 我们要求的是分频值重装载值
  • TIM_Prescaler:计时器的预分频器值,它决定了 PWM 信号的频率,也就是每秒钟有多少个脉冲。预分频值越大,每秒钟产生的脉冲数就越少,频率就越低
  • TIM_Period:计时器的自动重装载寄存器(Auto-Reload Register,ARR)的值,用于确定计时器的计数周期。它决定了每个 PWM 周期的长度。重装载值越大,每个周期的长度就越长,脉冲也会持续更久。

总之,预分频值和重装载值的选择会直接影响到 PWM 信号的频率和占空比。通过适当地调整这两个值,你可以实现所需的 PWM 输出效果。需要根据具体的应用需求和硬件规格来确定适合的预分频值和重装载值。

用大白话说,比如倒着数数,预分频值就是你一次数几个数,装载值是你从哪个数开始倒数。

  • 1次1个就是 100、99、98…
  • 1次2个就是100、98、96… 以此类推。
    【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件
    然后再理解一下这个Compare:
    【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件
    你把数的这串数字看作是一整个波形。
    波形嘛,是有高、低电平的。而Compare值就是用来指出高电平在其中所占的个数的。
    那么把高电平所占的个数除以数字总个数,就是占空比啦!!!

1、为什么要分频呢?

定时器的计数有限。因为板子的系统时钟频率是72MHz,意味着1秒可以计数72M次。

  • 对于16位的定时器,计数范围是0~65536,2的16次方嘛。
  • 对于32位的定时器,则为0到4294967295。但是虽然可以满足,但是计数太快了,利用率就不行。所以通过给系统时钟分频,可以根据具体应用需求灵活地调整定时器的计数速度。对于需要高精度和高频率的应用,可以选择较高的系统时钟频率和相应的预分频系数;对于需要较低频率的应用,可以选择较低的系统时钟频率和相应的预分频系数。

我对它的理解是,我们通过一个生活中的数数例子来理解上面这段话。

假设你和朋友一起数数,计数范围是0到9。你们每秒钟能够数一次,并且使用一个计数器来记录当前的数字。
现在,假设你们使用的时钟是系统时钟,频率为100次/秒,即每秒钟系统时钟发生100个时钟脉冲。
如果你们直接将系统时钟作为计数器的输入时钟,计数器每接收到一个时钟脉冲就会加1,那么在1秒钟内,计数器将会累加100次。由于计数范围只有0到9,计数器的值会很快达到最大值9,并溢出回到0,无法完成较长的计数周期。
为了实现更长的计数周期和较低的频率,你们决定将系统时钟频率分频,比如分频为10。这意味着计数器每接收到10个时钟脉冲才会加1,也就是每秒钟计数器只会加1次。这样,计数器的值在1秒钟内只会从0增加到1,而不会溢出,可以实现更长的计数周期和较低的频率。
---------------------------------------例如----------------------------------------------
stm32F103C8T6的系统时钟是72MHz,

  • 我给它进行72分频(TIM_Prescaler=72),也就是 72MHz / 72 = 1MHz (1秒1M个数),我们分频以后计一个数就是1us

  • 一个数1us,那我们需要20ms,也是20ms = 20 000us / 1us = 20000个(TIM_Period=20000),也就是我们需要计20000数,这很好理解吧。

  • cubeMX里是这么设置的
    【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件

  • 然后我们要知道下面这张图,意思就是在这个20ms的一个周期内,如果高电平占20ms中的0.5ms(占空比嘛,高电平在一个周期内的占比),则可以让舵机转到0°,后面的以此例推。

  • 然后,问题来了,我们要记多少个数才可以达到0.5ms呢?
    :因为1us计数1个,0.5ms则是500us,所以对应500个嘛。
    【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件

  • 然后要怎么让单片机知道,我们这500个数,计的是高电平呢?(你要是没有设置,它肯定不知道的)
    在CubeMX里
    【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件
    在代码里
    【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件

2、为什么选择PWM模式1(TIM_OCMode_PWM1)呢?

按我的理解来说,pwm1的就是先输出有效电平(高电平)再输出无效电平(低电平)。而pwm2就是反过来,先输出无效电平再输出有效电平。

Hal库__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,500);或者是库函数的 TIM_SetCompare3(TIM3,500);
当配置的是pwm1模式,那这句话的意思都是,输出计500个数的时间的有效电平(高电平),500*1us=0.5ms,剩余的(20-0.5)ms则是低电平。
若是配置pwm2模式,也是输出的500个数的时间是低电平。【一般都用pwm1】

如果还是不太懂的话,可以去看看江科大讲的stm32入门教程。
【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答,STM32单片机,单片机,stm32,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-544108.html

每天进步一点点 笔记仅供自学,用来回看复习,不一定适合你,如有错误请指出。

到了这里,关于【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机实现SG90舵机任意角度转动

    参考单片机——SG90舵机工作原理_掏一淘哆啦A梦的奇妙口袋的博客-CSDN博客​​​​​​ 这位博主做的代码,在此基础上进行简单修改成可以用51单片机的定时器和中断实现SG90舵机任意角度转动 完整代码如下:  这里对主要的内容进行解释。 根据51单片机定时器计数初值的计

    2024年02月16日
    浏览(40)
  • 51单片机驱动SG90舵机抖动或者无反应问题解决方案

    1、自制的51单片机最小系统板。    2、加入了一个7805CV稳压模块,使用12V直流供电,随便找了个电源适配器。输出12V,1A 3、问题:确保程序无误,接线无误,上电之后舵机有轻微咔咔声,无法正确运行。或者有时候反复重新执行。根据观察判断是单片机运行几条指令之后就

    2024年02月14日
    浏览(42)
  • 基于STM32 SG90 9g舵机控制

    产品参数 名称:9克舵机180度 尺寸:23mm X 12.2mm X 29mm 重量:9克 扭矩:1.5kg/cm 工作电压:4.2 - 6V 温度范围:0 - 55℃ 运行速度:0.3s/60℃ 死带宽:10ms 舵机有三条线定义: 暗灰:GND 红色:VCC 4.8V - 7.2V 橙黄线:脉冲输入 在机器人机电控制系统中,舵机控制效果是性能的重要影响

    2024年02月14日
    浏览(48)
  • STM32---SG90舵机控制(HAL库,含源码)

    写在前面: 在嵌入式的项目中,舵机是一个十分常见的元器件模块,其主要的功能是实现机械转动,实质上舵机是一个伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。例如在机器人的电控制器系统中,飞行器设计,遥控机器人等。舵机的使用需要PWM信号

    2024年04月13日
    浏览(35)
  • 小白入门STM32(2)---控制SG90舵机---基础工作原理详解

    本人一枚软件编程人员,有一定C语言基础,目前自学STM32单片机,写下此篇一巩固所学二交流分享。 按照惯例,先介绍理论再实战上手,穿插习题,最后给出我的愚见。 SG90属于一种舵机,最适合小白入门,可直接由单片机驱动。另外,单片机中给我们封装了很多东西,所以

    2023年04月10日
    浏览(44)
  • 单片机PWM舵机控制

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档   文章目录 一、PWM是什么? 二、如何控制舵机?     PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟

    2023年04月25日
    浏览(54)
  • 关于四足行走机器人步态分析STM32+SG90舵机控制

    最近逛某站看了很多国赛大佬的赛车,下面评论区一堆大佬在感叹“老师看到赛车都摇头。”作为一个初入STM32坑的萌新,我在某些站上查阅了相关资料后,确定给我自己的机器人搞成四足行走(ps,其实是L298N烧了)。 目前手上的板子是C8T6,学习的视频是江科协,主要代码

    2024年01月21日
    浏览(72)
  • Arduino ESP8266控制SG90舵机输出PWM信号

    舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 控制信号由接收机的通道进入信号调制芯片

    2023年04月26日
    浏览(73)
  • 基于51单片机的舵机控制(PWM)

    舵机是一种位置伺服的驱动器,常被用于遥控汽车、机器人等领域,结构主要包括小型直流电机、变速齿轮组、可调电位器和控制电路板四个部分,如下图,舵机的外部一般接有三根线,分别是黑(接地线)、红(电源线)、棕(白或者黄,信号线)三种颜色进行区分。 2.

    2024年02月16日
    浏览(43)
  • STM32F103RCT6驱动SG90舵机-完成正反转角度控制

    SG90是一种微型舵机,也被称为伺服电机。它是一种小型、低成本的直流电机,通常用于模型和机器人控制等应用中。SG90舵机可以通过电子信号来控制其精确的位置和速度。它具有体积小、重量轻、响应快等特点,因此在各种小型机械设备上得到了广泛应用。 SG90舵机通常用于

    2024年02月03日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包