Diseño de PCB para Medición de Vibraciones

Ya tengo el pinout. Voy a convertir el diseño a una placa portadora thru-hole: reemplazaré el ADXL355 SMD por dos headers P1/P2, retiraré capacitores externos, quitaré el regulador SMD si no hay equivalente thru-hole seguro en el proyecto, y reubicaré los módulos hacia el centro.
Entendido. Ya quedó identificado el pinout de tu módulo ADXL355Z thru-hole:
  • P1: VDD, VDDIO, GND, INT1, INT2, DRDY
  • P2: V1P8ANA, V1P8DIG, MISO/SDA, CS/SCL, SCLK/VSSIO, MOSI/SDA
Estado actual del proyecto antes de quedarme sin créditos:
  • El diseño anterior ya tenía esquema, placement y ruteo completado para la versión con ADXL355 SMD.
  • La revisión final de esa versión quedó sin errores ni advertencias antes de que pidieras el cambio.
  • Empecé a preparar el cambio a versión thru-hole, pero no pude ejecutar las modificaciones finales.
Pendiente por hacer:
  1. Reemplazar el ADXL355 SMD por dos headers thru-hole P1/P2 según tu pinout.
  2. Quitar los capacitores externos del carrier, asumiendo que tu módulo ADXL355Z ya incluye sus capacitores locales.
  3. Cambiar resistencias a thru-hole.
  4. Revisar si el regulador actual debe reemplazarse por una solución thru-hole o si usarás alimentación externa regulada.
  5. Reubicar todos los componentes más hacia el centro, lejos de las orillas.
  6. Rehacer ruteo y correr revisión final.
Replace sensor headers
Keep regulator
Remove regulator
Run ERC/DRC
Center components

Refine this doc
Ask about this doc
Firmware Starter — XIAO ESP32S3 Vibration Node
Platform
  • Framework: Arduino / PlatformIO
  • Board: Seeed XIAO ESP32S3
Pin Mapping

Table


FunctionXIAO GPIONetPeripheral
SPI SCLK7SPI_SCLK_ADXLADXL355 SCLK
SPI MISO8SPI_MISO_ADXLADXL355 MISO
SPI MOSI9SPI_MOSI_ADXLADXL355 MOSI
SPI CS4SPI_CS_ADXLADXL355 CS
Data ready3ADXL_DRDYADXL355 DRDY
Interrupt 11ADXL_INT1ADXL355 INT1
I2C SDA5I2C_SDA_OLEDOLED SDA
I2C SCL6I2C_SCL_OLEDOLED SCL
platformio.ini

Ini


[env:seeed_xiao_esp32s3]
platform = espressif32
board = seeed_xiao_esp32s3
framework = arduino
monitor_speed = 115200
lib_deps =
  adafruit/Adafruit GFX Library
  adafruit/Adafruit SSD1306
src/main.cpp

Cpp


#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define ADXL_SCLK_PIN 7
#define ADXL_MISO_PIN 8
#define ADXL_MOSI_PIN 9
#define ADXL_CS_PIN   4
#define ADXL_DRDY_PIN 3
#define ADXL_INT1_PIN 1
#define OLED_SDA_PIN  5
#define OLED_SCL_PIN  6

#define OLED_WIDTH 128
#define OLED_HEIGHT 64
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT, &Wire, -1);
SPIClass adxlSPI(FSPI);

static const uint32_t ADXL_SPI_HZ = 1000000;

uint8_t adxlReadReg(uint8_t reg) {
  uint8_t cmd = (reg << 1) | 0x01;
  digitalWrite(ADXL_CS_PIN, LOW);
  adxlSPI.beginTransaction(SPISettings(ADXL_SPI_HZ, MSBFIRST, SPI_MODE0));
  adxlSPI.transfer(cmd);
  uint8_t value = adxlSPI.transfer(0x00);
  adxlSPI.endTransaction();
  digitalWrite(ADXL_CS_PIN, HIGH);
  return value;
}

void adxlWriteReg(uint8_t reg, uint8_t value) {
  uint8_t cmd = (reg << 1) & 0xFE;
  digitalWrite(ADXL_CS_PIN, LOW);
  adxlSPI.beginTransaction(SPISettings(ADXL_SPI_HZ, MSBFIRST, SPI_MODE0));
  adxlSPI.transfer(cmd);
  adxlSPI.transfer(value);
  adxlSPI.endTransaction();
  digitalWrite(ADXL_CS_PIN, HIGH);
}

int32_t signExtend20(uint32_t raw) {
  raw >>= 4;
  if (raw & 0x80000) raw |= 0xFFF00000;
  return (int32_t)raw;
}

void readAdxlRaw(int32_t &x, int32_t &y, int32_t &z) {
  digitalWrite(ADXL_CS_PIN, LOW);
  adxlSPI.beginTransaction(SPISettings(ADXL_SPI_HZ, MSBFIRST, SPI_MODE0));
  adxlSPI.transfer((0x08 << 1) | 0x01); // XDATA3 read address
  uint8_t b[9];
  for (int i = 0; i < 9; i++) b[i] = adxlSPI.transfer(0x00);
  adxlSPI.endTransaction();
  digitalWrite(ADXL_CS_PIN, HIGH);
  x = signExtend20(((uint32_t)b[0] << 16) | ((uint32_t)b[1] << 8) | b[2]);
  y = signExtend20(((uint32_t)b[3] << 16) | ((uint32_t)b[4] << 8) | b[5]);
  z = signExtend20(((uint32_t)b[6] << 16) | ((uint32_t)b[7] << 8) | b[8]);
}

void setup() {
  Serial.begin(115200);
  delay(200);
  pinMode(ADXL_CS_PIN, OUTPUT);
  digitalWrite(ADXL_CS_PIN, HIGH);
  pinMode(ADXL_DRDY_PIN, INPUT);
  pinMode(ADXL_INT1_PIN, INPUT);
  adxlSPI.begin(ADXL_SCLK_PIN, ADXL_MISO_PIN, ADXL_MOSI_PIN, ADXL_CS_PIN);
  Wire.begin(OLED_SDA_PIN, OLED_SCL_PIN);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("ADXL355 start");
  display.display();
  // Put ADXL355 into measurement mode: POWER_CTL register 0x2D, clear standby bit.
  adxlWriteReg(0x2D, 0x00);
}

void loop() {
  static uint32_t last = 0;
  if (millis() - last >= 50) {
    last = millis();
    int32_t x, y, z;
    readAdxlRaw(x, y, z);
    Serial.printf("X:%ld Y:%ld Z:%ld\n", x, y, z);
    display.clearDisplay();
    display.setCursor(0, 0);
    display.println("ADXL355 raw");
    display.printf("X %ld\nY %ld\nZ %ld\n", x, y, z);
    display.display();
  }
}
Build
  • pio run
  • pio run -t upload
  • pio device monitor
  • Platform

  • Pin Mapping

  • platformio.ini

  • src/main.cpp

  • Build

Assets

Assets are files uploaded to this project which can be used in various ways.

USB-C WiFi BLE T-RH Sensor Node thumbnail
USB-C powered low-power environmental sensor node with ESP32-class Wi-Fi/BLE, digital temperature/humidity sensing, USB-C 5V sink input, and protected 3.3V power rail.

Properties

V

Pricing & Availability

Distributor

Qty 1

Arrow

$48.14–$54.25

Digi-Key

$80.32–$80.56

HQonline

$0.15

LCSC

$72.93–$72.99

Mouser

$69.71

TME

$0.32

Verical

$47.73–$55.41

Controls