Saltar al contenido principal

Primeros pasos con la Serie Seeed Studio XIAO SAMD21

Seeed Studio XIAO SAMD21Seeed Studio XIAO SAMD21 Plus

Descripción general

El Seeed Studio XIAO SAMD21, que solía llamarse Seeeduino XIAO, es el primer lanzamiento de la familia Seeed Studio XIAO, una serie de potentes placas de desarrollo del tamaño de un pulgar compatibles con Arduino. Incorpora el potente ATSAMD21G18A-MU, que es un microcontrolador de bajo consumo. Por otro lado, esta pequeña placa tiene un buen rendimiento de procesamiento pero necesita menos energía. Está diseñada en un tamaño diminuto y puede utilizarse para dispositivos wearables y proyectos pequeños.

Seeed Studio XIAO SAMD21 tiene 14 pines, que pueden utilizarse para 11 interfaces digitales, 11 interfaces analógicas, 10 interfaces PWM (d1-d10), 1 pin de salida DAC D0, 1 interfaz de pad SWD, 1 interfaz I2C, 1 interfaz SPI, 1 interfaz UART, indicador de comunicación serie (T/R), luz de parpadeo (L) mediante multiplexación de pines. Los colores de los LED (Power, L, RX, TX) son verde, amarillo, azul y azul. Además, Seeed Studio XIAO SAMD21 tiene una interfaz Type-C que puede suministrar energía y descargar código. Hay dos botones de reinicio, puedes cortocircuitarlos para reiniciar la placa.

Impulsado por el procesador ARM Cortex-M0+ de 32 bits SAMD21G18A de Microchip, XIAO SAMD21 Plus aporta mayor flexibilidad y capacidad de expansión al diminuto y versátil XIAO SAMD21. Mientras mantiene todas las potentes funciones, incluida la compatibilidad con Arduino, MicroPython y PlatformIO, la variante Plus incorpora castelaciones rediseñadas y un diseño de pads en la parte posterior, ofreciendo 16 GPIO adicionales, gestión integrada de baterías de iones de litio, botones dedicados de Reset y Boot, y un LED RGB WS2812 programable a bordo. Es ideal para proyectos avanzados de IoT, wearables alimentados por batería, aplicaciones embebidas y diseños de SoM listos para producción.

Documentación

Hay dos documentos sobre el uso de Seeed Studio XIAO SAMD21 que se centran en diferentes áreas, consulta la siguiente tabla como referencia:

Documentación de SeeedDocumentación de Nanase
Diagrama de pinesInterfaz
Primeros pasos con Seeed Studio XIAO SAMD21Seeed Studio XIAO SAMD21 con tarjeta MicroSD (SPI)
Uso de GPIO en Seeed Studio XIAO SAMD21Seeed Studio XIAO SAMD21 con GPS (UART)
Recursos de Seeed Studio XIAO SAMD21IOBUS de ciclo único

Características

  • Potente MCU: procesador Microchip ATSAMD21G18A Arm® Cortex®-M0+ a 48 MHz, con 256 KB de Flash, 32 KB de SRAM y soporte USB nativo.
  • E/S ampliadas: XIAO SAMD21 Plus mantiene el diseño estándar de 14 pines de XIAO y añade 16 GPIO mediante castelaciones SMD de 1,27 mm en la parte posterior, con soporte para PWM, DAC, I2C, UART, SPI, I2S y SWD.
  • Gestión de energía integrada: admite conexión directa de batería de iones de litio, carga a bordo, protección contra retroceso e indicación del estado de carga.
  • Desarrollo flexible: compatible con Arduino IDE, PlatformIO, CircuitPython y TinyGo.
  • Compacto y listo para el ecosistema: mantiene el factor de forma XIAO de 21 × 17,8 mm compatible con protoboard, mientras adopta el diseño estandarizado de la parte posterior XIAO Plus para placas de expansión y diseños de portadoras personalizadas.

Especificaciones

Product NameSeeed Studio XIAO SAMD21Seeed Studio XIAO SAMD21 Plus
Chipset

Microchip SAMD21G18

ProcessorProcesador Arm® Cortex®-M0+ funcionando hasta 48 MHz
RAM32 KB SRAM
Flash256 KB Flash
Interface

Pin GPIO ×14
Pin digital ×11
Pin analógico ×11
DAC ×1
I2C ×1
UART ×1
SPI ×1

