Voce economică cu MSP430

19 AUGUST 2009

1. Introducere
Capacitatea redării audio poate diferenţia un produs de o soluţie a competitorilor. Un detector de fum cu voce poate da direct instrucţiuni detaliate despre cum să se evacueze clădirea, iar această caracteristică poate salva vieţi în cazul unui incendiu. Soneriile polifonice care să înlocuiască beep-uri simple într-o aplicaţie fac produsul final mai convenabil. Dar, de obicei, vocea sau soneriile polifonice necesită fie circuite de voce/audio externe, fie un microcontroler scump cu multă memorie Flash şi ieşire DAC.
Acest articol analizează soluţiile tehnice posibile pentru ieşire de voce cu un microcontroler economic. Soluţia finală care este selectată utilizează o memorie flash SPI externă care permite flexibilitatea dimensiunii memoriei de stocare bazate pe timpul de redare necesar. MSP430F2002 low-cost este potrivit pentru această soluţie de redare de voce de putere ultra-scăzută. Datorită dimensiunii mici de cod şi a cerinţelor minime pentru hardware periferic, ieşirea de voce poate fi adăugată oricărei aplicaţii care utilizează aproape orice alt dispozitiv MSP430.

2. Stocarea Datelor Audio
Datele audio trebuie să fie stocate în memorie nevolatilă, iar memoria flash este des folosită în acest caz. Există două opţiuni pentru stocarea datelor audio în flash: memorie flash internă a MSP430 sau memorie flash externă.
Calitatea audio şi lungimea sunt parametrii cheie pentru selectarea corectă a dimensiuni memoriei flash. O rată de eşantionare audio de 8 kbs permite teoretic, potrivit lui Nyquist, o frecvenţă audio analogică de până la 4 kHz, ceea ce este suficient de bine pentru o voce inteligibilă. O rezoluţie de 8 biţi (1 byte) este deseori utilizată pentru redarea de voce, iar aceasta conduce la un calcul rapid care oferă spaţiul necesar de memorie pentru datele audio necomprimate:

8 ksps x 1 B = 8 kBps

2.1. Stocarea Datelor Audio în Memoria Flash Internă a MSP430
Avantajul stocării datelor audio în memoria flash internă este clar: simplitatea sistemului şi soluţia monocip. Un singur dispozitiv MSP430 poate stoca date software şi audio şi poate procesa şi scoate semnalul audio. De asemenea, accesul la datele audio din flash este foarte simplu pentru CPU.
Principala problemă a soluţiei este spaţiul de memorie necesar. La 8 ksps / 8 bit, un dispozitiv MSP430 cu 60-kB flash poate memora până la numai şapte secunde de date audio în 56 kB şi apoi îi rămân numai 4 kB de cod. În unele aplicaţii simple cu numai câteva secunde de redare audio, aceasta ar putea fi o soluţie bună. Totuşi, fiecare MSP430 cu 60 kB flash vine cu un set extensiv de periferice, cum sunt cele două module USCI, ADC12, două temporizatoare etc., care s-ar putea să nu fie necesare în aplicaţie. Chiar derivatele din MSP430 cu până la 256 KB de flash pot stoca până la numai 32 de secunde de date audio necomprimate, care în multe cazuri nu este un timp suficient pentru redare.

2.2. Stocarea Datelor Audio în Memoria Flash Externă
Memoria flash externă pentru stocarea datelor audio oferă mai multă flexibilitate. Selecţia de dimensiuni de flash ale MSP430 şi setul de periferice este dependent numai de cerinţele aplicaţiei şi nu este dependent de cantitatea de date audio. Dacă aplicaţia nu necesită multe alte sarcini în plus faţă de redarea audio, poate fi folosit un dispozitiv MSP430 foarte mic şi economic, cum este MSP430F2002. De asemenea, dimensiunea flash-ului extern pentru stocarea de date audio poate fi adaptată la timpul de redare necesar. Dacă este nevoie de mai multe secunde sau minute audio, este foarte uşor de realizat un upgrade de memorie şi trebuie înlocuit numai chipul de memorie flash externă cu o versiune cu mai multă memorie.
Dezavantajul memoriei flash externe este spaţiul pe placă necesar al acestei soluţii cu două chipuri şi accesul mai complicat la datele audio stocate în memoria flash externă.
Interfeţele simple cu flash-ul extern sunt SPI şi I2C iar aceste două interfeţe seriale sunt suportate de aproape toate derivatele MSP430 noi cu o interfaţă USI sau USCI. Dacă este utilizat SPI, toate derivatele MSP430 cu interfeţe UART pot fi selectate pentru a implementa redarea de voce cu memoria flash externă. Acest lucru face soluţia cu interfaţă SPI să fie cea mai flexibilă, deoarece este utilizabilă pe aproape toate derivatele MSP430.

3. Redarea Audio
Pentru redarea audio este necesară conversia digital-analogică. O alternativă la utilizarea DAC12 din MSP430 este utilizarea ieşirii PWM cu un temporizator. Ambele soluţii au avantaje şi dezavantaje.

3.1. Redarea Audio Cu DAC12
Utilizarea DAC12 MSP430 este soluţia directă. Eşantioanele audio trebuie aplicate la DAC12 cu temporizarea corectă, iar DAC12 generează direct forma de undă analogică dorită. DAC12 este un periferic care este disponibil doar în câteva derivate MSP430, de obicei complet-echipate. Dar dacă aplicaţia necesită deja un dispozitiv MSP430 care este echipat cu DAC12, aceasta este metoda cea mai bună de a converti datele audio digitale într-o formă de undă analogică.
DAC12 este un DAC de 12-biţi care poate de asemenea opera în modul de 8-biţi. Acest mod permite utilizarea DMA-ului, dacă este disponibil.
Figura 1 prezintă traseul semnalului pentru redarea audio cu flash intern şi utilizarea DMA. În acest caz, secvenţa corectă de declanşare este foarte importantă: Temporizatorul Timer_A generează rata de eşantionare de 8kHz şi declanşează DAC12 cu buffer dublu pentru a emite următoarea valoare analogică. Acest lucru înseamnă că valoarea din registrul DAC12_xDAT este copiată la timpul corect în registrul DAC12_xLATCH. DAC12 detectează acum un registru gol DAC12_xDAT şi declanşează DMA-ul să încarce DAC12_xDAT cu următoarea valoare din memoria flash. Este important să se construiască în acest fel secvenţa de declanşări, deoarece este singura metodă care asigură temporizarea corectă atunci când se emit valori noi utilizând DAC12. În mod intuitiv, mulţi programatori ar selecta o secvenţă de declanşare diferită, în care Timer_A declanşează DMA-ul să copieze următorul eşantion audio digital către DAC. Această metodă generează incertitudini în temporizare, deoarece DMA-ul poate copia doar următoarea valoare audio către DAC12 când are control asupra magistralei interne de date şi adrese al MSP430. Această magistrală ar putea fi ocupată de CPU sau celelalte canale DMA şi este destul de posibilă o întârziere a acestui transport de date. Întârzierile de sincronizare când se reîncarcă valori în DAC12 generează distorsiuni în forma de undă analogică, care pot fi evitate dacă este utilizată secvenţa corectă de declanşare.
Dacă DMA nu este disponibil, acesta trebuie înlocuit cu un ISR (Interrupt Service Routine) declanşat de un registru gol DAC12_xDAT al DAC12. în acest caz, CPU-ul asumă responsabilitatea de a muta datele digitale audio de la memoria flash la DAC12. Metoda ISR permite de asemenea procesarea datelor audio în timpul emisiei audio; de exemplu, reconstituirea datelor audio comprimate.
Dacă este utilizată memoria flash SPI externă, datele trebuie citite de la interfaţa serială USI, USCI sau USART şi scrise în registrul DAC12_xDAT al DAC12. Această sarcină poate de asemenea fi îndeplinită fie prin DMA sau prin CPU executând un ISR.

