You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

16路PWM引脚仅8路可用,需额外配置第二组PWM?

问题分析与解决方案

你的核心问题是未对8、9号PWM通道执行初始化配置,导致对应引脚无法输出PWM信号。

ESP32的LEDC(PWM)确实分为高速组(通道0-7)和低速组(通道8-15),但无论哪组通道,都必须先通过ledcSetup()配置频率、分辨率,才能正常工作。你的代码里仅初始化了通道0、1、2,通道3-9都缺失了ledcSetup步骤,这是8、9号通道失效的直接原因。

修复后的代码

#define Servo_0 13
#define Servo_1 12
#define Servo_2 14
#define Servo_3 27
#define Servo_4 26
#define Servo_5 25
#define Servo_6 33
#define Servo_7 15
#define Servo_8 2
#define Servo_9 4

#define PWM_Channel0 0
#define PWM_Channel1 1
#define PWM_Channel2 2
#define PWM_Channel3 3
#define PWM_Channel4 4
#define PWM_Channel5 5
#define PWM_Channel6 6
#define PWM_Channel7 7
#define PWM_Channel8 8
#define PWM_Channel9 9

#define PWM_Resolution 8
#define PWM_Freq  50

String str;

void setup()
{
  // 初始化所有用到的PWM通道
  ledcSetup(PWM_Channel0, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel1, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel2, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel3, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel4, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel5, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel6, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel7, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel8, PWM_Freq, PWM_Resolution);
  ledcSetup(PWM_Channel9, PWM_Freq, PWM_Resolution);
  
  // 绑定引脚与通道
  ledcAttachPin(Servo_0, PWM_Channel0);
  ledcAttachPin(Servo_1, PWM_Channel1);
  ledcAttachPin(Servo_2, PWM_Channel2);
  ledcAttachPin(Servo_3, PWM_Channel3);
  ledcAttachPin(Servo_4, PWM_Channel4);
  ledcAttachPin(Servo_5, PWM_Channel5);
  ledcAttachPin(Servo_6, PWM_Channel6);
  ledcAttachPin(Servo_7, PWM_Channel7);
  ledcAttachPin(Servo_8, PWM_Channel8);
  ledcAttachPin(Servo_9, PWM_Channel9);
}

void colorRGB(byte valRed,byte valGreen,byte valBlue)
{
  ledcWrite(PWM_Channel0, valRed);
  ledcWrite(PWM_Channel1,valGreen);
  ledcWrite(PWM_Channel2, valBlue); 
}

void head_End()
{
  int vertical = map(100, 0, 180, 10, 35);
  int horizontal = map(84, 0, 180, 10, 35);
  ledcWrite(PWM_Channel0,vertical);
  ledcWrite(PWM_Channel1,horizontal);
}

void head_Move(int angle_h,int angle_v)
{
  int h = map(angle_h, 0, 180, 10, 35);
  int v = map(angle_v, 0, 180, 10, 35);
  ledcWrite(PWM_Channel0,h);
  ledcWrite(PWM_Channel1,v);
}

void boxes(int angle1,int angle2)
{
  int box1 = map(angle1, 0, 180, 10, 35);
  int box2 = map(angle2, 0, 180, 10, 35);
  ledcWrite(PWM_Channel8,box1);
  ledcWrite(PWM_Channel9,box2);
}

void loop()
{  
  boxes(0,160);
  delay(1000);
  boxes(160,0);
  delay(1000);
}

额外注意事项

  • 确认引脚2、4是否支持绑定到LEDC通道8、9:不同ESP32开发板的引脚功能映射可能有差异,若修复后仍异常,需核对硬件手册确认引脚的LEDC通道兼容性。
  • 伺服电机的PWM信号范围:你当前用map(angle, 0, 180, 10, 35),8位分辨率下对应占空比约4%-13.7%,符合伺服电机标准的1ms-2ms脉冲(50Hz下周期20ms),这个配置是合理的。

内容的提问来源于stack exchange,提问作者אופק

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:40:28