Innehållsförteckning:

MSP430 Breadboard Audio Spectrum Analyzer: 6 steg
MSP430 Breadboard Audio Spectrum Analyzer: 6 steg

Video: MSP430 Breadboard Audio Spectrum Analyzer: 6 steg

Video: MSP430 Breadboard Audio Spectrum Analyzer: 6 steg
Video: MSP430 Breadboard Audio Spectrum Analyser 2024, November
Anonim
Image
Image
MSP430 Breadboard Audio Spectrum Analyzer
MSP430 Breadboard Audio Spectrum Analyzer

Detta projekt är mikrofonbaserat och kräver minimala externa komponenter. 2 x LR44 myntceller används så att jag kan få hela strukturen att fungera i gränserna för en 170 tie-point mini-brödbräda. ADC10, TimerA avbrott LPM-väckning, TimerA PWM-liknande utmatning, knappanvändning, heltal aritmetik används och demonstreras.

Funktioner

  • 8 -bitars heltal FFT 16 -sampel vid 500Hz -separation
  • visar 8 amplituder på 1K, 1,5K, 2K, 3K, 4K, 5K, 6K, 7,5K olinjär
  • partiell logaritmkarta för att visa amplituder, begränsad eftersom upplösningen har reducerats för 8 bitars FFT
  • TLC272 enstegsmikrofon förstärker vid 100x gånger 100x förstärkning (du kan uppleva två steg)
  • meny, valfritt Hamming -fönster
  • meny justera ljusstyrkan på 4 nivåer
  • menyjustera 8 nivåer samplingsfrekvens / responstid
  • 2 x LR44 myntcellsdriven "ombord"

Steg 1: Skaffa delar

Följande är vad som behövs för detta projekt

  • MSP430G2452 (extrachipet från TI Launchpad G2, eller någon 4K 20 -stifts MSP430G -serie MCU)
  • en 170 tie-point mini breadboard eller perf board för pre-amp konstruktiona
  • TLC272 Dubbel op-amp
  • mini electret mikrofon
  • 47k (pull-up), 100k, 2 x 10k, 1k motstånd
  • 1 x 0,1 uF
  • bygelkablar
  • dubbelradig manlig stifthuvud som ska användas för batterihållare
  • 2 x LR44 myntcellsbatteri

Steg 2: Planera komponenters layout

Projektet ska byggas på en 170 minipanel med bredd. Komponenternas layout är enligt nedan. Speciellt noterat är att 8x8 LED -matrisen ska placeras ovanpå MSP430 MCU. Bortsett från komponenter finns det också anslutande bygelkablar avbildade med "+------+" tecken.

G V + Gnd (1 etapplayout) VI ANVÄNDER DETTA LAYOUT + ====================================== ================== c0 ………… c7 | MIC……. + -----++-+…. | r0 o o o o o o o o | o || o + ----- [100k] --------------- +….. | r1 X o o o o o o o |. +--------------+-+. C7 C6 R1 C0 R3 C5 C3 R0 |. o o o o o o o o |…… |.. | b6 a7 | | c0 och r1 delar samma pin och visas inte | +. +-+-+-+| +-+-+-+-+-+-+-+-+-+| *möjlig ansökan om att ha c6 + c0 + r1 | | | V+ | | | G b6 b7 T R a7 a6 b5 b4 b3 | | detta frigör b6 för 32khz xtal -klocka | | | TLC272 | | | | | | | ut - + G | | |+ a0 a1 a2 a3 a4 a5 b0 b1 b2 | | | +. +-+-+-+| +-+-+-+-+-+-+-+-+-+| | o || o o o. +-+.. R4 R6 C1 C2 R7 C4 R5 R2 | |…. o- [10k]-o……… | |. o- [1k] o o o………._. | | o ---- [10k] ----------- o……. o o | +==================================================== ====+.1uF 100k 10k ADC-knapp+ -----------------+

vi använder bara ett steg i TLC272

Steg 3: Montering

hopsättning
hopsättning
hopsättning
hopsättning

Du kan börja placera komponenter baserat på panelen layout. Eftersom det är ASCII -konst är det kanske inte särskilt tydligt. Du kan para ihop fotona i det här steget för att identifiera alla anslutningar.

Var noga med att placera IC -chipsen. Det finns vanligtvis en prick på ett av hörnen för att indikera stift 1 på en enhet.

Jag hade använt CAT5 ethernetkablar och de är mycket enkla att arbeta med projekt på brödbrädor. Om du har gamla CAT5 -kablar kan du klippa upp den och du kommer att hitta att det finns 6 vridna trådar inuti. De är perfekta för brödbrädor.

Steg 4: Kompilera och ladda in firmware

Källkoden finns vanligtvis på mina github -förråd.

För det här projektet är den enda C -källfilen nfft.c bunden i mitt förrådssamlingsförråd. Du behöver bara nfft.c

Jag använder mps430-gcc för att kompilera firmware men det borde gå bra med TI CCS. Du kan undvika alla problem med att installera IDE eller kompilatorer genom att gå till TI CCS -molnet, som är ett webbaserat IDE. Det kommer även att ladda ner firmware till din målenhet.

Detta är ett exempel kompilera kommando med switchar

msp430 -gcc -Os -Wall -funktionssektioner -fdata -sektioner -fno -inline -små -funktioner -Wl, -Map = nfft.map, --cref -Wl, --relax -Wl, --gc- sektioner -I/energia -0101E0016/hardware/msp430/cores/msp430 -mmcu = msp430g2553 -o nfft.elf nfft.c

Jag använder en TI Launchpad G2 som programmerare för att programmera MCU.

Steg 5: Förstå kretsen

Förstå kretsen
Förstå kretsen
Förstå kretsen
Förstå kretsen

Kretsschemat visas nedan

MSP430G2452 eller liknande, behöver 4K Flash TLC272 Dual Op-Amp, GBW @1.7Mhz, @x100 gain, bandbredd upp till 17Khz

* vi använder bara ett steg i TLC272

._.

| MSP430G2452 | Vcc | | | + ----------------------- 2 | ADC0 | 1-+ | | | |. | Vcc | | | | pull-up (47k) Vcc Vcc | --------------- | | | | _ | | | +-1 | ----. Vcc | 8-+ | | | |. |. |. | ^.--- | 7 | | 16-+ | | 10k | | 10k | | | / / ^ | | | | _ | | _ | 100k | _ | | / _+\ / / | | /| --- (se panelen layout) |.1u | | | | | /_+\ | | / | ------_+-|| --- |-[1k]-+-2 | ---+| | | | | 15 GPIO | | | | +---------- 3 | ----- + +-|-| 6 | P1.1-P1.7 | | 8x8 | | | +-4 | Gnd +-| 5 | P2.0-P2.7 | | LED | |+ | | --------------- | | | matris | ((O)) |. | | / | | _ | | MIC | | 10k | +-20 | Gnd / | -------- | | _ | | | | _ | _ | _ _ | _ _ | _ _ | _ /// /// /// ///

LED -körning

LED -matrisen består av 8 x 8 element. De drivs av 15 GPIO -stift. De är multiplexerade med 8 rader och 8 kolumnscheman. Eftersom det bara finns 15 stift efter att vi har använt 1 stift för ADC -ingång har multiplexen rad 1 och kolumn 0 som delar en enda stift. Det betyder att den specifika lysdioden på rad 1 och kolumn 0 inte kan tändas. Detta är en kompromiss eftersom det bara inte finns tillräckligt med GPIO -stift för att driva alla LED -element.

Ljudinspelning

Ljud fångas via den inbyggda kondensatormikrofonen på Educational BoosterPack. Eftersom mikrofonsignaler är små måste vi förstärka den till en nivå som msp430 ADC10 kan använda med en rimlig upplösning. Jag hade använt en tvåstegs förstärkare för detta ändamål.

Op-amp-förstärkaren består av två steg, var och en med cirka 100 gånger förstärkning. Jag hade antagit TLC272 eftersom det också är en mycket vanlig del och det fungerar med 3V. Förstärkningsbandbredden är cirka 1,7 Mhz betyder att för vår vinst på 100x kan vi bara garantera att det skulle fungera bra (dvs. behålla den förstärkning vi vill ha) under 17Khz. (1,7 Mhz / 100).

Ursprungligen tänker jag göra denna spektrumanalysator upp till 16-20Khz, men i slutändan fann jag att ca 8Khz är tillräckligt bra för att visa musik. Detta kan ändras genom att byta ut LM358 med något ljudvärde och ändra samplingshastigheten. Leta bara efter förstärkningsbandbredden för de förstärkare du väljer.

Provtagning och FFT

FFT -funktionen som används är "fix_fft.c" -koden som många projekt hade antagit, den har svävat runt på internet i några år. Jag hade testat en 16 -bitarsversion och en 8 -bitarsversion. Så småningom nöjde jag mig med 8 -bitarsversionen som för mitt syfte, jag såg ingen större framsteg på 16 -bitarsversionen.

Jag har ingen god förståelse för FFT -mekanismen förutom att det är en tidsdomän till frekvensdomänkonvertering. Det betyder att frekvensen (tiden) för ljudproverna, efter matning till FFT -beräkningsfunktionen, kommer att påverka frekvensen för amplituden jag får som ett resultat. Så genom att justera hastigheten till samplingsljud kan jag bestämma frekvensbandet som resultatet.

Timer A 0 CCR0 används för att behålla provtagningstiden. Vi bestämmer först de räkningar vi behöver för att uppnå bandfrekvensen (motsvarar vår DCO -klockfrekvens på 16Mhz). dvs. TA0CCR0 inställd på (8000/(BAND_FREQ_KHZ*2))-1; där BAND_FREQ_KHZ är 8 för mig. Det kan ändras om du har en bättre op-amp och / eller vill att det ska vara annorlunda.

Frekvensband och amplitudskalning

Firmware bearbetar 16 band vid ett svep, och inspelningstidpunkten ger 500Hz separation mellan dessa banker. LED -matrisen består av 8 kolumner och visar bara 8 band / amplituder. Istället för att visa vartannat band används en icke-linjär frekvensbandlista för att visa de mer dynamiska frekvensbanden (när det gäller musik). Listan är över 500Hz -gap i den låga änden, 1KHz -luckor i mittenband och 1.5Khz -band i toppnivåer.

Amplituden för enskilda band skalas ner till 8 nivåer, som representeras av antalet horisontella 'prickar' på LED-matrisdisplayen. Amplitudnivåerna skalas ner via en olinjär karta som översätter FFT-resultat till en av de 8 prickar. En sorts logaritmisk skalning används eftersom den bäst representerar vår uppfattning om ljudnivåer.

Det finns inbyggd AGC-logik och spektrumanalysatorn kommer att försöka skala ner amplitudnivåerna när det finns flera toppnivåer som detekterats i de tidigare cyklerna. Detta görs med en glidande linjal jämförande tabell.

Steg 6: Använda enheten

  • Kort knapptryckning i visningsläge går igenom ingen punkt, en punkt, 2 punkter och 3 punkter visas.
  • Långt tryck går in i inställningsläge, efterföljande långt tryck roterar genom menyn.
  • Menyalternativen cyklar genom 'Hamming Window Option', 'Dimmer', 'Sampling / Refresh Rate'.
  • I "Hamming Window" -inställningsläge, korta tryckningar cyklar genom ingen hamning, hamring 1, hamring 2, hamring 3, lång tryckning bekräftar inställningen.
  • I inställningsläget 'Dimmer', korta tryckningar går igenom tillgängliga ljusstyrkenivåer från 0 till 3, lång tryckning bekräftar inställningen.
  • I "Sampling / Refresh rate" inställningsläge, korta tryckningar går igenom tillgängliga uppdateringshastigheter från 0 till 7, 0 betyder ingen fördröjning, lång tryckning bekräftar inställningen.
  • Led -segmentmultiplexering inkluderar tidsfördröjningar för att kompensera för ljusstyrkeskillnader för enskilda rader.

Rekommenderad: