Hardware
Índice
- Microcontrolador
- Sensores Infrarrojos
- Encoders Magnéticos
- Giroscopio
- Motores y Tracción
- Alimentación
- Chasis y PCB
- Versiones del Robot
- Pinout y Periféricos
Microcontrolador
| Característica |
Detalle |
| Modelo |
STM32F405RGT6 |
| Arquitectura |
ARM Cortex-M4F (FPU) |
| Frecuencia |
168 MHz |
| Flash |
1 MB |
| RAM |
192 KB |
| Framework |
LibOpenCM3 |
| Entorno |
PlatformIO + VSCode |
El STM32F405RGT6 proporciona:
- Timers: TIM3 y TIM4 para lectura de encoders en modo contador. TIM2 y TIM5 generan PWM para motores (20 kHz).
- ADC: ADC2 para lectura de 4 sensores IR + 4 canales auxiliares (batería, corriente motores, botón menú).
- SPI: SPI3 para comunicación con el LSM6DSR.
- USART: USART3 para printf por puerto serie (115200 baud).
- DMA: Usado para lecturas ADC.
- GPIO: Control de emisores IR, LEDs, habilitación de motores, chip select SPI.
Sensores Infrarrojos
Componentes
| Componente |
Modelo |
Cantidad |
| Emisor IR |
SFH-4550 (GaAs, 860 nm, alta eficiencia) |
4 |
| Receptor IR |
ST-1KL3A (fototransistor, encapsulado negro) |
4 |
Disposición
| Sensor |
ID |
Canal ADC |
GPIO Emitter |
Función |
| Front Left |
SENSOR_FRONT_LEFT_WALL_ID (0) |
ADC_CHANNEL10 (PC0) |
PA0 |
Pared frontal izquierda |
| Front Right |
SENSOR_FRONT_RIGHT_WALL_ID (1) |
ADC_CHANNEL13 (PC3) |
PA3 |
Pared frontal derecha |
| Side Left |
SENSOR_SIDE_LEFT_WALL_ID (2) |
ADC_CHANNEL12 (PC2) |
PA2 |
Pared lateral izquierda |
| Side Right |
SENSOR_SIDE_RIGHT_WALL_ID (3) |
ADC_CHANNEL11 (PC1) |
PA1 |
Pared lateral derecha |
Principio de Funcionamiento
- Medición diferencial: Se mide
sensors_off (LED apagado, luz ambiental) y sensors_on (LED encendido). La señal útil = on - off.
- Ley física: La relación entre distancia y lectura sigue aproximadamente
reading ≈ k / distance².
- Secuencia: Solo se enciende un LED a la vez para evitar crosstalk óptico.
Encoders Magnéticos
| Característica |
Detalle |
| Modelo |
AS5145B-HSST |
| Resolución |
12 bits (4096 posiciones/revolución) |
| Interfaz |
Timer en modo contador (cuadratura por hardware) |
| Timer izquierda |
TIM4 |
| Timer derecha |
TIM3 |
| Micrómetros por tick |
10.494055 μm |
Conversión: μm = ticks × 10.494055. Derivado de (π × diámetro_rueda) / 4096.
Relación de engranajes:
- Piñón motor: 8T 0.5M
- Engranaje rueda: 40T 0.5M
- Engranaje encoder: 22T 0.5M (resina)
Giroscopio
| Característica |
Detalle |
| Modelo |
LSM6DSRTR |
| Interfaz |
SPI3 (PA15 = CS) |
| Rangos |
1000 / 2000 / 4000 dps |
| ODR |
1666 Hz |
| Filtro |
Paso-bajo LIGHT (~100 Hz en 1000 dps) |
| Block Data Update |
Habilitado |
El full-scale se cambia dinámicamente según la estrategia de velocidad (1000 dps en exploración, 2000 dps en carrera).
Motores y Tracción
| Componente |
Detalle |
| Motores |
2× Coreless 8520 7.4V (genéricos) |
| Driver |
MP6551 @ 20 kHz PWM |
| Ruedas |
Goma Kyosho K.MZW39-30 |
| Rodamientos ruedas |
4× MR63ZZ |
| Rodamientos encoders |
2× MR52ZZ |
| Imán encoders |
2× Radial 6×2.5mm |
| Ventilador |
Succión controlada por MOSFET AO3400 |
PWM y control
- Resolución PWM: 1024 niveles (10 bits)
- Frecuencia PWM motores: 20 kHz
- MOSFETs AO3400 (A09T) para conmutar emisores IR y ventilador
Alimentación
| Componente |
Detalle |
| Batería |
LiPo 2S 260mAh 35-70C Turnigy nano-tech |
| Regulador principal |
CN3903 (buck DC-DC) |
| LDO |
ME611C33M5G (3.3V para MCU y sensores) |
| Rango 2S |
7.4V (bajo) - 8.4V (alto) |
| Soporte 3S |
11.0V - 12.6V (requiere cambiar VOLT_DIV_FACTOR) |
Chasis y PCB
- Chasis: PCB principal con soportes de motores y ventilador en PLA
- Diseño PCB: KiCad (archivos en
pcb_files/)
- Piezas impresas: 11 archivos STL (soportes, engranajes, ruedas, ventilador)
Versiones del Robot
Existen 3 versiones del robot identificadas por el STM32 UID (Unique ID):
| Versión |
Enum |
Identificación |
| ZOROBOT3_A |
1 |
Primera revisión |
| ZOROBOT3_B |
2 |
Segunda revisión |
| ZOROBOT3_C |
3 |
Tercera revisión |
Cada versión tiene diferentes parámetros de calibración ABC para los sensores (ver Sensores).
La detección se realiza en handle_robot_version() leyendo UID_WORD0 del registro 0x1FFF7A10.
Pinout y Periféricos
ADC2 (Sensores + Auxiliares)
| Canal |
GPIO |
Función |
| CH10 |
PC0 |
Sensor Front Left |
| CH13 |
PC3 |
Sensor Front Right |
| CH12 |
PC2 |
Sensor Side Left |
| CH11 |
PC1 |
Sensor Side Right |
| CH4 |
PA4 |
Batería (AUX_BATTERY_ID) |
| CH14 |
PC4 |
Corriente motor izquierdo |
| CH15 |
PC5 |
Corriente motor derecho |
| CH8 |
PB0 |
Botón de menú (AUX_MENU_BTN_ID) |
SPI3 (Giroscopio)
| GPIO |
Función |
| PA15 |
CS (Chip Select) |
| PC10 |
SCK |
| PC11 |
MISO |
| PC12 |
MOSI |
USART3 (Debug)
| GPIO |
Función |
| PC6 |
TX |
| PC7 |
RX |
GPIO Control
| GPIO |
Función |
| PA0-PA3 |
Emisores IR (LED ON/OFF) |
| PB13 |
LED de estado |
| PB14 |
LED RGB (TIM12, CH1-3) |
| PA6-PA7, PC8-PC9, PB1-PB2, PA11-PA12, PB8-PB9 |
LEDs de información (10) |
| PB6-PB7 |
Botones de menú |
| PB15 |
Driver motores enable |
| PB10 |
Ventilador (PWM) |
Receptor IR
| Componente |
Detalle |
| Modelo |
TSSP77038TR |
| Frecuencia |
38 kHz |
| Protocolo |
RC5 |
Esquema de Bloques
┌──────────────────────────────────────────────────┐
│ STM32F405RGT6 @168MHz │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ TIM3/4 │ │ SPI3 │ │ ADC2 │ │
│ │ Encoders │ │ LSM6DSR │ │ 4×IR + │ │
│ │ (L,R) │ │ (Gyro) │ │ 4×Aux │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ TIM2/5 │ │ USART3 │ │ GPIO │ │
│ │ PWM 20kHz│ │ Debug │ │ IR LEDs │ │
│ │ (Motores)│ │ 115200 │ │ Info LEDs│ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ DMA: Transferencias ADC automáticas │ │
│ └──────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
Documento generado el 2026-06-12. Referencia cruzada con Sensores, Encoders y Giroscopio.