ESP32-PWM驱动SG90舵机
# ESP32S3N16R8使用PWM驱动SG90舵机
本文以ESP32-S3N16R8为例,介绍如何使用PWM驱动SG90舵机。本示例运行在FreeRTOS下。
# 连线
SG90舵机线:信号线(黄色)、正极(红色)、负极(棕色)

# 代码
#include <Arduino.h>
const int servoPin = 9;
const int servoFreq = 50;
const int servoChannel = 1;
const int servoResolution = 11; // 11位分辨率(2048级)
void setAngle(int angle) {
angle = constrain(angle, 0, 180);
// 计算占空比:0.5ms=102.4,2.5ms=512(11位分辨率)[1](@ref)
int duty = (angle / 180.0) * (512 - 102.4) + 102.4;
ledcWrite(servoChannel, duty);
}
void TaskServo(void *pvParam) {
while (1) {
setAngle(45);
vTaskDelay(1000 / portTICK_PERIOD_MS);
setAngle(0);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void setup() {
ledcSetup(servoChannel, servoFreq, servoResolution);
ledcAttachPin(servoPin, servoChannel);
xTaskCreate(TaskServo, "Servo", 2048, NULL, 2, NULL);
}
void loop() {
vTaskDelete(NULL); // Arduino 主循环需挂起
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
编辑 (opens new window)