Inhoudsopgave:

MSP430 Breadboard Audio Spectrum Analyser - Ajarnpa
MSP430 Breadboard Audio Spectrum Analyser - Ajarnpa

Video: MSP430 Breadboard Audio Spectrum Analyser - Ajarnpa

Video: MSP430 Breadboard Audio Spectrum Analyser - Ajarnpa
Video: MSP430 Breadboard Audio Spectrum Analyser 2024, November
Anonim
Image
Image
MSP430 Breadboard Audio Spectrum Analyser
MSP430 Breadboard Audio Spectrum Analyser

Dit project is gebaseerd op microfoons en vereist minimale externe componenten. Er worden 2 x LR44-muntcellen gebruikt, zodat ik de hele structuur kan laten werken binnen de grenzen van een mini-breadboard met 170 tie-point. ADC10, TimerA interrupt LPM wake-up, TimerA PWM-achtige output, knopgebruik, gehele rekenkunde worden gebruikt en gedemonstreerd.

Functies

  • 8 bit integer FFT 16 samples bij 500Hz scheiding
  • toont 8 amplitudes van 1K, 1.5K, 2K, 3K, 4K, 5K, 6K, 7.5K niet-lineair
  • gedeeltelijke logaritmekaart om amplitudes weer te geven, beperkt omdat de resolutie is verlaagd voor 8 bit FFT
  • TLC272 eentraps microfoon versterkt met 100x 100x gain (u kunt ervaren met 2 podia)
  • menu selecteerbaar optioneel Hamming-venster
  • menu aanpassen 4 niveaus helderheid:
  • menu aanpassen 8 niveaus sample rate / responstijd
  • 2 x LR44 knoopcel aangedreven "aan boord"

Stap 1: Onderdelen aanschaffen

Het volgende is nodig voor dit project:

  • MSP430G2452 (de extra chip van TI Launchpad G2 of een 4K 20-pins MSP430G-serie MCU)
  • een 170 tie-point mini breadboard of perf board voor pre-amp constructiea
  • TLC272 Dubbele op-amp
  • mini electret microfoon
  • 47k (pull-up), 100k, 2 x 10k, 1k weerstanden
  • 1x 0.1uF
  • jumperdraden
  • dubbele rij mannelijke pin header te gebruiken voor batterijhouder
  • 2 x LR44 knoopcelbatterij

Stap 2: Lay-out van componenten plannen

Het project wordt gebouwd op een mini breadboard met 170 tie-point. De lay-out van componenten is zoals hieronder weergegeven. Bijzonder is dat de 8x8 LED-matrix bovenop de MSP430 MCU moet worden geplaatst. Naast componenten zijn er ook verbindingsdraden afgebeeld met "+------+" karakters.

G V+ Gnd (1 stage layout) WIJ GEBRUIKEN DEZE 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 en r1 delen dezelfde pin en laten |. niet zien +. +--+--+--+ | +--+--+--+--+--+--+--+--+--+ | *mogelijke toepassing om c6 + c0 + r1 te hebben | | |V+ | | |G b6 b7 T R a7 a6 b5 b4 b3| | dit zal b6 vrijmaken voor 32khz xtal klok | | | TLC272 | | | | | | | uit - + G| | |+ a0 a1 a2 a3 a4 a5 b0 b1 b2| | | +. +--+--+--+ | +--+--+--+--+--+--+--+--+--+ | | o||o oo. +--+.. R4 R6 C1 C2 R7 C4 R5 R2 | |…. o-[10k]--o……… | |. o-[1k]o oo………._. | | o----[10k]-----------o……. o o | +================================================= ====+.1uF 100k 10k ADC-knop +-----------------+

we gebruiken slechts één fase van de TLC272

Stap 3: Montage

samenkomst
samenkomst
samenkomst
samenkomst

U kunt beginnen met het plaatsen van componenten op basis van de breadboard-indeling. Omdat het ASCII-kunst is, is het misschien niet erg duidelijk. U kunt in deze stap koppelen met de foto's om alle verbindingen te identificeren.

Er moet op worden gelet dat de IC-chips worden geplaatst. Er staat meestal een stip op een van de hoeken om pin 1 van een apparaat aan te geven.

