[Day 28]-【STM32系列】实作-伺服马达 SG- 90 PWM控制

SG-90转起来!

今天要来玩伺服马达~
我们使用 SG-90 透过PWM控制 精准控制角度从0° ~ 180°
常使用在旋转物体、移动机器人手、脚或是移动感测器等等
https://ithelp.ithome.com.tw/upload/images/20201013/20120093fhmP69Pcq8.jpg

伺服马达(servo motor)由减速齿轮、控制电路、电位器、直流马达和减速齿轮,当我们送入脉冲信号後,马达转动造成电位器改变,内部的控制电路会判断电位器与目标角度位置至相同时停止转动,即可精准控制电路。

SG-90 接脚:

  • 棕色 -> 接地Gnd
  • 红色 -> 正电+5V
  • 橙色 -> PWM 输入

旋转角度控制

SG-90可控角度在0° ~ 180°之间,控制方式就是输入50Hz脉冲讯号,同时脉冲的宽度(也就是高电位的持续时间)必须在 1ms ~ 2ms之间:

  • 1.0ms的脉冲宽度 -> -90°
  • 1.5ms的脉冲宽度 -> 0°
  • 2.0ms的脉冲宽度 -> 90°

我们来计算一下,频率为 50 Hz每一周期为 1/50 = 0.02s,也就是 20ms

  • 1.0 ms 的脉冲宽度其工作周期为 1.0/20 * 100% = 5.0%
  • 1.5 ms 的脉冲宽度其工作周期为 1.5/20 * 100% = 7.5%
  • 2.0 ms 的脉冲宽度其工作周期为 2.0/20 * 100% = 10.0%

Setup

1.pinout settings

https://ithelp.ithome.com.tw/upload/images/20201014/20120093dF7y0IGPN9.png

  • 基本设定:
    RCC → HSE、LSE → Crystal/Ceramic Resonator ✅
    SYS → Debug Serial Wire ✅

  • 额外设定:
    TIM21 → Channel1 → PWM Generation CH1 ✅

2.Clock

https://ithelp.ithome.com.tw/upload/images/20201001/20120093mwsW2dOAkz.png
最快32MHz

3.Detail

TIM21设定预分频器(Prescalar)、ARR暂存器:
https://ithelp.ithome.com.tw/upload/images/20201014/20120093XzyMF6m83S.png
频率必须为50 Hz,Clock频率为32MHz,所以(32 MHz / 50 Hz) = 640k
我将640分到预分频器(Prescalar),ARR暂存器分到1000
这1000相当是1000%的脉冲宽度,如果我要改变脉冲宽度,只需要调整CCR1的值为X%

假如今天我要1ms的脉冲宽度,就是(1ms * 1000/20) = 50%,将这50%放入CCR1
2毫秒为100%,1.5毫秒为75%,依此类推
但在经过实验测试之後,发现虽然输出确实为 1ms ~ 2ms 的脉冲宽度
伺服马达却没有旋转完整的180°,所以我稍微改变了一下
脉冲宽度范围改变至 0.5ms ~ 2.5ms,可正常工作!
随後记得开启中断
https://ithelp.ithome.com.tw/upload/images/20201014/20120093pmSijfzYjP.png

CODE

HAL_TIM_PWM_Start_IT(&htim21, TIM_CHANNEL_1);

      TIM21->CCR1 = 25; //占空比为0.5ms,旋转角度-90°
	  HAL_Delay(1000); 
	  TIM21->CCR1 = 75; //占空比为1.5ms,旋转角度0°
	  HAL_Delay(1000); 
	  TIM21->CCR1 = 125; //占空比为2.5ms,旋转角度90°
	  HAL_Delay(1000); 

相关连结


结语

快结束了!


<<:  [Day28]初探Firebase Cloud Messaging for Flutter

>>:  JavaScript 进阶笔记一 (变数)

Day 8:学习资源哪里找?

JUCE 不若 Qt 或其他知名开发框架,学习资源较多。相较之下,JUCE 的学习资源,寥寥可数。这...

[第28天]理财达人Mx. Ada-SMA 指标

前言 本文说明使用TA-Lib函式库计算SMA指标。 SMA指标 简单移动平均线(SMA:simpl...

Day12 ATT&CK for ICS - Initial Access(2)

T0819 Exploit Public-Facing Application 攻击者针对攻击已知...

EP 17: The MenuItem of ListView binds Command in ViewModel - Way 2

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...

[Day 27] - 『转职工作的Lessons learned』 - Cube.js(III)

今天要说在後端的Cube.js Server连线DB後,对DB的请求需要做什麽样的设置,也就是如何建...