UNIVERSIDAD NACIONAL DE LA PATAGONIA SAN JUAN BOSCO

FACULTAD DE INGENIERÍA

Departamento de Electrónica

Comunicaciones 1 — 2026

Laboratorio Práctico: Sistema de Modulación por Pulsos Codificados (PCM) con Arduino

Muestreo • Cuantificación • Codificación • Nyquist • Aliasing

Guía de trabajo práctico para el alumno

Objetivos

  • Comprender las tres etapas fundamentales del PCM: Muestreo, Cuantificación y Codificación.
  • Verificar experimentalmente el Teorema de Muestreo de Nyquist-Shannon.
  • Implementar un sistema de transmisión digital y reconstrucción de la señal analógica usando Arduino.

Materiales

  • 1 placa Arduino Uno (o compatible).
  • 1 generador de funciones (o reproductor de audio con cable Jack 3.5 mm). Si no se dispone de generador, se puede usar un potenciómetro para la versión básica.
  • 1 protoboard y cables de conexión.
  • Componentes para filtro paso bajo: 1 resistencia de 10 kΩ y 1 capacitor de 0.1 µF (104).
  • Software Arduino IDE y software de análisis (Excel, MATLAB o Python).
  • Osciloscopio (opcional, pero altamente recomendado).

Descripción general

En este laboratorio se diseñará un sistema PCM básico. El Arduino actuará como el codificador: tomará muestras de una señal analógica, las cuantificará usando su Conversor Analógico-Digital (ADC) de 10 bits y las codificará. Posteriormente, se transmitirá esta información y se utilizará otro pin del Arduino (o un segundo Arduino) para demodular y reconstruir la señal analógica original mediante PWM y un filtro analógico.

Advertencia de Seguridad

⚠ Muy importante: El pin A0 del Arduino Uno tiene diodos de protección internos que se activan si el voltaje es menor a 0 V o mayor a 5 V. Si conectás una señal senoidal estándar de "1 Vpp" sin offset, el generador entrega una señal que va de +0.5 V a −0.5 V. Ese −0.5 V puede dañar el pin a largo plazo o generar lecturas erróneas (clipping en 0 V). Verificá siempre con un osciloscopio o multímetro que la señal esté completamente contenida entre 0 V y 5 V antes de conectarla al Arduino.

Configuración del Generador

Antes de empezar el procedimiento, configurá el generador de funciones (o el reproductor de audio) con estos valores. Son los que garantizan una señal segura para el Arduino y una demostración clara del Teorema de Nyquist.

ParámetroValor RecomendadoRazón
Forma de ondaSenoidal (Sine)Fácil de analizar en frecuencia y observar distorsión.
Frecuencia (f)50 Hz a 100 HzCon fs ≈ 1.5 kHz del código, da entre 15 y 30 muestras por ciclo, cumpliendo holgadamente Nyquist.
Amplitud (Vpp)2 Vpp a 3 VppDeja margen de seguridad para evitar recorte (clipping).
Offset DC2.5 V (¡CRUCIAL!)El Arduino NO tolera voltajes negativos. Centra la onda de forma segura.

Procedimiento

Paso 1 — Acondicionamiento de la señal

  • Generador/Audio: Conectá al pin A0. Asegurate que no supere 5V y tenga offset de 2.5V.
  • Potenciómetro (versión básica): Extremos a 5V y GND, terminal central al pin A0.

Paso 2 — Muestreo y cuantificación (ADC)

El Arduino Uno tiene un ADC de 10 bits, lo que significa que cuantifica la señal en L = 2¹ = 1024 niveles. Usamos micros() para obtener marcas de tiempo precisas.

unsigned long tiempoMuestra;
int valorCuantizado;

void setup() {
  Serial.begin(115200); // Alta velocidad para mayor tasa de muestreo
  // analogReference(DEFAULT); // 5V por defecto
}

void loop() {
  tiempoMuestra = micros(); // Timestamp en microsegundos
  
  // 1. Muestreo y Cuantificación
  valorCuantizado = analogRead(A0);
  
  // 2. Codificación (Envío CSV: Tiempo, Decimal, Binario)
  Serial.print(tiempoMuestra); Serial.print(",");
  Serial.print(valorCuantizado); Serial.print(",");
  Serial.println(valorCuantizado, BIN);
  
  // Control de Frecuencia de Muestreo (fs)
  delayMicroseconds(500); 
}

Paso 3 — Análisis de datos y Nyquist

Guardá los datos del Monitor Serial en un .csv y calculá:

  • Frecuencia de muestreo (fs): fs = 1 / Ts.
  • Bit Rate (Rb): Rb = fs × 10 bits/segundo.
  • Frecuencia máxima (fmax): la frecuencia de la senoidal del generador.
  • Análisis: ¿Se cumple fs ≥ 2 × fmax? ¿Qué ocurre si aumentás el delay a 5000? (Aliasing).

Paso 4 — Transmisión y demodulación

Circuito de reconstrucción:

  1. Conectá el pin digital 9 a una resistencia de 10 kΩ.
  2. Conectá el otro extremo de la resistencia a un capacitor de 0.1 µF a GND.
  3. La unión entre la resistencia y el capacitor es tu salida analógica reconstruida.
void setup() {
  pinMode(9, OUTPUT); // Pin PWM para reconstrucción
}

void loop() {
  int valorCuantizado = analogRead(A0); // Muestreo
  
  // El PWM de Arduino es de 8 bits (0-255). Mapeamos
  // los 10 bits (0-1023) a 8 bits. Esto introduce un pequeño
  // error de cuantificación adicional (ruido de cuantificación).
  int valorPWM = map(valorCuantizado, 0, 1023, 0, 255);
  
  analogWrite(9, valorPWM); // Reconstrucción DAC
  
  delayMicroseconds(500); // Mantener fs
}

Dinámica Didáctica

Se recomienda dividir la práctica en dos fases, cambiando únicamente la frecuencia del generador:

ParámetroFase 1: Muestreo CorrectoFase 2: Aliasing
Frecuencia generador100 Hz800 Hz – 1000 Hz
Amplitud / Offset2 Vpp, offset 2.5V2 Vpp, offset 2.5V
Frecuencia muestreodelay(500) → fs ≈ 1.5 kHzdelay(500) → fs ≈ 1.5 kHz
Condición NyquistSe cumple (1500 > 200)Se viola (1500 < 2000)
ResultadoSenoidal suave y fielSeñal fantasma distorsionada

Con esto los alumnos comprueban de forma visual y experimental por qué el filtro anti-aliasing y el Teorema de Nyquist son obligatorios en los sistemas PCM reales.

Conceptos Clave

  • Muestreo: Tomar valores de la señal continua en instantes discretos de tiempo.
  • Cuantificación: Mapear un rango amplio de valores a un rango finito (ADC 10 bits).
  • Codificación: Asignar un código binario a cada nivel cuantificado.
  • Teorema de Nyquist: fs debe ser ≥ 2 × fmax para reconstruir sin pérdida.
  • Ruido de cuantificación: Error de redondeo al digitalizar (≈ 4.88 mV en Arduino de 10 bits: 5V / 1024).

Extensiones (Nivel Avanzado)

  • Filtro digital (DSP): Implementar media móvil o IIR/FIR en Arduino antes de enviar el dato por serial.
  • Multiplexación (TDM): Transmitir dos señales analógicas por el mismo canal alternando muestras (Time Division Multiplexing).
  • Codificación de línea: Usar shiftOut para enviar los 10 bits en serie simulando SPI o NRZ.

Preguntas de Análisis

  1. ¿Cuál es la resolución en voltios de tu sistema PCM?
  2. ¿Qué sucede con la señal reconstruida si fs < 2 × fmax?
  3. ¿Por qué el PWM de 8 bits introduce ruido adicional en la reconstrucción?
  4. ¿Qué ventajas y desventajas tiene usar un filtro RC frente a un filtro digital?
  5. Calculá el Bit Rate si la frecuencia de muestreo es de 2000 Hz.