Panel de Control (Parte 1): Introducción

mayo 18, 2018 circuiteando 0 Comments

La idea del panel de control surge por las ganas de aprender sobre la arquitectura ARM Cortex M, que tiene un precio muy parecido o inferior a los microcontroladores de 8 bits en formato Through-Hole, que son los que utilizamos todos los que empezamos con los microcontroladores. Pero ofrecen unas prestaciones muy superiores. Sin contar con el rendimiento superior, ofrecen (en caso de ST) resistencias de pullup y de pulldown para todos los pines del integrado, interrupciones en casi todos los pines, posibilidad de indicar la prioridad para cada interrupción, RTC con calendario incluido y otras muchas cosas más. Para muestra, a continuación se indican las características de una de las placas de alto rendimiento del fabricante ST: Nucleo 411RE.

Placa STM32 Nucleo


  • STM32 microcontroller in LQFP64 package
  • External SMPS to generate Vcore logic supply (only available on '-P'  suffixed boards).
  • 1 user LED shared with Arduino™
  • 1 user and 1 reset push-buttons
  • 32.768 kHz LSE crystal oscillator
  • Board expansion connectors:
    • Arduino™ Uno V3
    • ST morpho extension pin headers for full access to all STM32 I/Os
    • External SMPS experimentation dedicated connector (only available on '-P' suffixed boards)
  • Flexible power-supply options: ST-LINK USB VBUS or external sources
  • On-board ST-LINK/V2-1 debugger/programmer with USB re-enumeration capability. Three different interfaces supported on USB: mass storage, virtual COM port and debug port
  • Comprehensive free software libraries and examples available with the STM32Cube MCU Package
  • Support of a wide choice of Integrated Development Environments (IDEs) including IAR™ , Keil® , GCC-based IDEs, Arm® Mbed™
  • Arm® Mbed Enabled™ compliant (only for some Nucleo part numbers) 
Y del microcontrolador STM32F411RE:
  •  Dynamic Efficiency Line with BAM (Batch Acquisition Mode)
    •  1.7 V to 3.6 V power supply
    •  - 40°C to 85/105/125 °C temperature range
  • Core: Arm® 32-bit Cortex® -M4 CPU with FPU, Adaptive real-time accelerator (ART Accelerator™) allowing 0-wait state execution from Flash memory, frequency up to 100 MHz, memory protection unit, 125 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1), and DSP instructions
  • Memories
    • Up to 512 Kbytes of Flash memory
    • 128 Kbytes of SRAM
  • Clock, reset and supply management
    • 1.7 V to 3.6 V application supply and I/Os
    • POR, PDR, PVD and BOR
    • 4-to-26 MHz crystal oscillator
    • Internal 16 MHz factory-trimmed RC
    • 32 kHz oscillator for RTC with calibration
    • Internal 32 kHz RC with calibration
  • Power consumption
    • Run: 100 μA/MHz (peripheral off)
    • Stop (Flash in Stop mode, fast wakeup time): 42 μA Typ @ 25C; 65 μA max @25 °C
    • Stop (Flash in Deep power down mode, slow wakeup time): down to 9 μA @ 25 °C; 28 μA max @25 °C
    • Standby: 1.8 μA @25 °C / 1.7 V without RTC; 11 μA @85 °C @1.7 V
    • VBAT supply for RTC: 1 μA @25 °C
  • 1×12-bit, 2.4 MSPS A/D converter: up to 16 channels
  • General-purpose DMA: 16-stream DMA controllers with FIFOs and burst support
  • Up to 11 timers: up to six 16-bit, two 32-bit timers up to 100 MHz, each with up to four IC/OC/PWM or pulse counter and quadrature (incremental) encoder input, two watchdog timers (independent and window) and a SysTick timer
  • Debug mode
    • Serial wire debug (SWD) & JTAG interfaces
    • Cortex® -M4 Embedded Trace Macrocell™
  • Up to 81 I/O ports with interrupt capability
    • Up to 78 fast I/Os up to 100 MHz
    • Up to 77 5 V-tolerant I/Os
  • Up to 13 communication interfaces
    • Up to 3 x I2 C interfaces (SMBus/PMBus)
    • Up to 3 USARTs (2 x 12.5 Mbit/s, 1 x 6.25 Mbit/s), ISO 7816 interface, LIN, IrDA, modem control)
    • Up to 5 SPI/I2Ss (up to 50 Mbit/s, SPI or I2S audio protocol), SPI2 and SPI3 with muxed full-duplex I2 S to achieve audio class accuracy via internal audio PLL or external clock
    • SDIO interface (SD/MMC/eMMC)
    • Advanced connectivity: USB 2.0 full-speed device/host/OTG controller with on-chip PHY
  • CRC calculation unit
  • 96-bit unique ID
  • RTC: subsecond accuracy, hardware calendar
  • All packages (WLCSP49, LQFP64/100, UFQFPN48, UFBGA100) are ECOPACK® 2
