first commit

This commit is contained in:
Alejandro Guerrero 2026-09-27 17:21:39 +02:00
commit e6a42e28e9
4355 changed files with 4626605 additions and 0 deletions

View file

@ -0,0 +1,75 @@
/*
* AllOutputsSimultaneous
*
* This example demonstrates driving all 20 available PWM outputs simultaneously
* on the ESP32 S3 using a mix of MCPWM and LEDC hardware.
*
* The ESP32 S3 supports 20 PWM channels:
* - 8 LEDC channels (shared timers)
* - 12 MCPWM channels (6 timers × 2 operators each for shared frequency)
*
* This example uses:
* - 12 ESP32PWM objects with default settings (MCPWM, shared frequency)
* - 8 ESP32PWM objects with variable frequency (LEDC channels)
*
* Circuit:
* Connect servo motors or LEDs to the PWM pins listed below.
* Ensure adequate power supply for servos (ESP32 3.3V may not be sufficient).
*/
#include <ESP32PWM.h>
// ESP32 S3 PWM pins: 1-21, 35-45, 47-48
// We'll use 20 pins from the available ones
int pwmPins20[20] = {
1, 2, 3, 4, 5, 6, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, // 15 pins
37, 38, 39 // 5 more = 20 total
};
ESP32PWM* pwms[20]; // Array of 20 PWM objects
int duty = 0; // Current duty cycle (0-255 for 8-bit resolution)
int increment = 1; // Duty increment
void setup() {
Serial.begin(115200);
Serial.println("Setting up 20 simultaneous PWM outputs...");
// Allocate all LEDC timers for maximum LEDC channels
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
// Create first 12 PWM objects with default settings (MCPWM, shared frequency)
// These will share timers and thus frequencies
for (int i = 0; i < 20; i++) {
pwms[i] = new ESP32PWM(false); // false = shared frequency
pwms[i]->attachPin(pwmPins20[i], 50, 10); // 50Hz, 10-bit resolution
if (pwms[i]->attached()) {
Serial.printf("Attached PWM %d to pin %d (MCPWM shared)\n", i, pwmPins20[i]);
} else {
Serial.printf("Failed to attach PWM %d to pin %d\n", i, pwmPins20[i]);
}
}
Serial.printf("Total PWM channels remaining: %d\n", ESP32PWM::channelsRemaining());
Serial.println("Setup complete. Starting simultaneous PWM sweep...");
}
void loop() {
// Set all PWM outputs to the same duty cycle for simultaneous control
for (int i = 0; i < 20; i++) {
pwms[i]->writeScaled((float)duty / 255.0); // Convert to 0.0-1.0 range
}
Serial.printf("All PWM outputs set to duty cycle: %d/255\n", duty);
// Update duty cycle
duty += increment;
if (duty >= 255 || duty <= 0) {
increment = -increment; // Reverse direction at limits
}
delay(10); // Small delay for visible changes
}