Ik had CAT5-ethernetkabeldraden gebruikt en ze zijn heel gemakkelijk om aan breadboard-projecten te werken. Als je oude CAT5-kabels hebt, kun je deze openknippen en je zult zien dat er 6 gedraaide draden in zitten. Ze zijn perfect voor breadboards.

Stap 4: Firmware compileren en laden

Broncode bevindt zich meestal op mijn github-repository's.

Voor dit specifieke project is het enkele C-bronbestand nfft.c gebundeld in mijn breadboard-verzamelingsrepository. Je hebt alleen nfft.c. nodig

Ik gebruik mps430-gcc om de firmware te compileren, maar het zou goed moeten gaan met TI CCS. U kunt alle problemen van het installeren van IDE's of compilers vermijden door naar TI CCS cloud te gaan, een webgebaseerde IDE. Het zal zelfs de firmware downloaden naar uw doelapparaat.

Dit is een voorbeeldcompilatieopdracht met schakelaars

msp430--gcc -Os -Wall -ffunction-sections -fdata-sections -fno-inline-small-functions -Wl, -Map=nfft.map, --cref -Wl, --relax -Wl, --gc- secties -I/energia-0101E0016/hardware/msp430/cores/msp430 -mmcu=msp430g2553 -o nfft.elf nfft.c

Ik gebruik een TI Launchpad G2 als programmeur om de MCU te programmeren.

Stap 5: Begrijp het circuit

Begrijp het circuit
Begrijp het circuit
Begrijp het circuit
Begrijp het circuit

Het schakelschema wordt hieronder weergegeven:

MSP430G2452 of vergelijkbaar, heeft 4K Flash TLC272 Dual Op-Amp nodig, GBW @1.7Mhz, @x100 gain, bandbreedte tot 17Khz

* we gebruiken slechts één fase van de TLC272

._.

| MSP430G2452 | Vcc | | | +-----------------------2|ADC0 |1--+ | | | |. | Vcc | | | | optrekken (47k) Vcc Vcc | --------------- | | | |_| | | +-1|----. Vcc|8-+ | | | |. |. |. | ^.---|7 | |16-+ | |10k | |10k | | | / / ^ | | | |_| |_| 100k|_| | /_+\ / / | | /|--- (zie breadboard-indeling) |.1u | | | | | /_+\ | | / |------_ +--||---|-[1k]--+-2|---+ | | | | | 15 GPIO | | | | +----------3|-----+ +-|--|6 | P1.1-P1.7| | 8x8 | | | +-4|Gnd +--|5 | P2.0-P2.7| | LED | |+ | | --------------- | | | matrix| ((O)) |. | | / | |_| |MIC | |10k | +-20|Gnd \|-------- | |_| | | |_| _|_ _|_ _|_ _|_ /// /// /// ///

LED rijden

De LED-matrix bestaat uit 8 x 8 elementen. Ze worden aangedreven door 15 GPIO-pinnen. Ze zijn gemultiplext met 8 rijen en 8 kolommen. Aangezien er slechts 15 pinnen zijn nadat we 1 pin hebben gebruikt voor ADC-invoer, heeft de multiplexing rij 1 en kolom 0 die een enkele pin delen. Dit betekent dat de betreffende LED op rij 1 en kolom 0 niet kan branden. Dit is een compromis omdat er gewoon niet genoeg GPIO-pinnen zijn om alle LED-elementen aan te sturen.

Geluidsopname

Geluid wordt vastgelegd via de ingebouwde condensatormicrofoon op het Educational BoosterPack. Omdat microfoonsignalen klein zijn, moeten we deze versterken tot een niveau dat de msp430 ADC10 kan gebruiken met een redelijke resolutie. Ik had hiervoor een tweetraps op-amp versterker gebruikt.

De op-amp versterker bestaat uit twee trappen, elk met een versterking van ongeveer 100x. Ik had de TLC272 aangenomen omdat het ook een veel voorkomend onderdeel is en het werkt met 3V. De versterkingsbandbreedte van ongeveer 1,7 Mhz betekent dat we voor onze winst van 100x alleen kunnen garanderen dat het goed zou werken (d.w.z. de gewenste versterking behouden) onder de 17 Khz. (1,7 MHz / 100).

Oorspronkelijk was ik van plan om deze spectrumanalysator tot 16-20Khz te laten meten, maar uiteindelijk ontdekte ik dat ongeveer 8Khz goed genoeg is om muziek te laten zien. Dit kan worden gewijzigd door de LM358 te vervangen door iets met audiokwaliteit en de bemonsteringsfrequentie te wijzigen. Zoek gewoon naar de versterkingsbandbreedte van de op-amps die u kiest.

Sampling en FFT

De gebruikte FFT-functie is de "fix_fft.c"-code die door veel projecten is overgenomen en die al enkele jaren op het internet rondzweeft. Ik had een 16-bits versie en een 8-bits versie geprobeerd. Uiteindelijk heb ik genoegen genomen met de 8-bits versie, omdat ik voor mijn doel geen grote vooruitgang zag op de 16-bits versie.

Ik heb geen goed begrip van het FFT-mechanisme, behalve dat het een conversie van tijdsdomein naar frequentiedomein is. Dat betekent dat de snelheid (tijd) van de geluidssamples, na invoer naar de FFT-berekeningsfunctie, de frequentie van de amplitude die ik als resultaat krijg, zal beïnvloeden. Dus door de snelheid aan te passen om geluid te samplen, kan ik de frequentieband als resultaat bepalen.

TimerA 0 CCR0 wordt gebruikt om de bemonsteringstijd te behouden. We bepalen eerst de tellingen die we nodig hebben om de bandfrequentie te bereiken (komt overeen met onze DCO-kloksnelheid van 16 Mhz). d.w.z. TA0CCR0 ingesteld op (8000/(BAND_FREQ_KHZ*2))-1; waar BAND_FREQ_KHZ voor mij 8 is. Het kan worden gewijzigd als je een betere op-amp hebt en/of het anders wilt.

Frequentiebanden en amplitudeschaling

De firmware verwerkt 16 banden in één beweging en de opnametiming produceert een scheiding van 500 Hz tussen deze banken. De LED-matrix bestaat uit 8 kolommen en geeft slechts 8 banden / amplitudes weer. In plaats van één per twee banden weer te geven, wordt een niet-lineaire frequentiebandlijst gebruikt om de meer dynamische frequentiebanden (in termen van muziek) te tonen. De lijst bevat hiaten van 500 Hz aan de lage kant, hiaten van 1 kHz in de middenbanden en 1,5 kHz-banden in de hoge tonen.

De amplitude van individuele banden wordt verkleind tot 8 niveaus, die worden weergegeven door het aantal horizontale 'dots' op het LED-matrixdisplay. De amplitudeniveaus worden verkleind via een niet-lineaire kaart die FFT-resultaten vertaalt naar een van de 8 stippen. Er wordt een soort logaritmische schaling gebruikt omdat deze het beste onze perceptie van geluidsniveaus weergeeft.

Er is ingebouwde AGC-logica en de spectrumanalysator zal proberen de amplitudeniveaus te verlagen wanneer er meerdere piekniveaus zijn gedetecteerd in de vorige cycli. Dit doe je met een schuifliniaal vergelijkingstabel.

Stap 6: Het apparaat bedienen

  • Door kort op de toets te drukken in de weergavemodus bladert u door de weergave zonder stip, één stip, 2 stippen en 3 stippen.
  • Lang indrukken gaat naar de instellingsmodus, daarna lang indrukken draait door het menu.
  • Menu-items doorlopen 'Hamming Window Option', 'Dimmer', 'Sampling / Refresh Rate'.
  • In de instelmodus 'Hamming Window', kort indrukken door niet hamming, hamming 1, hamming 2, hamming 3, lang indrukken bevestigt de instelling.
  • In de instelmodus 'Dimmer' schakelt kort indrukken door de beschikbare helderheidsniveaus van 0 tot 3, lang indrukken bevestigt de instelling.
  • In de instelmodus 'Sampling/Vernieuwingsfrequentie' schakelt kort indrukken door de beschikbare verversingsfrequenties van 0 tot 7, 0 betekent geen vertraging, lang indrukken bevestigt de instelling.
  • Led-segment multiplexing omvat tijdvertragingen om helderheidsverschillen voor individuele rijen te compenseren.

Aanbevolen: