Saltar a contenido
← Volver a OPRobots.org

Hardware

Microcontrolador

Característica Detalle
Modelo STM32F103C8T6 (BluePill)
Arquitectura ARM Cortex-M3
Frecuencia 72 MHz (HSE 8 MHz × PLL)
Flash 64 KiB
RAM 20 KiB
Framework libopencm3
Entorno PlatformIO

⚠️ Advertencia: Aunque config.h declara SYSCLK_FREQUENCY_HZ 84000000, la función rcc_clock_setup_in_hse_8mhz_out_72mhz() configura el SYSCLK a 72 MHz. La constante CYCLE_COUNTER_PER_MICROSECONDS 84 también es incorrecta (debería ser 72). Ver HW-01 para más detalles.

Periféricos utilizados

Periférico Función Configuración
TIM1 PWM 3 fases motor derecho Prescaler 5, período 512, ~28 kHz
TIM2 PWM 3 fases motor izquierdo Prescaler 5, período 512, ~28 kHz
TIM3 Encoder cuadratura izquierdo Modo encoder (EM3), 16-bit
TIM4 Encoder cuadratura derecho Modo encoder (EM3), 16-bit
SysTick Base de tiempos 10 kHz SysTick a 10 kHz
USART3 Comunicación serie 115200 baud, 8N1, RXNE interrupt
EXTI3 Índice Z encoder izquierdo Rising edge, GPIOB3
EXTI15 Índice Z encoder derecho Rising edge, GPIOA15
DWT Cycle counter (delay_us) Habilitado vía dwt_enable_cycle_counter()

Encoders

Característica Detalle
Tipo Encoder magnético por cuadratura (AS5600 o compatible)
Resolución 4096 CPR (cuadratura ×4)
Posición absoluta 586 ticks/vuelta eléctrica (múltiples polos magnéticos)
Interfaz Quadratura A/B + índice Z (pulso por vuelta)
Timer izquierda TIM3 con partial remap (PB4=CH1, PB5=CH2)
Timer derecha TIM4 (PB6=CH1, PB7=CH2)
Índice Z izquierda PB3 → EXTI3 (rising edge)
Índice Z derecha PA15 → EXTI15 (rising edge)

Nota: El remap parcial de TIM3 (AFIO_MAPR_TIM3_REMAP_PARTIAL_REMAP) mueve los canales del encoder de PA6/PA7 a PB4/PB5, liberando PA6/PA7 para otros usos y agrupando los dos encoders en el puerto GPIOB.


Actuadores / Motores

Característica Detalle
Tipo BLDC (brushless DC) con imanes permanentes
Cantidad 2
Driver 3 half-bridges por motor (TIM1 para derecho, TIM2 para izquierdo)
Control Conmutación sinusoidal con realimentación de encoder (FOC simplificado)
RPM máxima 900 RPM
Frecuencia PWM ~28.125 kHz (72 MHz / 5 / 512)

Alimentación

Característica Detalle
Tensión de entrada 7.4 V – 12 V (batería LiPo 2S-3S)
Regulador Regulador onboard de la BluePill (3.3V LDO)
Alimentación motores Directa de batería a los drivers MOSFET

PCB

No existe una PCB independiente para OPRcontrolFOC. El circuito de control FOC se integró directamente en la PCB del robot UltiBot, que incorpora:

  • La BluePill (STM32F103C8) como controlador
  • Drivers MOSFET para 2 BLDC (6 medias pontes)
  • Conectores para encoders magnéticos AS5600
  • Regulador de alimentación

Los esquemáticos y el layout KiCad están en el repositorio de UltiBot. Los directorios pcb_files/kicad_project/ y pcb_files/gerbers/ de este repositorio existen como placeholder y están vacíos.


Pinout Completo

GPIO

Pin Puerto Modo Función
PC13 GPIOC Output push-pull LED onboard — saturación PID motor derecho
PC14 GPIOC Output push-pull LED onboard — saturación PID motor izquierdo
PB14 GPIOB Output push-pull Enable motor izquierdo
PB15 GPIOB Output push-pull Enable motor derecho
PB3 GPIOB Input float Índice Z encoder izquierdo (EXTI3)
PA15 GPIOA Input float Índice Z encoder derecho (EXTI15)

PWM — Motor derecho (TIM1)

Pin Canal Función
PA8 TIM1_CH1 Fase A
PA9 TIM1_CH2 Fase B
PA10 TIM1_CH3 Fase C

PWM — Motor izquierdo (TIM2)

Pin Canal Función
PA0 TIM2_CH1 Fase A
PA1 TIM2_CH2 Fase B
PA2 TIM2_CH3 Fase C

Encoder cuadratura

Pin Timer Canal Función
PB6 TIM4_CH1 A Encoder derecho — cuadratura A
PB7 TIM4_CH2 B Encoder derecho — cuadratura B
PB4 TIM3_CH1 A (remap) Encoder izquierdo — cuadratura A
PB5 TIM3_CH2 B (remap) Encoder izquierdo — cuadratura B

USART3

Pin Función
PB10 TX
PB11 RX (pull-up)

Prioridades de Interrupción (NVIC)

IRQ Prioridad Función
NVIC_SYSTICK_IRQ 16 (grupo 1) Base de tiempos, lectura de encoders
NVIC_USART3_IRQ 32 (grupo 2) Recepción de comandos serie
NVIC_EXTI3_IRQ 48 (grupo 3) Índice Z encoder izquierdo
NVIC_EXTI15_10_IRQ 48 (grupo 3) Índice Z encoder derecho

Diagrama de Bloques

flowchart TD
    MCU[STM32F103C8T6<br/>72 MHz]
    EncL[Encoder Izquierdo<br/>AS5600 Quadratura]
    EncR[Encoder Derecho<br/>AS5600 Quadratura]
    MotorL[Motor BLDC<br/>Izquierdo]
    MotorR[Motor BLDC<br/>Derecho]
    PWM1[TIM1 PWM 3Φ<br/>~28 kHz]
    PWM2[TIM2 PWM 3Φ<br/>~28 kHz]
    USART[USART3<br/>115200 8N1]
    LED[LEDs PC13/PC14]

    EncL -->|TIM3 Quad| MCU
    EncR -->|TIM4 Quad| MCU
    EncL -->|Z Index EXTI3| MCU
    EncR -->|Z Index EXTI15| MCU
    MCU -->|PWM| PWM2
    MCU -->|PWM| PWM1
    PWM2 --> MotorL
    PWM1 --> MotorR
    MCU -->|TX/RX| USART
    MCU -->|GPIO| LED

Documento generado el 2026-06-30. Ver también Arquitectura Software, Movimiento, Encoders.