Esta placa creo que me costó unos 12 o 14 euros. Si la comparamos con la de Arduino Uno que está en torno a 25 euros, veremos que hay una diferencia muy grande entre ambas.
Placa Arduino Uno Rev.3

Microcontroller: ATmega328P
Operating Voltage: 5V
Input Voltage (recommended): 7-12V
Input Voltage (limit): 6-20V
Digital I/O Pins: 14 (of which 6 provide PWM output)
PWM Digital I/O Pins: 6
Analog Input Pins: 6
DC Current per I/O Pin: 20 mA
DC Current for 3.3V Pin: 50 mA
Flash Memory: 32 KB (ATmega328P) of which 0.5 KB used by bootloader
SRAM: 2 KB (ATmega328P)
EEPROM: 1 KB (ATmega328P)
Clock Speed: 16 MHz
Led_BuiltIn: 13
Length: 68.6 mm
Width: 53.4 mm
Weight: 25 g

Y del microcontrolador ATmega328P:

  •    Advanced RISC Architecture
    • 131 Powerful Instructions
    • Most Single Clock Cycle Execution
    • 32 x 8 General Purpose Working Registers
    • Fully Static Operation
    • Up to 20 MIPS Throughput at 20MHz
    • On-chip 2-cycle Multiplier
  • High Endurance Non-volatile Memory Segments
    • 32KBytes of In-System Self-Programmable Flash program Memory
    • 1KBytes EEPROM
    • 2KBytes Internal SRAM
    • Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
    • Data Retention: 20 years at 85°C/100 years at 25°C (1)
    • Optional Boot Code Section with Independent Lock Bits
  • In-System Programming by On-chip Boot Program
  • True Read-While-Write Operation
    • Programming Lock for Software Security
  • Atmel® QTouch® Library Support
    • Capacitive Touch Buttons, Sliders and Wheels
    • QTouch and QMatrix® Acquisition
  • Up to 64 sense channels
  • Peripheral Features
    • Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode
    • One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode
    • Real Time Counter with Separate Oscillator
    • Six PWM Channels
    • 8-channel 10-bit ADC in TQFP and QFN/MLF package
  • Temperature Measurement
    • 6-channel 10-bit ADC in PDIP Package
  • Temperature Measurement
    • Two Master/Slave SPI Serial Interface
    • One Programmable Serial USART
    • One Byte-oriented 2-wire Serial Interface (Philips I2C compatible)
    • Programmable Watchdog Timer with Separate On-chip Oscillator
    • One On-chip Analog Comparator
    • Interrupt and Wake-up on Pin Change
  • Special Microcontroller Features
    • Power-on Reset and Programmable Brown-out Detection
    • Internal Calibrated Oscillator
    • External and Internal Interrupt Sources
    • Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and Extended Standby
  • I/O and Packages
    • 23 Programmable I/O Lines
    • 28-pin PDIP, 32-lead TQFP, 28-pad QFN/MLF and 32-pad QFN/MLF
  • Operating Voltage:
    • 1.8 - 5.5V
  • Temperature Range:
    • -40°C to 105°C
  • Speed Grade:
    • 0 - 4MHz @ 1.8 - 5.5V
    • 0 - 10MHz @ 2.7 - 5.5V
    • 0 - 20MHz @ 4.5 - 5.5V
  • Power Consumption at 1MHz, 1.8V, 25°C
    • Active Mode: 0.2mA
    • Power-down Mode: 0.1μA
    • Power-save Mode: 0.75μA (Including 32kHz RTC)