3.2. Redarea Audio cu PWM
PWM este des utilizată ca o soluţie low-cost pentru o conversie digital-analogică. Semnalul audio analogic poate să fie de asemenea generat prin PWM, iar Figura 2 prezintă traseul semnalului pentru o ieşire PWM cu date audio stocate în memoria flash internă.
Prima etapă în această soluţie este selectarea frecvenţelor corecte. Pentru redarea de sunet, un parametru fix este rata de eşantionare de 8-ksps pentru memoria audio digitală. Dacă Timer_A generează un PWM cu o frecvenţă de 8kHz, este necesar un filtru analogic foarte puternic pentru a suprima frecvenţa PWM de 8kHz şi pentru a trece numai frecvenţa audio între 0Hz şi 4kHz. Această problemă poate fi rezolvată uşor prin selectarea unei frecvenţe PWM mai ridicate. De exemplu 32 kHz este peste gama de frecvenţe perceptibile şi, dacă este nevoie să se filtreze această frecvenţă, poate fi implementat un filtru trece-jos simplu, permiţând benzii de la 0 Hz la 4 kHz să treacă şi suprimând 32 kHz. În plus, 32 kHz este cvadruplul lui 8 kHz, ceea ce uşurează calculul datelor pe un computer binar.
Dacă Timer_A generează un PWM de 32-kHz cu o rezoluţie de 8-biţi, este necesară o frecvenţă a ceasului de intrare de 32 kHz x 256 = 8.192 MHz.
Familia MSP430F2xx are valori de calibrare DCO măsurate din fabrică pentru 1 MHz, 8 MHz, 12 MHz şi 16 MHz stocate în memoria flash pentru informaţii. Valoarea de calibrare DCO pentru 8 MHz oferă o eroare sistematică statică de 2,4%, care este acceptabilă pentru redarea audio. Utilizând frecvenţa DCO calibrată de 8-MHz permite generarea de redare audio fără nici o componentă externă, cum este un cristal cu condensatori de sarcină externi.
Familia MSP430F5xx oferă un oscilator integrat de 32768-Hz, REFO. Bazat pe această frecvenţă REFO şi pe FLL (frequency-locked loop) integrat, DCO poate fi programat la frecvenţa dorită şi stabilitatea frecvenţei este destul de bună pentru ieşirea de voce.
Prin urmare, cu derivatele MSP430F5xx, redarea audio fără componente externe este de asemenea posibilă. Toate celelalte familii MSP430 necesită un cristal (exemplu: un cristal pentru ceas de 32768-Hz) pentru a asigura un semnal de ceas cu precizia de frecvenţă necesară. Figura 3 prezintă generarea semnalului de ceas pentru PWM de 32-kHz bazat pe un semnal de ceas de 8192-MHz.
Cu o frecvenţă a PWM-ului de 32 kHz şi o rată de eşantionare audio de 8 ksps, există patru cicluri PWM pentru fiecare eşantion audio. Din două eşantioane audio, trebuie generate patru valori ale factorului de umplere PWM, ceea ce poate fi realizat cu aproximare liniară. Două eşantioane audio (s1 şi s2) sunt citite din memorie, iar cele trei eşantioane audio lipsă între s1 şi s2 sunt calculate în conformitate cu Figura 3.
Calculul poate fi implementat în software fără utilizarea nici unei librării matematice. Deoarece frecvenţa PWM de 32 kHz este de patru ori mai mare ca rata de eşantionare, este necesară doar adăugarea şi translaţia instrucţiunilor. Codul în limbaj C poate fi realizat ca în exemplul următor utilizând variabila uAvgCntr ca un contor modulo-4 pentru a număra eşantioanele lipsă calculate.
Iniţial, eşantionul audio s1 este o ieşire via PWM. Următoarele trei eşantioane sunt apoi calculate de la eşantioanele audio s1 şi s2. După acest proces, următorul eşantion audio s3 este încărcat din flash în microcontroler pentru următorul calcul de aproximare şi ciclul se repetă de la început.

4. eZ430-Speech, O Demonstraţie
A fost realizată o demonstraţie low-cost şi de consum energetic ultra-scăzut: eZ430-Speech. Acest demo este compatibil cu instrumentul de dezvoltare eZ430 în factor de formă al unui memory stick, după cum este prezentat în Figura 4.
4.1. Hardware-ul eZ430-Speech
Deoarece redarea audio cu flash SPI extern şi PWM poate fi realizată simplu cu un MSP430 low-cost, a fost ales MSP430F2002. Pentru a implementa o comunicaţie serială rapidă, este necesară interfaţa serială USI, care este disponibilă în MSP430F2002. Temporizatorul Timer_A2 integrat poate fi utilizat pentru a genera semnalul de ieşire PWM pentru ieşirea audio. Datorită DCO-ului calibrat din familia MSP430F2xx, nu este necesar nici un cristal extern pentru această aplicaţie. Figura 5 arată că, în plus faţă de MSP430F2002 şi de flash-ul SPI, singurele componente externe de pe placă sunt:
– Un switch pentru a porni ieşirea de voce;
– Un LED pentru a indica operaţia activă;
– Un condensator de decuplare.
Curentul de alimentare ICC al memoriei flash SPI în timpul ştergerii, programării şi citirii operaţiilor este prea ridicat pentru a fi alimentat direct de la un GPIO MSP430. Ar putea fi adăugat un switch extern pentru a opri ICC-ul flashului SPI, iar un pin GPIO MSP430 ar putea controla acest switch pentru a reduce suplimentar consumul de putere. Dacă nu este generat nici un sunet, MSP430 şi flashul SPI sunt în mod deep sleep. În acest mod MSP430 consumă un curent de alimentare de mai puţin de 1µA. Apăsarea butonului activează MSP430 şi ieşirea de voce este efectuată. Numai în timpul activării ieşirii de voce circulă un curent de alimentare de 3,5 mA. În timpul lung de pasivitate, consumul de curent al sistemului este extrem de scăzut şi se poate aştepta o durată mare de viaţă pentru bateria de alimentare de câţiva ani. În mod normal, oricare alt MSP430 cu interfaţă SPI hardware poate de asemenea genera ieşire de voce PWM ca o funcţie adiţională, în plus faţă de funcţiile dorite pentru aplicaţie.

4.2. Software-ul eZ430-Speech
După ce datele audio au fost stocate în memoria flash SPI, software-ul de redare trebuie să fie încărcat în MSP430, şi demo-ul poate începe. Figura 6 prezintă schema software a redării audio.
După iniţializarea GPIO-urilor, Timer_A şi a interfeţei seriale USI, MSP430 se duce la LPM4 (low-power mode 4) şi aşteaptă ca să fie apăsat butonul. Imediat ce este apăsat butonul, primele două eşantioane audio sunt citite de la flash-ul SPI, primul eşantion audio este scris la Timer_A şi apoi MSP430 se duce la LPM0. În LPM0, DCO continuă să genereze un semnal de ceas de 8-MHz şi Timer_A generează semnalul de ieşire PWM. După fiecare perioadă PWM, este declanşată o întrerupere Timer_A. În ISR-ul corespunzător, următoarea valoare audio este calculată şi scrisă la CCR-ul Timer_A pentru a comuta la un nou factor de umplere PWM. După patru valori de temporizator, este nevoie să se încarce următorul eşantion audio din flash-ul SPI extern. Pentru a începe sarcina, ISR-ul dispune de un Status Register modificat pe stivă, pentru a menţine CPU-ul în mod activ după instrucţiunea RETI şi în main(), CPU-ul citeşte următoarea valoare a eşantionului audio din flash-ul SPI extern. Acest lucru continuă până ce ultima valoare de eşantion audio a fost citită de la flash-ul SPI extern. Timer_A este apoi oprit şi CPU intră în modul deep sleep LPM4 aşteptând ca butonul să fie din nou apăsat.
Sistemul propriu-zis utilizează eşantioane de 8-biţi cu o rată de eşantionare de 8 kbps. Cu PWM-ul care funcţionează la o frecvenţă de 32 kHz, ratele de eşantionare de 16 ksps şi 32 ksps pot fi uşor implementate. Cu diferite frecvenţe PWM, este disponibilă o mare varietate de rate de eşantionare.
Dacă este necesară o rezoluţie mai mare decât 8 bps (bits per sample), limitarea este frecvenţa maximă a sistemului. Un bit în plus pentru rezoluţie dublează frecvenţa de ceas necesară pentru oscilator. Deci, pentru o rezoluţie de 9-biţi este necesară o frecvenţă de ceas Timer_A de 16 MHz.
Dimensiunea software-ului demonstrativ de redare audio în limbaj C este:
– 786 byte de memorie cod;
– 68 byte of memorie de date.
Dimensiunea codului şi a datelor poate fi redusă prin optimizare, prin codarea în limbaj de asamblare.
Cu MSP430 sunt posibili algoritmi de compresie simpli, iar raportul de aplicaţie al Texas Instruments ‘Speech and Sound Compression/Decompression With MSP430’ (SLAA361) descrie un algoritm de compresie/decompresie ADPCM (Adaptive Differential Pulse Code Modulation) IMA şi paşii pentru utilizarea librăriei ADPCM pe MSP430.

Concluzie
Redarea audio cu PWM este o cale simplă de a adăuga noi caracteristici la un produs. Cu un flash SPI extern, aproape fiecare dispozitiv MSP430 poate reda semnale audio fără a avea nevoie de circuite externe de voce. Sunetele pot fi adăugate uşor la aplicaţiile existente deoarece dimensiunile de cod necesare şi cerinţele hardware sunt minime. În combinaţie cu compresia sunetului, cum este ADPCM, cerinţele de dimensiune ale memoriei pentru flash-ul SPI extern pot de asemenea să fie reduse.

7. Referinţe bibliografice
1. Speech and Sound Compression/Decompression With MSP430 (Texas Instruments SLAA361)
2. Using PWM Timer_B as a DAC (Texas Instruments SLAA116)

Contact:
Irina Marin
irina.marin@ecas.ro
ECAS ELECTRO
Tel: 021 204 81 00
Fax: 021 204 81 30
birou.vanzari@ecas.ro

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

  • Folosim datele dumneavoastră cu caracter personal NUMAI pentru a răspunde comentariilor/solicitărilor dumneavoastră.
  • Pentru a primi raspunsuri adecvate solicitărilor dumneavoastră, este posibil să transferăm adresa de email și numele dumneavoastră către autorul articolului.
  • Pentru mai multe informații privind politica noastră de confidențialitate și de prelucrare a datelor cu caracter personal, accesați link-ul Politica de prelucrare a datelor (GDPR) si Cookie-uri.
  • Dacă aveți întrebări sau nelămuriri cu privire la modul în care noi prelucrăm datele dumneavoastră cu caracter personal, puteți contacta responsabilul nostru cu protecția datelor la adresa de email: gdpr@esp2000.ro
  • Abonați-vă la newsletter-ul revistei noastre