Pin GPIO ×30
Pin digital ×27
Pin analógico ×11
DAC ×1
I2C ×2
UART ×1
SPI ×1
I2S ×1

Onboard

LED de usuario ×1
LED de encendido ×1
LED de estado TX/RX ×2

LED de usuario ×1
Botón de reinicio ×1
Botón de arranque ×1

Battery ManagementNingunaPMIC a bordo
Power

Tensión de entrada (Type-C): 5 V
Entrada BAT: No compatible

Tensión de entrada (Type-C): 5 V
Entrada BAT: batería de iones de litio/LiPo de celda única de 3,7 V

BAT-to-3V3 Backflow ProtectionNo
Working Temperature-40°C a 85°C
Dimensions21 × 17,8 mm
Software Compatibility

Arduino, PlatformIO, MicroPython, CircuitPython, Zephyr y más

Descripción general del hardware

Parte frontal de XIAO SAMD21

Parte trasera de XIAO SAMD21

precaución

Para pines de E/S generales: La tensión de funcionamiento del MCU es de 3,3 V. Una tensión de entrada conectada a los pines de E/S generales puede causar daños al chip si es superior a 3,3 V.

Para pines de alimentación: El circuito convertidor DC-DC integrado capaz de convertir 5 V en 3,3 V permite alimentar el dispositivo con una fuente de 5 V a través de VIN-PIN y 5V-PIN.

Es fundamental entender que los pads VIN y GND en la parte posterior del XIAO SAMD21 no están diseñados para conectar directamente una batería, especialmente una batería recargable de litio (LiPo/Li-Ion). La placa carece del circuito esencial de gestión de batería necesario para un funcionamiento seguro. Estos pads son simplemente un punto de entrada de alimentación alternativo que evita el diodo de protección integrado de la placa. Si deseas alimentar tu proyecto con una batería, debes utilizar un módulo externo de gestión de batería dedicado que proporcione carga y protección, y luego conectar la salida regulada de ese módulo al pin de 5 V del XIAO.

Por favor, presta atención al uso, no levantes la cubierta de protección.

Mapa de pines

XIAO PinFunciónXIAO SAMD21XIAO SAMD21 PlusDescripción
5VVBUSVBUSVBUSEntrada/salida de alimentación USB de 5 V
GNDGNDGNDGNDTierra
3V33V3_OUT3V3_OUT3V3_OUTSalida de alimentación de 3,3 V
D0A0 / DACPA02PA02GPIO, ADC AIN0, salida DAC; sin PWM por hardware
D1A1PA04PA04GPIO, ADC AIN4
D2A2PA10PA10GPIO, ADC AIN18
D3A3PA11PA11GPIO, ADC AIN19
D4SDA0PA08PA08GPIO, ADC AIN16, datos I2C
D5SCL0PA09PA09GPIO, ADC AIN17, reloj I2C
D6TXPB08PB08GPIO, ADC AIN2, transmisión UART
D7RXPB09PB09GPIO, ADC AIN3, recepción UART
D8SCKPA07PA07GPIO, ADC AIN7, reloj SPI
D9MISOPA05PA05GPIO, ADC AIN5, datos de entrada SPI
D10MOSIPA06PA06GPIO, ADC AIN6, datos de salida SPI
D11TX_LEDPA19-LED TX interno en XIAO SAMD21; no definido en Plus
D12GPIOPA18 (RX_LED)PA28GPIO de expansión Plus
D13SCL1PA17 (USER_LED)PA17GPIO de expansión Plus y reloj I2C1
D14SDA1-PA16GPIO de expansión Plus y datos I2C1
D15GPIO-PA15GPIO de expansión Plus
D16GPIO-PA14GPIO de expansión Plus
D17GPIO-PA13GPIO de expansión Plus
D18GPIO-PA12GPIO de expansión Plus
D19I2S_SD-PA19GPIO de expansión Plus y datos I2S
D20I2S_SCK-PA20GPIO de expansión Plus y reloj I2S
D21I2S_WS-PA21GPIO de expansión Plus y selección de palabra I2S
D22GPIO-PB10GPIO de expansión Plus
D23GPIO-PB11GPIO de expansión Plus
D24GPIO-PB23GPIO de expansión Plus
D25GPIO-PA23GPIO de expansión Plus
D26GPIO-PB2GPIO de expansión Plus
D27GPIO-PA18GPIO de expansión Plus
VBAT_ENActivación de batería-PB2Control de alimentación de batería en Plus
AIN11_VBATLectura de voltaje-PB3Leer el voltaje de la batería en Plus
ResetRESETNRESETNRESETNEntrada de reinicio activa en bajo, pin 40 del encapsulado
TX_LEDLEDPA19-Indicador TX de la placa original, activo en bajo
RX_LEDLEDPA18-Indicador RX de la placa original, activo en bajo
USER_LEDLEDPA17-LED de usuario de la placa original, activo en bajo
POWER_LEDIndicador de alimentación3V3-LED verde de alimentación de la placa original; no es un GPIO del MCU
RGB_LEDDatos WS2812B-PA27Datos del LED RGB direccionable Plus
USER_BUTTONBotón-PB22Botón de usuario Plus, activo en bajo
VBAT_ENActivación ADC de batería-PB02Habilita la medición del voltaje de la batería
AIN11_VBATADC de batería-PB03 / AIN11Voltaje de batería a través de un divisor 1/2
CHARGE_LEDIndicador de carga--LED de carga controlado por hardware en Plus; no es un GPIO del MCU
SWDIODepuración SWDPA31PA31Datos de Serial Wire Debug
SWCLKDepuración SWDPA30PA30Reloj de Serial Wire Debug

