一.舵机的分类

数字舵机
模拟舵机
其中数字舵机只需要传递一次信号,而模拟舵机则需要不断地传递信号。数字舵机的反应快,角度更为精准,无反应的范围小,但所需要的动力更大(相较于模拟舵机)。
二.sg90的外观及接线方法

这是网上常见的sg90的电机图片,可以看出sg90电机引出了三根线:电源线(红线),GND线(棕线),数据线(黄线)。

三.sg90舵机的相关参数

其中,sg90的转动范围为0°—180°
四.sg90舵机驱动的原理
相较于其他模块,sg90的驱动非常简单,其驱动取决于高电平t在整个周期T(20ms)内所占的时间,即通过不同脉宽的pwm信号,来实现对sg90舵机的驱动。

五.代码编写
microPython内置了Pin模块和PWM模块,这使得我们对代码的编写轻松了许多,代码编写的依据仍是第四点的“舵机输出转角与输入信号脉冲宽度的关系”。
from machine import Pin,PWM
import math
import time
class SERVO:
def __init__(self,pin,freq=50):
'函数的初始化'
'参数:引脚,频率'
self.pwm=PWM(pin,freq=freq,duty=0)
self.freq=50'pwm引脚的频率,50hz正好对应20ms'
self.Min_fx=0'设定最小的转动角度'
self.Max_fx=180'设定最大的转动角度'
def servo_writefx(self,degrees=None,radians=None,sleep=0):
'方法函数,使得舵机转过指定角度,需要用关键字的指定来设定参数。'
'参数:角度,弧度(二者任选一),舵机sleep的时间(单位为ms)'
if degrees==None:
degrees=math.degrees(radians)
if degrees>self.Max_fx or degrees<self.Min_fx:
return
Duty=int((degrees/90+0.5)/20*1023)
self.pwm.duty(Duty)
time.sleep_ms(sleep)

项目链接:https://wokwi.com/projects/356203385540533249
六.参考文献
《单片机——SG90舵机工作原理》——https://blog.csdn.net/qq_41873236/article/details/116353829理
《舵机的基本了解以及数字舵机和模拟舵机的区别》——https://blog.csdn.net/xiantiaoop/article/details/106118817