这次的测试贴近一些比赛,从小项目入手,我们将舵机部分融合到板子中。
首先介绍一下舵机:
舵机(Servo Motor,有时也简称 Servo)是一种可以精确控制旋转角度或位置的电机装置 。
信号线如下图:

信号线图示
这次舵机选用了基础学习时stm32套件里面的小蓝舵机SG90电流小,避免电流大反向电动势击穿开发板
根据教程中介绍,你需要每隔大约20毫秒(就像打拍子一样,每拍20毫秒)就给它发一个指令信号。
这个指令信号就像一个“电脉冲”,它有两个部分:一个是“通电”的时间(高电平),一个是“断电”的时间(低电平)。
关键在于“通电”的时间长短。你让这个“通电”时间在0.5毫秒到2.5毫秒之间变化:
- 通电时间很短(比如0.5ms),它就转到最左边(比如-90°)。
- 通电时间中等(比如1.5ms),它就转到正中间(比如0°)。
- 通电时间很长(比如2.5ms),它就转到最右边(比如+90°)。
所以,你通过改变这20毫秒一拍里,“通电”那一下持续多久,就能精确地控制它转到哪个角度,并停在那里不动。
不过在MicroPython编程里从-90°到90°,就是用不同的通电时间(脉冲宽度)来对应这个范围的角度。比如1ms对应-90°,1.5ms对应0°,2ms对应+90°(具体对应关系要看舵机规格)。
'''
# Copyright (c) [2025] [01Studio]. Licensed under the MIT License.
实验名称:舵机控制
实验平台:01Studio CanMV K230
说明:通过编程控制舵机旋转到不同角度
'''
from machine import Pin, PWM
from machine import FPIOA
import time
fpioa = FPIOA()
fpioa.set_function(42,FPIOA.PWM0)
S1 = PWM(0, 50, 0, enable=True)
'''
#其它PWM引脚配置参考代码
#配置引脚43为PWM1功能
fpioa = FPIOA()
fpioa.set_function(43,FPIOA.PWM1)
#构建PWM1对象,通道1,频率为50Hz,占空比为0,默认使能输出
S1 = PWM(1, 50, 0, enable=True) # 在同一语句下创建和配置PWM
'''
'''
说明:舵机控制函数
功能:180度舵机:angle:-90至90 表示相应的角度
360连续旋转度舵机:angle:-90至90 旋转方向和速度值。
【duty】占空比值:0-100
'''
def Servo(servo,angle):
servo.duty((angle+90)/180*10+2.5)
while True:
Servo(S1,-90)
time.sleep(1)
Servo(S1,-45)
time.sleep(1)
Servo(S1,0)
time.sleep(1)
Servo(S1,45)
time.sleep(1)
Servo(S1,90)
time.sleep(1)
这就实现了单个舵机的操控,同样我们也可以通过此方法操控多个舵机,同样在01studio中也有多路舵机电机的教程,详情请移至相关位置多路舵机/电机模块 | 01Studio

通过上面的程序,我们会得到这个现象:
VID_20250710_085936
|