🛠 Lire un potentiomètre avec l'ADC 12 bits
Objetivos
Configurar y leer una entrada analógica: el GD32F103C8 incorpora ADC SAR de 12 bits de hasta 1 MSPS (atención: ADC2 no está presente en las variantes C4/C6/C8/CB) y la frecuencia de reloj del ADC nunca debe superar los 14 MHz. Con el núcleo CommunityGD32Cores, analogRead devuelve nativamente un valor de 12 bits (0-4095), más preciso que los 10 bits de un Arduino clásico. Vas a convertir la posición de un potenciómetro en milivoltios.
Material
- Tarjeta GD32F103C8T6 / CBT6 compatible Blue Pill
- Potenciómetro de 10 kΩ: un extremo a 3,3 V, el otro a masa, el cursor al pin de medición
- Pin de medición: PA1 (entrada analógica de tipo ADC0/ADC1_IN1) >
- Convertidor USB-serie de 3,3 V en USART0 (PA9/PA10) para la consola, como en el tutorial de consola
- Nunca más de 3,3 V en un pin de entrada analógica (VDD máx. 3,6 V)
Código completo
// adc_pot.ino — GD32F103C8, core CommunityGD32Cores
const uint8_t POT_PIN = PA1; // entrée analogique (canal IN1) >
void setup {
Serial.begin(115200);
pinMode(POT_PIN, INPUT);
}
void loop {
uint16_t brut = analogRead(POT_PIN); // 12 bits : 0..4095
uint16_t mv = (uint32_t)brut * 3300UL / 4096UL;
Serial.print("ADC = ");
Serial.print(brut);
Serial.print(" -> ");
Serial.print(mv);
Serial.println(" mV");
delay(100);
}
Verificación esperada
Al girar el potenciómetro, el valor sigue la posición desde aproximadamente 0 (cursor hacia masa) hasta 4095 / aproximadamente 3300 mV (cursor hacia 3,3 V). En reposo, con el dedo sobre el cursor, el valor puede variar: es normal, una entrada no pilotada capta ruido. La conversión es estable cuando sueltas el botón.
Errores frecuentes
- Valor que fluctúa ±50: fuente con impedancia demasiado alta (potenciómetro de 100 kΩ) o masa de medición flotante; 10 kΩ es un buen compromiso, y un pequeño condensador de 100 nF entre cursor y masa filtra.
- Esperar 0-1023: el núcleo GD32 trabaja en 12 bits; un código portado desde Arduino AVR que divide entre 1023 da milivoltios erróneos por un factor de 4.
- Superar 3,3 V: alimentar el potenciómetro con 5 V envía 5 V a la entrada, fuera del rango especificado de 2,6-3,6 V; riesgo de bloqueo o daño.
- Buscar ADC2: no está presente en las variantes C4/C6/C8/CB; cualquier código ST que muestree en ADC2 no funcionará en tu C8T6.
- Reloj ADC > 14 MHz: en SPL, si configuras el ADC tú mismo, elige un divisor de APB2 adecuado (la hoja de datos limita la frecuencia de reloj del ADC a 14 MHz), de lo contrario las conversiones serán falsas o inestables.
- Sonda de temperatura interna: el canal ADC_IN16 es el sensor de temperatura interno; no lo conectes a un pin externo. >
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinopotentiometre.inoArduinopont-uart.inoArduinooled-i2c.inoArduino