From 85ea4e995a75abe061f6fc375ea0481084dddd43 Mon Sep 17 00:00:00 2001 From: schererleander Date: Tue, 20 Jan 2026 08:34:54 +0100 Subject: initial commit --- libraries/ESP32Servo/src/ESP32PWM.h | 150 ++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 libraries/ESP32Servo/src/ESP32PWM.h (limited to 'libraries/ESP32Servo/src/ESP32PWM.h') diff --git a/libraries/ESP32Servo/src/ESP32PWM.h b/libraries/ESP32Servo/src/ESP32PWM.h new file mode 100644 index 0000000..581a244 --- /dev/null +++ b/libraries/ESP32Servo/src/ESP32PWM.h @@ -0,0 +1,150 @@ +/* + * ESP32PWM.h + * + * Created on: Sep 22, 2018 + * Author: hephaestus + */ + +#ifndef LIBRARIES_ESP32SERVO_SRC_ESP32PWM_H_ +#define LIBRARIES_ESP32SERVO_SRC_ESP32PWM_H_ +#include "esp32-hal-ledc.h" +#if defined(ARDUINO) + #include "Arduino.h" +#endif + +#if defined(CONFIG_IDF_TARGET_ESP32C3) +#define NUM_PWM 6 +#elif defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) +#define NUM_PWM 8 +#else +#define NUM_PWM 16 +#endif + +#define PWM_BASE_INDEX 0 +#define USABLE_ESP32_PWM (NUM_PWM-PWM_BASE_INDEX) +#include + +class ESP32PWM { +private: + + void attach(int pin); + int pwmChannel = 0; // channel number for this servo + bool attachedState = false; + int pin; + uint8_t resolutionBits; + double myFreq; + int allocatenext(double freq); + + static double _ledcSetupTimerFreq(uint8_t pin, double freq, + uint8_t bit_num); + + bool checkFrequencyForSideEffects(double freq); + + void adjustFrequencyLocal(double freq, double dutyScaled); + static double mapf(double x, double in_min, double in_max, double out_min, + double out_max) { + if(x>in_max) + return out_max; + if(x=1 && pin <= 21) || //21 + (pin == 26) || //1 + (pin >= 33 && pin <= 42)) //10 +#elif defined(CONFIG_IDF_TARGET_ESP32S3) + if ((pin >=1 && pin <= 21) || //20 + (pin >= 35 && pin <= 45) || //11 + (pin == 47) || (pin == 48)) //2 +#elif defined(CONFIG_IDF_TARGET_ESP32C3) + if ((pin >=0 && pin <= 10) || //11 + (pin >= 18 && pin <= 21)) //4 +#elif defined(CONFIG_IDF_TARGET_ESP32C6) + if ((pin >=0 && pin <= 9) || //10 + (pin >= 12 && pin <= 23)) //12 +#elif defined(CONFIG_IDF_TARGET_ESP32H2) + if ((pin >=0 && pin <= 5) || //6 + (pin >= 8 && pin <= 14) || //7 + (pin >= 22 && pin <= 27)) //6 +#else + if ((pin == 2) || //1 + (pin == 4) || //1 + (pin == 5) || //1 + ((pin >= 12) && (pin <= 19)) || //8 + ((pin >= 21) && (pin <= 23)) || //3 + ((pin >= 25) && (pin <= 27)) || //3 + (pin == 32) || (pin == 33)) //2 +#endif + return true; + return false; + } + static int channelsRemaining() { + return NUM_PWM - PWMCount; + } + static boolean DISABLE_DAC; + + +}; + +ESP32PWM* pwmFactory(int pin); + +#endif /* LIBRARIES_ESP32SERVO_SRC_ESP32PWM_H_ */ -- cgit v1.3.1