mercoledì 16 maggio 2012

Direct Digital Synthesizer - Crea la Tua onda...

In questo breve articolo, descriverò una tecnica semplice quanto efficace per generare una forma d'onda arbitraria e periodica. Per fare ciò dobbiamo prendere in esame i sintetizzatori digitali.
Partiamo da una considerazione: una forma d'onda è l'espressione di una funzione nel dominio del tempo. Se pensiamo ad una sinusoide, ad esempio, la funzione sarà: sin(wt); per wt (omega * T) che va da 0 a 2 PI.

(Onde sinusoidali)

(Onde triangolari)

(Onda a Dente di Sega)

Come possiamo realizzare attraverso un circuito elettronico una simile funzione?
La risposta più immediata è: creiamo una tabella ROM (Read Only Memory) al cui interno siamo presenti tutti i valori della funzione matematica desiderata e, poi, estraiamo uno per volta tali valori fino al completamento di un periodo temporale preimpostato, convertiamo i valori numerici in un segnale analogico (es. mediante un DAC - Digital to Analog Converter) e ...avremo ottenuto la nostra forma d'onda sintetica.

Nella realtà avremo bisogno di un Circuito Integrato dedicato (ASSP - Application Specific Standard Circuit) oppure potremo realizzare il sintetizzatore di forme d'onda mediante un circuito integrato programmabile (es. un FPGA - Field Programmable Gate Array).

Nelle prossime immagini vediamo lo schema di una implementazione su FPGA:

(FPGA Top - Click per ingrandire)

(Blocco DPRAM su FPGA - Click per ingrandire)

Il circuito DDS si basa sul principio dell'Accumulatore di Fase, tale accumulatore può agevolmente essere implementato in linguaggio VHDL (VLSI Hardware Description Language) ...di cui Vi riporto il codice:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity PHASE_ACC is
    Port ( clock : in  STD_LOGIC;
           reset : in  STD_LOGIC;
           load : in  STD_LOGIC;
           data : in  STD_LOGIC_VECTOR (31 downto 0);
           addr : out  STD_LOGIC_VECTOR (10 downto 0));
end PHASE_ACC;

architecture Behavioral of PHASE_ACC is
    signal phase_accum : STD_LOGIC_VECTOR (31 downto 0);
    signal phase_delta : STD_LOGIC_VECTOR (31 downto 0);
begin

    process (clock, reset)
    begin
        if reset='1' then
            addr <= (others => '0');
        elsif clock='1' and clock'event then
            addr <= phase_accum (31 downto 21);
        end if;
    end process;

    process (clock, load)
    begin
        if load = '1' then
            phase_delta <= data;
        elsif clock='0' and clock'event then
            phase_accum <= phase_accum + phase_delta;
        end if;
    end process;

end Behavioral;

Ma come è possibile generare una sinusoide?
Semplice, quardiamo questa funzione in codice ANSI C:

/* load a sine wave in FPGA wavetable*/
void load_sine(void) {

  const float pi = 3.141592f;
  float phase_vector = 0.0f;
  float phase_delta = 0.0f;
 
  unsigned int i;         //generic counter
 
  /* reset DPRAM address generator */
  WriteEXB(0x01, 0x02); //bit 0, addr 2

  phase_delta = (2.0f * pi) / 2048.0f;

  for (i=0; i<2048; i++) {
    WriteEXB((unsigned char)(round(sin(phase_vector) * 127.5f)
    + 127.0f), 0x01);
    phase_vector = phase_vector + phase_delta;
  }
   
  return;
}

Tornerò prossimamanete a parlare delle applicazioni del DDS ...adesso sono in partenza, nuove avventure mi attendono.

Qui Pianeta Terra, un mondo analogico... a presto!


mercoledì 2 maggio 2012

Un Robot al Make4Cash

Make4Cash è una iniziativa del Blog Elettronica Open Source, volta a radunare progettisti e sviluppatori, i "makers" appunto, in una competizione simbolica del valore di 1000 EUR che verranno assegnati al progetto più votato tra quelli presenti in lista.

 
(Link alla pagina dei progetti: http://it.emcelettronica.com/tag/make4cash)

Anche Libera Elettronica partecipa a questo incontro/confronto, con lo spirito di condividere idee, incoraggiare la partecipazione di persone o gruppi, allo sviluppo di progetti Open ...e magari utilizzare qualche risorsa economica in più per lo sviluppo dei futuri progetti.


Come si vota?
E' semplice, si leggono TUTTI i progetti presenti nella sezione Make4Cash (http://it.emcelettronica.com/tag/make4cash) del sito E.O.S. e, poi, mediante i tasti di condivisione sui social network si assegnano le proprie preferenze. I progetti potranno essere votati fino al 4 Giugno 2012.
Il punteggio è dato dalla somma delle condivisioni e gestito in base al regolamento del contest.

Il risultato dell'esperimento, che giudico più importante, è quello che ci permetterà di capire quanto la materia elettronica (tipicamente ritenuta ostica, mentre in realtà è solo complessa) possa superare le barriere dell'indifferenza o del noise nelle comunità presenti sui vari Facebook, Twitter, G+, LinkedIN, ecc., e innescare quell'effetto "virale" che può realmente far crescere il numero dei contatti e dare maggiore visibilità a questa affascinante materia. Spero anche che i giovani makers possano trovare lo stimolo per mettersi in gioco e partecipare alla vita dei blog.

Qui Pianeta Terra, in un continuo esperimento sociale, a presto e grazie per i Vostri voti!

sabato 21 aprile 2012

Prototipazione Rapida - Parte 2

Avete avuto un idea?
Bene! Realizzatela subito, senza dover attendere le lunghe fasi di sviluppo, produzione e consegna dei Master. Iniziate a provare il vostro circuito, considerandone pregi e difetti e, poi, quando avrete acquisito maggiori informazioni, potrete: inserire lo schema in un CAD Elettronico; produrre la Part List; il set di file Gerber per la masterizzazione del PCB (Printed Circuit Board) e, infine, una volta ordinati e ricevuti tutti i componenti, assemblare la versione finale ...della Vostra idea.
Come starete pensando c'è un bel po di lavoro tra l'idea e il prototipo!

(Prototipo SMT, realizzato in poche ore - Click per ingrandire)

In questo articolo Vi illustrerò una tecnica semplice ed efficace, per realizzare in poche ore il circuito ...e passare subito alla fase di test. Non tutte le idee funzionano già da quello che si definisce "smoke test". Cioè la prima accensione del circuito (Nota: regolate prima il limitatore di corrente del vostro alimentatore!!!).

Vediamo per semplici passi come fare:
  • Procuriamoci un supporto ramato, possibilmente in laminato FR4, del nastro adesivo in PVC e un taglierino.
  • Creiamo uno schizzo a matita del circuito e, dopo aver letto i datasheet di tutti i componenti, realizziamo uno schema elettrico, tenendo conto del formato (package) dei singoli componenti.

(Elaborazione dell'idea, fase notturna!)

Nel frattempo avremo preparato una soluzione concentrata di Cloruro Ferrico e alcune vaschette in materiale plastico di dimensioni adeguate al formato del nostro circuito.
  • Disponiamo delle sottili strisce di nastro in PVC sul laminato, pressando accuratamente ogni segmento.
  • Immergiamo il laminato nella soluzione di Cloruro Ferrico e, agitando delicatamente, attendiamo il tempo necessario affinché ogni zona di Rame, non coperta dal nastro adesivo, venga rimossa.

(Corrosione del Rame in soluzione di Cloruro Ferrico, fase umida!)

  • Per preservare nel tempo il circuito, effettuiamo una semplice operazione di stagnatura. Riscaldiamo il laminato con un asciugacapelli e, contemporaneamente, con la punta del saldatore depositiamo un sottile film di lega stagnate (...senza Piombo) sulle piste di rame.

(Circuito FR4 stagnato a caldo, fase ludica!)

  • Con l'ausilio di una lente di ingrandimento, montiamo i componenti.

 (Montaggio componenti SMD, fase di precisione!)

Fatto? Non ci resta che passare alla fase di valutazione e test del circuito.

 
(Testing strumentale, fase drammatica/esaltante!)

Qui Pianeta Terra, dove c'è sempre tanto da sperimentare e da imparare. A presto.

P. S. Nota importante: non disperdete prodotti chimici nell'ambiente. Non utilizzate Cianuro di Argento per ricoprire il Rame, in quanto, è un prodotto altamente tossico e inquinante. Utilizzate sempre dispositivi di protezione individuali (es. guanti in lattice o PVC, indumenti monouso, occhiali protettivi).


giovedì 5 aprile 2012

Energy Harvesting: i raccoglitori di energia

Una nuova gamma di dispositivi si affaccia sul mondo industriale: i raccoglitori di energia.

Vediamo cosa sono e come funzionano.

(cortesia di www.maxim-ic.com)

Prima di parlare dei dispositivi veri e propri, forse, occorre dire due parole sul concetto di energia dispersa.
Analizziamo alcune, ma solo alcune, categorie di fenomeni fisico-chimico che possono costituire una preziosa fonte di energia:

  • flusso di fotoni da sorgenti cosiddette luminose... il Sole prima di tutto.
  • campi elettromagnetici variabili di natura sia naturale e sia artificiale (es. radio-trasmettitori).
  • campi magnetici variabili (ad eccezione del campo magnetico terrestre, poco variabile, rientrano in questa categoria molte emissioni industriali, ad esempio i motori elettrici ampiamente diffusi).
  • vibrazioni sia di origine naturale e sia di origine antropica
  • variazioni termiche (giorno/notte = caldo/freddo)
  • glucosio di natura organica

Per ciascuna delle suddette fonti di energia ...dispersa... occorre un captatore, qualcosa di simile ad un'antenna (che può andare bene per i campi elettromagnetici) oppure una cella a combustibile per il glucosio, ad esempio.

Un altro aspetto molto importante è quello degli accumulatori di energia. Se, per esempio, l'energia dispersa catturabile è dell'ordine di grandezza di 1 nW/h (10E-09 W/ora), prima di poter disporre di una quantità di energia sufficiente per poter alimentare il nostro dispositivo, dovremo aver accumulato la giusta dose di energia.

Lo sviluppo degli accumulatori va di pari passo con quello dei "cercatori di energia".
La notizia importante, al di là della curiosità tecnologica, è che anche i produttori di chip a semiconduttore, si sono accorti, o meglio ne hanno valutato le opportunità, che è ora di iniziare a proporre soluzioni ingegnerizzate per il settore dell'Energy Harvesting.
La casa produttrice di semiconduttori MAXIM, da sempre impegnata nella ricerca di soluzioni ingegneristiche innovative, è oggi presente sul mercato con il suo nuovo chip MAX17710, dedicato proprio a quelle soluzioni di bassa potenza (circa 100 mW) che possono trarre beneficio dalla raccolta di energia dall'ambiente circostante.
Sta a Voi valutare se e come utilizzare... l'energia dispersa.

Qui Pianeta Terra, un mondo ricco di energia, a presto!



domenica 11 marzo 2012

YALC - Episode 4

YALC - Yet Another Linux Computer - procede spedito!

In questo post Vi propongo lo schema elettrico dell'alimentatore (Switching + Regolatori Lineari) che ho appena finito di assemblare (...prototipazione rapida) e provare con multimetro e oscilloscopio.

(click per ingrandire)

Tutto ok, funziona ...anche questa versione!

In passato vi ho proposto due soluzioni indipendenti (qui e qui) per la realizzazione di un circuito di alimentazione: una versione switching a frequenza fissa e tensione d'uscita fissa, e una versione lineare a tensione di uscita fissa (per valutare i pro e contro, di ciscuna soluzione, Vi consiglio di andare a rivedere i precedenti post).

Oggi parliamo dello schema utilizzato come PSU (Power Supply Unit) definitivo del sistema Linux Embedded che ho denominato YALC ...non è certo il primo sistema Linux Embedded che troverete sul Web, anche se ha qualche particolarità piuttosto interessante!

Quali particolarità? In tre parole: PortuxG20 + TFT Display indipendente + FPGA.

Andiamo a guardare subito lo schema, con la figura seguente:

(questa volta occorre davvero il click sull'immagine)

Nella parte alta trovate (da sinistra a destra) il diodo di protezione dalle accidentali (...ma  prima o poi, certe!!!) inversioni di polarità nell'alimentazione del circuito, il regolatore switching LM2575 ADJ (che significa Adjusted, quindi la tensione di uscita la deciderete Voi mediante R1 ed R2), l'induttore ed il diodo di recupero (che deve essere assolutamente un diodo a barriera di Schottky), il filtro d'uscita, il led di segnalazione che la tensione d'uscita è presente sul circuito.
Nella parte bassa dello schema, invece, trovate a sinistra il regolatore lineare LM7805, che fornisce una tensione stabilizzata di 5V alla scheda PortuxG20 ed al Display IDM-L35, nonché una tensione ausiliaria per la scheda FPGA, mentre a destra trovate il regolatore lineare che fornisce la tensione di 3,3V per la scheda FPGA e per il Video Decoder SAA7114H montato sulla stessa base di supporto.

Nell'immagine seguente è rappresentato lo stack composto dalla scheda PSU, sopra illustrata, e la scheda FPGA.

(sulla scheda FPGA troneggia un chip XC2S100 da 208 pin
...tutti microsaldati rigorosamente a mano)

Man mano che precederò nella realizzazione del prototipo Vi indicherò eventuali modifiche e/o criticità emerse durante le prove. Sicuramente ci attende un duro lavoro di montaggio, codifica VHDL e test, prima di poter vedere qualche immagine reale sul display TFT. Abbiate pazienza!

Qui Pianeta Terra, a presto!