Ruta de construcciónIntermedioUn fin de semana

Robot seguidor de línea con microcontrolador 8051

Un seguidor de línea funcional en un 8051 puro y comprensión profunda de cada capa que Arduino oculta: circuitos de reset, puertos cuasibidireccionales y PWM.

Esquema técnico de Robot seguidor de línea con microcontrolador 8051SENSOR ERROR

Casi todos los cursos de ingeniería que enseñan microcontroladores terminan con el mismo ejercicio: construir un seguidor de línea sobre un 8051. Es un buen ejercicio por una razón que normalmente no se dice: el chip no le da nada. No hay analogWrite() para fijar la velocidad de un motor, ni analogRead() para los sensores, ni biblioteca para la placa del driver. Cada capa a la que normalmente llamaría, la construye usted.

Esa es la diferencia entre este itinerario de construcción y el seguidor de línea con Arduino. El robot es el mismo; la profundidad no. Va a escribir el generador de modulación por ancho de pulso (PWM) que un Arduino tiene en silicio, aprender por qué un pin del 8051 enciende un LED solo si lo cablea al revés, y averiguar —antes de comprar nada— exactamente cuánto CPU le está costando su control de motores.

El 8051 es un microcontrolador de 8 bits de arquitectura Harvard en un encapsulado de 40 pines, normalmente un AT89S52 con 8 KB de flash y 256 bytes de RAM. No tiene periférico PWM, sus puertos son cuasibidireccionales (hay que escribir un 1 antes de leer una entrada), y sus pines drenan más corriente de la que sourcing es capaz — así que el LED va en el lado de sumidero y el puente en H del driver de motores (high-bridge) necesita pull-ups para ser manejado de forma fiable. Esos detalles suenan a notas al pie hasta que el robot no hace absolutamente nada porque EA está flotante o porque el circuito de reset es activo a nivel alto y usted lo puso a masa.

Empieza en una protoboard solo con el chip, un cristal de 11.0592 MHz y dos condensadores de carga, una red de reset y EA a nivel alto: el circuito mínimo que realmente ejecuta código. Los tres primeros tutoriales le llevan por la arquitectura y el mapa de memoria, la entrada/salida de uso general (GPIO) y el interfaz de puertos, y luego construir PWM a partir del Timer 0 en modo de autorrecarga de 8 bits: unos 460.8 Hz con pasos del 5 %, con un coste aproximado de un cuarto de la CPU, un intercambio que paga por no tener periférico.

A partir de ahí el camino converge con el seguidor de línea de Arduino: el mismo array de reflectancia IR (infrarrojo) colapsado en un error ponderado, el mismo control PID (Proporcional-Integral-Derivativo), y el mismo simulador en el navegador donde encuentra ganancias que toman las curvas con limpieza. El árbol tecnológico mantiene separados los nodos de hardware y de concepto, así que la primera mitad no necesita más que el chip y un programador ISP (programación en sistema) como un USBasp, y solo los dos últimos nodos de construcción necesitan el chasis, los motores y el array.

Recorra el árbol tecnológico de abajo en orden. Los tres primeros nodos no necesitan más que el chip en una protoboard, las ganancias del seguimiento de línea se ajustan en el simulador del navegador, y solo los dos últimos pasos necesitan el chasis y los motores. Su progreso se guarda en este dispositivo.

Lista de materiales

Componente Cant. Coste aprox. Notas
AT89S52 DIP de 40 pines 1 $2 Programable en sistema. Un AT89C51 necesita un programador paralelo que usted no tiene
Programador ISP USBasp 1 $3 El AT89S52 se programa por SPI, y esto es lo que lo hace viable
Cristal de 11.0592 MHz 1 $0.50 No 12 MHz. Vea abajo: esto no es una preferencia
Condensadores cerámicos de 33 pF 2 $0.20 Condensadores de carga del cristal
Condensador electrolítico de 10 µF + resistencia de 10 kΩ 1 de cada $0.20 La red de reset. El reset aquí es activo a nivel ALTO
Red de resistencias de 10 kΩ 1 $0.50 Pull-ups del puerto 0: es de colector abierto y no puede sacar un nivel alto sin ellos
Zócalo ZIF o DIP de 40 pines 1 $1 No suelde nunca el chip directamente; lo va a quitar
Array de reflectancia IR 1 $5–10 Salida digital, o añada un ADC externo: el 8051 no tiene entrada analógica
L298N 1 $3
Motorreductor TT 2 $4
Chasis 2WD 1 $6–10
Pack de baterías 1 $6
Protoboard y jumpers — $5 Los tres primeros hitos ocurren íntegramente aquí

Total: aproximadamente $35–50.

Dos compras deciden si este proyecto es agradable o miserable.

El cristal debe ser de 11.0592 MHz. El 8051 deriva su velocidad en baudios del desbordamiento del Timer 1, y a 11.0592 MHz toda velocidad estándar sale como un valor de recarga entero: 9600 baudios es exactamente TH1 = 0xFD. Un cristal de 12 MHz da 10417 baudios frente a un objetivo de 9600, un error del 8.5 %, muy por encima del ~3 % que tolera una UART. Cada carácter llega corrupto. El chip funciona perfectamente hasta el momento en que intenta imprimir algo para depurar, que es el peor momento posible para descubrirlo.

El array de sensores debe tener salidas digitales, o debe añadir un ADC externo como un ADS7828 o un ADC0808. El 8051 no tiene entrada analógica en absoluto. Esta es la primera cosa que el chip le quita y que un Arduino le da gratis, y vale la pena decidirlo a conciencia: las salidas de comparador son más simples pero le cuestan la señal de error proporcional suave que hace que el ajuste de PID funcione bien.

El circuito mínimo

Antes de cualquier sensor o motor, consiga que el chip desnudo ejecute código en una protoboard. Seis conexiones:

Pin Conectar a Por qué
40 (VCC) +5 V
20 (GND) Masa
31 (EA) +5 V Selecciona la memoria de programa interna. Flotante o a masa, el chip busca en memoria externa que no está y no hace nada en absoluto
18, 19 (XTAL2, XTAL1) A través del cristal Con un condensador de 33 pF de cada pata a masa
9 (RST) 10 µF a +5 V, 10 kΩ a masa El reset es activo a nivel ALTO aquí, a diferencia de casi cualquier otro microcontrolador

EA flotante es el motivo número uno de que una primera placa con un 8051 parezca muerta, y no produce ningún error, ninguna luz y ninguna pista. Compruébelo primero, siempre.

Un LED en P1.0 es el «hola mundo»: cablee el cátodo al pin, el ánodo a través de una resistencia de 330 Ω a +5 V, y escriba 0 para encenderlo. El pin drena unos 10 mA y en modo fuente da unos 60 microamperios, así que cableado al revés brilla tenuemente y parece un fallo.

Construir por hitos

Los tres primeros solo necesitan el chip en una protoboard, lo que significa que puede llevar usted mucho camino dentro de este proyecto antes de comprar un chasis.

# Hito La prueba Un aprobado se ve así
1 El chip funciona Haga parpadear un LED en P1.0 Parpadea. Si no, compruebe EA antes que nada
2 Tiempos verificados Parpadee a exactamente 1 Hz con un retardo contado Un cronómetro sobre 60 parpadeos coincide dentro de un segundo
3 El serie funciona Imprima un contador a 9600 baudios Texto limpio: basura significa el cristal equivocado
4 Entrada GPIO Lea un pulsador en P1.1 con el pull-up Lee de forma fiable. Recuerde escribir 1 antes de leer
5 Interrupción de timer Commute un pin desde una ISR del Timer 0, con osciloscopio o cronometrándola El periodo es el que calculó, y es estable
6 PWM por software Motive un LED al 0 %, 25 %, 50 % y 100 % de ciclo de trabajo Brillos visiblemente distintos, sin parpadeo
7 Coste del PWM medido Commute un pin libre en el bucle principal y cronometre Puede decir qué fracción de la CPU consume la ISR
8 Motores manejados Ambas ruedas adelante y atrás al ciclo de trabajo comandado Ambas direcciones, ambas velocidades, sobre tacos
9 Sensores leídos Imprima todos los canales sobre línea y sobre suelo Cada canal distingue los dos
10 Señal de error Mueva el robot a mano cruzando la línea Una posición ponderada monótona, sin saltos
11 Seguimiento Corra sobre un óvalo pegado con cinta Completa las vueltas

