Archimede: una scheda per applicazioni industriali basata su .NET Micro Framework

(Pubblichiamo la recensione apparsa su TinyCLR.it)

Diciamo subito che Archimede non è solo una scheda, ma un’intera suite di componenti hardware e software che contribuiscono a costituire una vera e propria piattaforma modulare; nel kit che abbiamo valutato erano compresi, oltre alla mainboard vera e propria, la base-board, sulla quale si innesta la mainboard, StarterKit3 moduli I/O ed una scheda esterna da prototipazione/sperimentazione assemblata con alcuni componenti da “laboratorio” (2 pulsanti, un potenziometro, un led, un lettore iButton, un sensore di temperatura, una porta seriale DB9, un sensore di luminosità ed un buzzer), il tutto montato sopra una tavoletta in legno che rende il kit (oltre che esteticamente gradevole) robusto e facilmente trasportabile. Il tutto era inoltre corredato da un SDK veramente molto completo e ben scritto ed una documentazione esaustiva e dettagliata, con tanto di schematici e topologici e di guida “Getting Started” corredata di istruzioni e foto per il montaggio e primo test del kit, per di più redatta sia in italiano che in inglese, un livello di supporto che francamente non avevamo finora mai riscontrato in altre schede basate su .NET Micro Framework.

scheda_sperimentazione

Caratteristiche

Già da una prima ispezione visiva risulta chiaro che la destinazione d’uso più consona di Archimede è quella legata alla realizzazione di applicazioni industriali; questa impressione viene principalmente suggerita dall’enclosure a guida DIN, ma viene confermata da un’analisi più approfondita dei componenti installati sulle schede che compongono la piattaforma. Come già anticipato, il cuore della piattaforma è la motherboard contenente, oltre al microcontrollore, il connettore USB per il debugging, un socket per micro-SD, un pulsante di reset e diversi connettori per alimentazione, debugger JTAG ed ulteriori espansioni, tra cui un socket Gadgeteer (non popolato nella scheda che abbiamo valutato), marcato sullo schematico come “U/P/S/Y”.

Il microcontrollore installato è il noto STM32F4, nella variante STM32F407ZGT6 a 144 pin. Nella configurazione standard di Seletronica questo viene distributo con il firmware derivato da quello open della GHI per la cosiddetta Cerb-Family (in gran parte costituito dal porting base della Oberon del Mountaineer Group). Questa scelta, ampiamente condivisibile, permette di beneficiare del know-how e del supporto sviluppatosi intorno alle schede FEZ-Cerberus, FEZ-Cerb40 e FEZ-CerbuinoBee, e consente al contempo di sfruttare tutti gli aggiornamenti periodicamente rilasciati da GHI. In linea di principio, anche se non abbiamo condotto dei test in questo senso, Archimede dovrebbe consentire senza grossi problemi l’utilizzo del firmware che equipaggia il Netduino2 o le schede Mountaineer, sebbene eventuali difformità a livello di pinout previsto potrebbe richiedere di intervenire su qualche file sorgente a livello di Porting Kit prima della compilazione di un’immagine “flashabile”.

Come anticipato, la mainboard si innesta a 90°, con un connettore a passo 0.1” ad una fila lungo quanto l’intera scheda, al centro di una scheda “base” suddivisa in 12 “canali”, ciascuno dei quali è costituito da un sottoinsieme modulare della stessa scheda base finalizzato ad ospitare componenti differenti a seconda della destinazione d’uso di ciascuno dei 12 canali. Oltre al possibile alloggiamento di appositi “schedini” di interfaccia prodotti dalla stessa Seletronica (per RS-232, ADC a 2 canali, I2C/1-Wire, DAC e doppio relé in questo momento, oltre ad un interessante modulo Ethernet con ENCJ28 che non abbiamo però ancora potuto valutare), va sottolineato che la base-board contiene già al suo interno due canali popolati rispettivamente con un relé (AZ692-071-52 dimensionato in modo tale da permettere lo switching anche di carichi di potenza, essendo marcato come 250V-8A) ed una coppia di ingressi optoisolati (TLP290). A testimonianza della grande cura nella progettazione degli aspetti legati all’impiego industriale del dispositivo, è opportuno sottolineare che tutti i canali I/O destinati a pilotare uscite digitali sono caratterizzati da stadi di adattamento costituiti dalla cascata di invertitori con isteresi M74HC14TTR (più indicati dei corrispettivi senza isteresi per l’utilizzo in ambienti “ostili” da un punto di vista elettromagnetico) e di moduli invertitori darlington ULQ2003D1013T, così come ad esempio il canale già popolato con il relé (ma ovviamente lo stesso vale per tutti i 12 canali) prevede l’utilizzo di due varistori (già presenti nel canale prepopolato e dimensionati intorno ai 36V/1mA) per la “surge protection” del carico.

SupervisionDemo

SDK Software

La stessa cura e qualità riscontrata nella realizzazione hardware del dispositivo è presente nell’SDK rilasciato da Seletronica a supporto della piattaforma Archimede. In particolare nell’SDK sono compresi tutti i sorgenti dei “driver” relativi alle varie periferiche previste nonché gli “enum” relativi alla mappatura simbolica del pinout.

A titolo di esempio, ecco un sample che attiva/disattiva il relé built-in rispettivamente attivando lo switch rosso o il nero presenti sulla scheda di sperimentazione. Poiché nella scheda di sperimentazione la coppia di morsetti facenti capo al “normalmente-aperto” del relé è collegata al buzzer, questo produrrà un beep attivato alla pressione del pulsante rosso e disattivato dalla pressione del pulsante nero. Come dipendenze “esterne” abbiamo gli assembly GHI.OSHW.Hardware e, appunto, Seletronica.NETMF.UPC:

using System;
using Microsoft.SPOT;
using System.Threading;
using Seletronica.NETMF.UPC;

namespace SampleToggleBuzzerThroughSwitches
{
    public class Program
    {
        static DigitalOutput _relay = new DigitalOutput(Seletronica.NETMF.UPC.Enums.Output.OUT_C11);
        static DigitalInput _switchRed = new DigitalInput(Seletronica.NETMF.UPC.Enums.Opto.OPTO_B12);
        static DigitalInput _switchBlack = new DigitalInput(Seletronica.NETMF.UPC.Enums.Opto.OPTO_A12);

        static bool _latestSwitchRedState;
        static bool _latestSwitchBlackState;

        public static void Main()
        {
            Debug.Print("Firmware Avviato");

            _latestSwitchRedState = _switchRed.IsOn();
            _latestSwitchBlackState = _switchBlack.IsOn();

            while (true)
            {
                bool switchRedOn=_switchRed.IsOn();
                bool switchBlackOn=_switchBlack.IsOn();

                if (switchRedOn && !_latestSwitchRedState)
                {
                    _relay.On();
                }
                else if (switchBlackOn && !_latestSwitchBlackState)
                {
                    _relay.Off();
                }

                _latestSwitchRedState = switchRedOn;
                _latestSwitchBlackState = switchBlackOn;

                Thread.Sleep(10);
            }
        }

    }
}

Come conclusione di questa prima parte della recensione di questo straordinario prodotto vi segnaliamo inoltre che lo Starter Kit di Archimede è in questo momento in vendita ad un prezzo promozionale di€99 sul sito Seletronica e che nell’SDK è contenuto un sample per Windows/.NET, completo ovviamente di sorgenti, che permette di interagire da parte di una semplice ma efficace GUI con tutte le periferiche presenti a bordo della scheda di sperimentazione:

Nella prossima parte della recensione analizzeremo nel dettaglio i moduli di interfaccia già rilasciati e approfondiremo gli aspetti relativi alla programmazione della piattaforma finalizzata allo sviluppo di applicazioni industriali.