Lo mismo ocurre a nivel de chip, si comparamos el Atmega 328P (utilizado en la placa Arduino Uno) con un Arm Cortex M de su mismo precio.

No es el caso de las placas que he puerto más arriba, ya que el Cortex M4 pertenece a la gama alta y vale casi el doble, pero ST lo ofrece muy barato para darse a conocer y popularizar la plataforma Mbed. Intenta conseguir algo parecido a Arduino con sus microcontroladores, pero basado en un IDE en la nube.

En vez de utilizar Mbed, me descargué el IDE oficial de ST (Mbed es un framework, donde ya están implementadas muchas funcionalidades de forma sencilla, pero es una capa de abstracción que no deja ver lo que hay debajo del capó) System Workbench.

IDE System Workbench

Nota: Actualmente ST ha comprado la empresa Atolic y ofrece su IDE profesional totalmente gratuito para sus microcontroladores, se puede obtener más información y descargarlo de su página oficial.

Empecé por el típico programa de "hola mundo" de los microcontroladores, encender y apagar un led. Debo decir, que fue bastante intimidante, ya que hay que configurar con anterioridad el micro. Cosa que és mucho más complicada que con los micros de 8 bits a los que estoy acostumbrado.

Para hacernos una idea, intervienen 7 registros diferentes solo para configurar los pines de entrada/salida, y si miramos la configuración del reloj del sistema..., bueno, nos encontramos ante cerca de 1000 páginas de documentación que desaniman al principio. Pero no hay que dejarse intimidar, y recordar el famoso lema de divide y vencerás. Hay que centrarse en los periféricos que se van a utilizar e ir empezando por una configuración mínima que funcione e ir ampliando poco a poco el código hasta conseguir los que se quiere.

Probé a realizar lecturas ADC, comunicación SPI, etc. Hasta probar los periféricos más habituales y familiarizarme un poco con el IDE y la arquitectura ARM Cortex M.

Llegado a este punto, tenía claro que el proyecto no lo iba a realizar directamente en C sin ayuda de ninguna librería, ya que el tiempo que que tardaría en realizarlo sería demasiado y no sería una experiencia muy gratificante. Por  lo que decidí empezar en Mbed  y posiblemente probar MbedOS, aunque al final acabé con ChibiOS. Ya explicaré más adelante el porqué.

También comentar que utilicé la herramienta CubeMX que permite hacer la configuración de periféricos entre otras cosas, de forma gráfica, obteniendo un fichero de código fuente que podemos utilizar en nuestro entorno de desarrollo.

CubeMX

Desguace del panel v.2

Comentar que éste sería mi tercer panel, ya realicé uno más pequeño con un Pic 18F2550, el v.1 y otro con un par de micros Pic conectados por I2C, el v.2.
  
Podeis ver unas imagenes de los mismos a continuación.

Panel v.1
Panel v.2
Panel v.2 (Pic 18F2550 junto con 2 Pics comunicados por I2C)

En este caso las placas de circuito las realicé de forma casera y como se ve, el diseño del panel es de los más "espartano". Por lo que decidí que a la tercera va la venciada y este v.3 sería el último que realizaría, utilizando todos los interruptores del v.2 ya que no son precisamente baratos.

La v.3 llevará todavía más interruptores, pulsadores, rotatorios y un par de encoders. Junto con una pantalla LED de 15".

Será bastante más largo que la v.2 por lo que tendrá que dividirse en dos partes para poder guardarlo, y tener la posibilidad de decidir si se quiere montar sólo la parte principal con la pantalla o junto con otra parte que tendrá su propia circuitería y permitirá su conexićon y desconexión en caliente, es decir, mientras se está utilizando.

Espero no haberme extendido demasiado en esta introducción. En la próxima entrada hablaré del diseño del panel.

0 comentarios: