PDM Inteligente Automotriz
Block Diagram
Project Specification
Power Budget and Design Notes
Firmware Starter
Ini
[env:esp32-s3-devkitc-1] platform = espressif32 board = esp32-s3-devkitc-1 framework = arduino lib_deps = milesburton/DallasTemperature build_flags = -DARDUINO_USB_CDC_ON_BOOT=1
Table
| Función | GPIO |
|---|---|
| PWM CH1..CH5 | 12,13,14,15,16 |
| ADC corriente CH1..CH5 | 1,2,4,5,6 |
| PC814 IN1..IN5 | 7,8,9,10,11 |
| Manual SW1..SW5 | 17,18,21,47,48 |
| DS18B20 | 43 |
| USB D-/D+ | 19/20 |
src/main.cppCpp
#include <Arduino.h> #include <OneWire.h> #include <DallasTemperature.h> constexpr uint8_t PWM[5]={12,13,14,15,16}; constexpr uint8_t ADCI[5]={1,2,4,5,6}; constexpr uint8_t ISO[5]={7,8,9,10,11}; constexpr uint8_t MAN[5]={17,18,21,47,48}; constexpr uint8_t ONEWIRE_PIN=43; constexpr float OC_A=45.0f; OneWire oneWire(ONEWIRE_PIN); DallasTemperature temps(&oneWire); float currentA(uint8_t ch){ float vadc=analogReadMilliVolts(ADCI[ch])/1000.0f; float vsensor=vadc*1.5f; // divisor 10k/20k: ADC=2/3 VIOUT return (vsensor-2.5f)/0.040f; // ACS770-050B: 40mV/A } void allOff(){ for(int i=0;i<5;i++) ledcWrite(i,0); } void setup(){ for(int i=0;i<5;i++){ pinMode(PWM[i],OUTPUT); digitalWrite(PWM[i],LOW); } for(int i=0;i<5;i++){ ledcSetup(i,20000,10); ledcAttachPin(PWM[i],i); ledcWrite(i,0); } for(int i=0;i<5;i++){ pinMode(ISO[i],INPUT_PULLUP); pinMode(MAN[i],INPUT_PULLUP); } analogReadResolution(12); temps.begin(); allOff(); } void loop(){ for(int i=0;i<5;i++) if(fabsf(currentA(i))>OC_A) ledcWrite(i,0); temps.requestTemperatures(); delay(20); }
PlatformIO
Asignación GPIO real
`src/main.cpp`
Secuencia segura