今天要来玩伺服马达~
我们使用 SG-90 透过PWM控制 精准控制角度从0° ~ 180°
常使用在旋转物体、移动机器人手、脚或是移动感测器等等
伺服马达(servo motor)由减速齿轮、控制电路、电位器、直流马达和减速齿轮,当我们送入脉冲信号後,马达转动造成电位器改变,内部的控制电路会判断电位器与目标角度位置至相同时停止转动,即可精准控制电路。
SG-90 接脚:
SG-90可控角度在0° ~ 180°之间,控制方式就是输入50Hz脉冲讯号,同时脉冲的宽度(也就是高电位的持续时间)必须在 1ms ~ 2ms之间:
我们来计算一下,频率为 50 Hz每一周期为 1/50 = 0.02s,也就是 20ms
基本设定:
RCC → HSE、LSE → Crystal/Ceramic Resonator ✅
SYS → Debug Serial Wire ✅
额外设定:
TIM21 → Channel1 → PWM Generation CH1 ✅
最快32MHz
TIM21设定预分频器(Prescalar)、ARR暂存器:
频率必须为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,可正常工作!
随後记得开启中断
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);
- STM32 Nucleo-64 boards (MB1136)资料手册
https://www.st.com/resource/en/user_manual/dm00105823-stm32-nucleo-64-boards-mb1136-stmicroelectronics.pdf- STM32L053R8 datasheet
https://www.st.com/resource/en/datasheet/stm32l053r8.pdf- RM0367 Reference manual Ultra-low-power STM32L0x3 advanced Arm®-based 32-bit MCUs
https://www.st.com/resource/en/reference_manual/dm00095744-ultra-low-power-stm32l0x3-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf- ARM Mbed官网介绍 - NUCLEO-L053R8
https://os.mbed.com/platforms/ST-Nucleo-L053R8/- STM32 官网介绍 - STM32L053R8
https://www.st.com/en/microcontrollers-microprocessors/stm32l053r8.html#overview
- 此开发板售价在台币1000元以下,读者可於以下网站购得:
https://www.mouser.tw/
https://www.digikey.tw/
快结束了!
<<: [Day28]初探Firebase Cloud Messaging for Flutter
JUCE 不若 Qt 或其他知名开发框架,学习资源较多。相较之下,JUCE 的学习资源,寥寥可数。这...
前言 本文说明使用TA-Lib函式库计算SMA指标。 SMA指标 简单移动平均线(SMA:simpl...
T0819 Exploit Public-Facing Application 攻击者针对攻击已知...
Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...
今天要说在後端的Cube.js Server连线DB後,对DB的请求需要做什麽样的设置,也就是如何建...