El hito 7 es el que hace que este proyecto exista. El analogWrite de un Arduino no cuesta nada: el PWM se genera en silicio. Aquí lo construyó usted con una interrupción de timer, y se dispara decenas de miles de veces por segundo. Medir qué fracción de su CPU consume eso es la lección: típicamente es un cuarto del chip, y es justo lo que le compra un periférico PWM por hardware.

Cómo se ve un buen resultado

Medición Típico en esta construcción
Ciclo de máquina a 11.0592 MHz 1.085 µs: puede contar instrucciones y saber el tiempo
Frecuencia del PWM por software ~460 Hz con pasos del 5 %, desde el Timer 0 en autorrecarga de 8 bits
CPU consumida por la ISR del PWM ~25 %
Frecuencia del bucle principal restante Sigue cómodamente por encima de 200 Hz para el lazo de control
RAM usada Menos de 100 bytes de los 256: la restricción es real pero aquí no aprieta
Rendimiento del seguimiento Comparable al montaje con Arduino; el robot no es el punto

Esa última fila conviene decirla sin rodeos. Este robot no superará al seguidor de línea con Arduino. Es el mismo robot, construido por el camino difícil, y el retorno es comprensión y no rendimiento. Si quiere un mejor seguidor de línea, ajuste el de Arduino. Si quiere saber qué ha estado haciendo analogWrite por usted, construya este.

Resolución de problemas

Síntoma Causa probable Arreglo
El chip no hace absolutamente nada EA flotante o a masa Una el pin 31 a +5 V
Sigue sin hacer nada, con EA en alto El cristal no oscila Compruebe los condensadores de 33 pF y las soldaduras del cristal
Se reinicia continuamente RST mantenido en alto El reset es activo a nivel ALTO: compruebe la red de 10 µF / 10 kΩ
El serie imprime basura Cristal de 12 MHz 11.0592 MHz, o acepto no tener depuración por serie
El LED brilla muy tenuemente Cableado en modo fuente (sourcing) Cátodo al pin; escriba 0 para encenderlo
El puerto 0 no lee ni escribe nada Colector abierto, sin pull-ups 10 kΩ de cada pin a +5 V
El periodo del PWM tiembla Recarga del timer tarde en la ISR Recargue como la primera sentencia, o use el modo 2
El programa vuelve a una dirección aleatoria La pila se solapa con el banco de registros 1 SP = 0x30; al principio de main()
Se comporta de forma errática al crecer el código RAM agotada 256 bytes en total: compruebe el mapa del enlazador
El programador no ve el chip Pines ISP ocupados, o sin control del reset Libere P1.5–P1.7 y RST mientras programa
Los sensores no dan ningún valor útil Array analógico en un chip sin ADC Array con salida digital, o añada un ADC externo

Hacia dónde llevarlo después

Añada un segundo timer y mida su propio bucle. Con el Timer 0 generando el PWM, el Timer 1 puede contar el periodo de su bucle de control, lo que convierte «se siente responsivo» en un número. En un chip donde puede contar ciclos de máquina, ese número es exactamente predecible: verifique su predicción.

Interfaz de una LCD por el puerto 0 y se topa de verdad con el problema del colector abierto, más con los requisitos de temporización de un dispositivo que es genuinamente más lento que el procesador.

Y después construya la versión con Arduino, y fíjese en lo que ahora entiende de cada línea. El analogWrite que usted escribe en una línea es la ISR en la que invirtió una tarde aquí; el analogRead es el ADC que tuvo que añadir por fuera. Esa comparación es la verdadera entrega de este proyecto.

Hoja de ruta del proyecto

La ruta de construcción

Sigue el árbol tecnológico desde las piezas hasta un robot que funciona. Cada nodo se desbloquea cuando completas sus requisitos previos, y tu progreso se guarda en este dispositivo.

0 / 17 completados

100%
Componente

Puesta en marcha del microcontrolador

Componente

Ver componente
Componente

Matriz de sensores ópticos reflectivos

Componente

Ver componente
Componente

Controlador de potencia para motores

Componente

Ver componente
Tutorial

Lectura y ponderación de la matriz IR

20 min

Abrir tutorial
Componente

Alimentación eléctrica desacoplada

Componente

Ver componente
Tutorial

Fundamentos de modulación PWM y puente en H

18 min

Abrir tutorial
Ruta de aprendizaje

Ruta completa de control de motores

Ruta de aprendizaje

Abrir ruta
Tutorial

Generación de PWM por software mediante temporizador

35 min

Abrir tutorial
Tutorial

El lazo de control de seguimiento de línea

25 min

Abrir tutorial
Montaje

Cableado e integración eléctrica

60 min

Simulador

Sintonización interactiva en el simulador

Interactivo

Abrir simulador
Montaje

Grabado de firmware y ensayo en pista

60 min

Objetivo

Seguidor de línea con 8051 concluido

Proyecto completado

Componentes

Tutoriales de esta ruta

Practica antes de cablear

Ajústalo en el simulador en vivo

La ruta de construcción pasa por un laboratorio en el navegador. Consigue aquí el comportamiento correcto y luego traslada tus ajustes al robot real.

Preguntas frecuentes

¿Por qué construir un seguidor de línea con 8051 en lugar de usar Arduino?

Porque el microcontrolador 8051 le obliga a programar y construir lo que Arduino oculta bajo librerías. Al carecer de analogWrite(), debe implementar el generador PWM por software en interrupciones; al no haber pinMode(), debe comprender el funcionamiento de los puertos cuasibidireccionales y colectores abiertos. Si el único objetivo es tener un robot funcional rápido, use Arduino. Si el objetivo es asimilar la arquitectura de computadores y el control de bajo nivel, el 8051 enseña infinitamente más.

¿Qué componentes son indispensables para construir este proyecto?

Un microcontrolador AT89S52 con su cristal de cuarzo y circuito de reset, una matriz de fotosensores infrarrojos con salidas digitales, un puente en H (como el L298N o L293D), dos motorreductores TT con chasis de 2 ruedas motrices más rueda loca, y un conjunto de baterías que aísle la lógica de los motores. Para programarlo se precisa un grabador ISP compatible, como el económico programador USBasp.

¿Cómo se regula la velocidad de los motores sin periférico PWM por hardware?

Generando la modulación PWM íntegramente por software mediante el Timer 0 en modo 2 (autorrecarga de 8 bits). El temporizador dispara una interrupción periódica que incrementa un contador y conmuta a nivel alto los pines de salida durante una fracción N del periodo. Con un cristal de 11.0592 MHz se logra una frecuencia de 460.8 Hz con resolución de paso del 5 %, consumiendo aproximadamente un 25 % del tiempo de CPU.

¿Es obligatorio programar en ensamblador o se puede emplear lenguaje C?

Se puede utilizar lenguaje C perfectamente, siendo el estándar en docencia universitaria e industrial. Compiladores como Keil C51 o el compilador libre SDCC son las opciones de referencia. Leer y comprender código en ensamblador para el 8051 resulta muy formativo debido a su repertorio conciso y tiempos de ciclo estrictos, pero todo el firmware del robot puede estructurarse en C.

¿Por qué el microcontrolador no ejecuta nada tras grabarlo?

Compruebe de inmediato que el pin 31 (EA/VPP) esté conectado rígidamente a +5 V. Si se deja flotando o a tierra, el microcontrolador asume que debe ejecutar código desde una memoria ROM externa inexistente y no ejecuta instrucción alguna sin reportar error. Tras ello, revise la polaridad del circuito de reset (que en la familia 8051 es activo a nivel alto, al contrario que en la mayoría de microcontroladores modernos) y los condensadores de carga del cristal.

¿Es necesario adquirir los componentes físicos antes de comenzar?

No. El algoritmo de seguimiento y la calibración de ganancias se exploran en el simulador interactivo web, y las lecciones de arquitectura e interrupciones se estudian analíticamente. Puede comenzar en el simulador y adquirir la placa, los sensores y el chasis cuando vaya a ensamblar el montaje físico.