Entrar en modo Bootloader

Para XIAO SAMD21

A veces el puerto de Seeed Studio XIAO SAMD21 puede desaparecer cuando falla el proceso de programación del usuario. Podemos resolver este problema mediante la siguiente operación:

  • Conecta el Seeed Studio XIAO SAMD21 a tu ordenador.
  • Usa pinzas o cables cortos para puentear los pines RST del diagrama dos veces.
  • Los LED naranjas parpadean y se encienden.

En este punto, el chip entra en modo Bootloader y el puerto de grabación vuelve a aparecer. Debido a que el chip samd21 tiene dos particiones, una es el Bootloader y la otra es el programa de usuario. El producto graba un código de bootloader en la memoria del sistema cuando sale de fábrica. Podemos cambiar de modo realizando los pasos anteriores.

pir

Para XIAO SAMD21 Plus

Conecta el XIAO SAMD21 Plus a tu ordenador. Pulsa el botón de Reset dos veces consecutivas para entrar en modo Bootloader.

Reset

Si quieres reiniciar el Seeed Studio XIAO SAMD21, realiza los siguientes pasos:

  • Conecta el Seeed Studio XIAO SAMD21 a tu ordenador.
  • Usa pinzas o cables cortos para puentear los pines RST solo una vez
  • Los LED naranjas parpadean y se encienden.

Ten en cuenta: El comportamiento del LED integrado es el inverso al de un Arduino. En el Seeed Studio XIAO SAMD21, el pin debe ponerse en bajo, mientras que en otros microcontroladores debe ponerse en alto.  

Interrupción

Todos los pines en Seeed Studio XIAO SAMD21 admiten interrupciones, pero hay dos pines que no se pueden usar al mismo tiempo: el pin 5 y el pin 7. Para más detalles sobre las interrupciones, consulta aquí.

Introducción

Hardware

Seeed Studio XIAO SAMD21Seeed Studio XIAO SAMD21 Plus

Materiales necesarios

  • Seeed Studio XIAO SAMD21 x1
  • Ordenador x1
  • Cable USB tipo C x1
tip

Algunos cables USB solo pueden suministrar energía y no pueden transferir datos. Si no tienes un cable USB o no sabes si tu cable USB puede transmitir datos, puedes consultar seeed USB type C support USB 3.1.

  • Paso 1. Prepara un Seeed Studio XIAO SAMD21 y un cable tipo C.

  • Paso 2. Conecta el Seeed Studio XIAO SAMD21 a tu ordenador. Entonces el LED de alimentación amarillo debería encenderse.

Software

nota

Si es la primera vez que utilizas Arduino, te recomendamos encarecidamente que consultes Getting Started with Arduino

  • Paso 1. Necesitas instalar un software de Arduino.

Inicia la aplicación de Arduino

Haz doble clic en la aplicación de Arduino (arduino.exe) que has descargado previamente.

nota

Si el software de Arduino se carga en un idioma diferente, puedes cambiarlo en el cuadro de diálogo de preferencias. Consulta la página Arduino Software (IDE) para más detalles.

  • Paso 2. Abre el ejemplo Blink

Abre el sketch de ejemplo de parpadeo del LED: File > Examples >01.Basics > Blink.

pir

  • Paso 3. Añade Seeeduino a tu Arduino IDE

Haz clic en File > Preference, y rellena Additional Boards Manager URLs con la siguiente URL:

https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

pir

Haz clic en Tools-> Board-> Boards Manager..., escribe la palabra clave "Seeed Studio XIAO SAMD21" en el cuadro de búsqueda. Aparecerá Seeed SAMD Boards. Instálalo.

pir

  • Paso 4. Selecciona tu placa y puerto

Después de instalar la placa, haz clic en Tools-> Board, busca Seeed Studio XIAO y selecciónala. Ahora ya has configurado la placa Seeed Studio XIAO SAMD21 para Arduino IDE.

pir

Selecciona el dispositivo serie de la placa Arduino en el menú Tools | Serial Port. Probablemente será COM3 o superior (COM1 y COM2 suelen estar reservados para puertos serie de hardware). Para averiguarlo, puedes desconectar tu placa Arduino y volver a abrir el menú; la entrada que desaparezca debería ser la placa Arduino. Vuelve a conectar la placa y selecciona ese puerto serie.

pir

  • Paso 5. Sube el programa

Ahora, simplemente haz clic en el botón Upload en el entorno. Espera unos segundos y, si la carga se realiza correctamente, aparecerá el mensaje "Done uploading." en la barra de estado.

pir

Unos segundos después de que finalice la carga, deberías ver que el LED del pin 13 (L) de la placa comienza a parpadear (en naranja). Si es así, ¡enhorabuena! Has puesto Arduino en funcionamiento. Si tienes problemas, consulta las sugerencias de resolución de problemas.

nota

The maximum flash size is 8 KB. For more information, refer to the ATSAMD21G18A-MU datasheet in the resources section.

En el XIAO SAMD21 Plus, el pin L (LED) se ha eliminado. Se ha sustituido por el RGB_LED, que se controla mediante el pin PA27.

‑ Cambia la placa de destino a XIAO M0 Plus.

pir

  • Instala la librería Adafruit_NeoPixel y actualízala a la última versión.

pir

‑ Sustituye el código por el fragmento siguiente. El pin de datos de RGB_LED es PA27 (PIN_NEOPIXEL). El pin de control de alimentación es D11 — por favor añade '#define NEOPIXEL_POWER 11' a tu sketch.

precaución

Los LED RGB pueden causar fatiga ocular o lesiones si se utilizan con un brillo excesivo; se recomienda una protección ocular adecuada.

#include <Adafruit_NeoPixel.h>
#define NEOPIXEL_POWER 11

#define NUMPIXELS 1

Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

void setup() {
pixels.begin();

pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, HIGH);

// Set overall brightness (0~255)
// Recommended eye-friendly range: 10~50
pixels.setBrightness(50);
}


void loop() {

pixels.clear();
pixels.setPixelColor(0, pixels.Color(15, 25, 205));
pixels.show();
delay(400);


pixels.clear();
pixels.setPixelColor(0, pixels.Color(103, 25, 205));
pixels.show();
delay(400);


pixels.clear();
pixels.setPixelColor(0, pixels.Color(233, 242, 205));
pixels.show();
delay(400);


pixels.clear();
pixels.setPixelColor(0, pixels.Color(233, 23, 23));
pixels.show();
delay(400);


pixels.clear();
pixels.setPixelColor(0, pixels.Color(12, 66, 101));
pixels.show();
delay(400);


pixels.clear();
pixels.show();
delay(500);
}

‑ Haz clic en Upload para flashear el programa. Una vez completado, el LED RGB se encenderá.

pir

nota

The maximum flash size is 8 KB. For more information, refer to the ATSAMD21G18A-MU datasheet in the resources section.

Multiplexación de pines

No necesitamos configurar los pines nosotros mismos, después de usar los pines, puedes llamar directamente a una función.

Entrada y salida digital

  • Usa el pin 6 como pin digital:
const int buttonPin = 6;     // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin

int buttonState = 0; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}

AnalogRead

  • Usa el pin 6 como pin analógico:


void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
}

void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for <sensorValue> milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for <sensorValue> milliseconds:
delay(sensorValue);
}

Serial

  • Usa el pin 6 como pin TX de UART (el pin RX de UART es el pin 7):

void setup() {
Serial1.begin(115200);
while (!Serial);
}

void loop() {
Serial1.println("Hello,World");
delay(1000);
}

I2C

  • Usa el pin 5 como pin SCL de IIC (el pin SDA de IIC es el pin 4):
// Wire Master Writer
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this

// Created 29 March 2006

// This example code is in the public domain.


#include <Wire.h>

void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
}

byte x = 0;

void loop()
{
Wire.beginTransmission(4); // transmit to device #4
Wire.write("x is "); // sends five bytes
Wire.write(x); // sends one byte
Wire.endTransmission(); // stop transmitting
x++;
delay(500);
}

SPI

  • Usa el pin 8 como pin SCK de SPI (el pin MISO de SPI es el pin 9, el pin MOSI de SPI es el pin 10):
#include <SPI.h>
const int CS = 7;
void setup (void) {
digitalWrite(CS, HIGH); // disable Slave Select
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8
}

void loop (void) {
char c;
digitalWrite(CS, LOW); // enable Slave Select
// send test string
for (const char * p = "Hello, world!\r" ; c = *p; p++) {
SPI.transfer (c);
}
digitalWrite(CS, HIGH); // disable Slave Select
delay(2000);
}

QTouch

Para saber cómo usar QTouch, proporcionamos un proyecto de ejemplo: How to Make a Fruit Piano on Seeed Studio XIAO SAMD21 ’s Q-Touch Function.

Entrada y salida analógica

Aunque todavía tiene "salidas analógicas" basadas en PWM, el SAMD21 también incorpora una salida analógica real en forma de un convertidor digital‑analógico (DAC). Este módulo puede producir una tensión analógica entre 0 y 3,3 V. Se puede utilizar para producir audio con un sonido más natural, o como una especie de "potenciómetro digital" para controlar dispositivos analógicos.

El DAC solo está disponible en el pin Arduino A0 y se controla usando analogWrite(A0, <value>). El DAC se puede configurar hasta una resolución de 10 bits (asegúrate de llamar a analogWriteResolution(10) en tu setup), lo que significa que los valores entre 0 y 1023 ajustarán la tensión a un valor entre 0 y 3,3 V.

Además del DAC, los canales ADC del SAMD21 también se diferencian del ATmega328: están equipados con una resolución de hasta 12 bits. Esto significa que los valores de entrada analógica pueden ir de 0 a 4095, representando una tensión entre 0 y 3,3 V. Para usar los ADC en modo de 12 bits, asegúrate de llamar a analogReadResolution(12) en tu setup.

Trazado serie del DAC

Aquí hay un ejemplo que demuestra tanto el DAC como el ADC. Para montar el experimento, conecta A0 a A1: aplicaremos una tensión analógica en A0 y luego la leeremos con A1. Es el circuito más sencillo que hemos puesto nunca en un tutorial:

nota

El Seeed Studio XIAO SAMD21 utiliza la placa de expansión Seeed Studio XIAO SAMD21

Este sketch produce una onda sinusoidal en la salida A0, con valores que van de 0 a 3,3 V. Luego usa A1 para leer esa salida con su ADC y convertirla en una tensión entre 0 y 3,3 V.

Por supuesto, puedes abrir el monitor serie para ver el flujo de valores de tensión. Pero si la onda sinusoidal es difícil de visualizar en forma de texto, prueba el nuevo Serial Plotter de Arduino, yendo a Tools > Serial Plotter.

Gracias a Aleksei Tertychnyi por enviar el código; todas las funcionalidades relacionadas fueron desarrolladas y aportadas por él.

#define DAC_PIN A0 // Make code a bit more legible
float x = 0; // Value to take the sin of
float increment = 0.02; // Value to increment x by each time
// Frequency of sine wave is about 1.37 Hz

void setup()
{
analogWriteResolution(10); // Set analog out resolution to max, 10-bits
analogReadResolution(12); // Set analog input resolution to max, 12-bits

Serial.begin(9600);
}

void loop()
{
// Generate a voltage value between 0 and 1023.
// Let's scale a sin wave between those values:
// Offset by 511.5, then multiply sin by 511.5.
int dacVoltage = (int)(511.5 + 511.5 * sin(x));
x += increment; // Increase value of x

// Generate a voltage between 0 and 3.3V.
// 0= 0V, 1023=3.3V, 512=1.65V, etc.
analogWrite(DAC_PIN, dacVoltage);

// Now read A1 (connected to A0), and convert that
// 12-bit ADC value to a voltage between 0 and 3.3.
float voltage = analogRead(A1) * 3.3 / 4096.0;
Serial.println(voltage); // Print the voltage.
delay(1); // Delay 1ms
}

Resultado

pir

Uso de la batería

nota

Solo el XIAO SAMD21 Plus incorpora un conector de batería BAT en su parte posterior, por favor tenlo en cuenta.

El XIAO SAMD21 Plus es capaz de usar una batería de litio de 3,7 V como entrada de alimentación. Puedes consultar el siguiente diagrama para ver el método de cableado.


precaución

Ten cuidado de no cortocircuitar los terminales positivo y negativo y quemar la batería y el equipo al soldar. Si la batería tiene carga, nunca la sueldes a la placa, ya que esto puede quemar la placa de circuito. Un cortocircuito mientras el circuito está alimentado supone un riesgo significativo; se recomienda usar un adaptador.

Ejemplo de lectura de tensión de la batería

Según el esquema, el SGM40567-4.2XG/TR proporciona carga para una batería de litio de una sola celda con una corriente de carga de aproximadamente 200 mA. El Charge_LED parpadea durante la carga.

La medición de la tensión de la batería está controlada por el interruptor de carga TPS22916CNYFPR a través de PB2/VBAT_EN, lo que reduce el consumo de energía en espera. La tensión de la batería se divide por dos y se mide a través del pin ADC PB3/AIN11_VBAT.


La tensión de la batería se mide utilizando un circuito divisor de resistencias. La tensión leída por el ADC es la mitad de la tensión real de la batería, por lo que el software debe multiplicar por 2 la medición del ADC para obtener la tensión real de la batería.

En el núcleo de Arduino, PB02 y PB03 se asignan a los números de pin 31 y 32, respectivamente. Defínelos de la siguiente manera:

// VBAT_EN on PB02
#define PIN_VBAT_EN (31u)

// AIN11_VBAT on PB03
#define PIN_VBAT_ADC (32u)
Ejemplo de lectura de batería
constexpr float ADC_VREF = 3.3f;
constexpr float ADC_MAX = 4095.0f;
constexpr float DIVIDER_RATIO = 2.0f; // R5 = R6 = 10 kΩ

float readBatteryVoltage() {
digitalWrite(PIN_VBAT_EN, HIGH);
delay(10);

analogRead(PIN_VBAT_ADC); // Discard a stale reading

uint32_t sum = 0;
constexpr int samples = 16;

for (int i = 0; i < samples; i++) {
sum += analogRead(PIN_VBAT_ADC);
delay(2);
}

digitalWrite(PIN_VBAT_EN, LOW);

float adcRaw = sum / static_cast<float>(samples);
float adcVoltage = adcRaw * ADC_VREF / ADC_MAX;

return adcVoltage * DIVIDER_RATIO;
}

void setup() {
Serial.begin(115200);

pinMode(PIN_VBAT_EN, OUTPUT);
digitalWrite(PIN_VBAT_EN, LOW);

analogReadResolution(12); // SAMD21 ADC: 0–4095
}

void loop() {
float batteryVoltage = readBatteryVoltage();

Serial.print("Battery: ");
Serial.print(batteryVoltage, 3);
Serial.println(" V");

delay(1000);
}

nota

Para aplicaciones de bajo consumo, desactiva BAT_EN después de completar la medición de la tensión de la batería para reducir el consumo de potencia en reposo causado por las resistencias del divisor de tensión.

  • El Charge_LED parpadea mientras la batería se está cargando.

  • Resultado de la medición de la tensión de la batería: la tensión medida de una batería de iones de litio puede diferir del valor nominal impreso en la batería. Consulta siempre el valor realmente medido.

La aplicación de ejemplo

Recursos

XIAO SAMD21

Diseño de hardware

Diseño mecánico

Software y herramientas

XIAO SAMD21 Plus

Diseño de hardware

Diseño mecánico

Recursos del curso

Soporte técnico y debate sobre el producto

Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.

Loading Comments...