Innehållsförteckning:
- Steg 1: Tekniska överväganden
- Steg 2: Obligatoriska komponenter
- Steg 3: Konstruktion
- Steg 4: Koden
- Steg 5: Användning
Video: Arduino Waveform Generator: 5 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:41
Uppdatering från februari 2021: kolla in den nya versionen med 300x samplingshastigheten, baserat på Raspberry Pi Pico
I labbet behöver man ofta en repetitiv signal med en viss frekvens, form och amplitud. Det kan vara att testa en förstärkare, kolla in en krets, en komponent eller ett ställdon. Kraftfulla vågformsgeneratorer finns kommersiellt tillgängliga, men det är relativt enkelt att göra en användbar själv med en Arduino Uno eller Arduino Nano, se till exempel:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Här är beskrivningen av en annan med följande funktioner:
* Exakta vågformer: 8-bitars utmatning med R2R DAC, 256-samplingsform
* Snabb: 381 kHz samplingshastighet
* Exakt: 1mHz steg frekvensområde. Lika exakt som Arduino -kristallen.
* Enkel drift: vågform och frekvensinställbar med en enda roterande pulsgivare
* Brett spektrum av amplituder: millivolt till 20V
* 20 fördefinierade vågformer. Enkelt att lägga till mer.
* Lätt att göra: Arduino Uno eller Nano plus standardkomponenter
Steg 1: Tekniska överväganden
Gör en analog signal
En nackdel med Arduino Uno och Nano är att den inte har en digital-till-analog (DAC) -omvandlare, så det är inte möjligt att få den att mata ut en analog spänning direkt på stiften. En lösning är R2R -stegen: 8 digitala stift är anslutna till ett motståndsnätverk så att 256 utgångsnivåer kan nås. Genom direkt portåtkomst kan Arduino ställa in 8 stift samtidigt med ett enda kommando. För motståndsnätverket behövs 9 motstånd med värde R och 8 med värde 2R. Jag använde 10kOhm som ett värde för R, som håller strömmen från stiften till 0,5mA eller mindre. Jag antar att R = 1kOhm också kan fungera, eftersom Arduino enkelt kan leverera 5mA per stift, 40mA per port. Det är viktigt att förhållandet mellan R- och 2R -motstånden verkligen är 2. Det uppnås lättast genom att sätta 2 motstånd av värde R i serie, för totalt 25 motstånd.
Fasackumulator
Att generera en vågform kommer sedan till att repetitivt skicka en sekvens med 8-bitars nummer till Arduino-stiften. Vågformen lagras i en array med 256 byte och denna array samplas och skickas till stiften. Frekvensen för utsignalen bestäms av hur snabbt man går fram genom gruppen. Ett robust, exakt och elegant sätt att göra det på är med en fasackumulator: ett 32-bitars tal ökas med jämna mellanrum och vi använder de 8 mest betydande bitarna som index för matrisen.
Snabb provtagning
Avbrott gör det möjligt att sampla vid väldefinierade tidpunkter, men omkostnaderna för avbrott begränsar samplingsfrekvensen till ~ 100 kHz. En oändlig slinga för att uppdatera fasen, sampla vågformen och ställa in stiften tar 42 klockcykler och får därmed en samplingshastighet på 16 MHz/42 = 381 kHz. Om du vrider eller trycker på den roterande givaren orsakas ett stiftbyte och ett avbrott som går ut ur slingan för att ändra inställningen (vågform eller frekvens). I detta skede beräknas 256 siffror i gruppen om så att inga faktiska beräkningar av vågformen behöver utföras i huvudslingan. Den absoluta maximala frekvensen som kan genereras är 190kHz (hälften av samplingshastigheten) men då finns det bara två samplingar per period, så inte mycket kontroll över formen. Gränssnittet tillåter således inte att ställa in frekvensen över 100 kHz. Vid 50 kHz finns det 7-8 samplingar per period och vid 1,5 kHz och under alla 256 nummer lagrade i arrayen samplas varje period. För vågformer där signalen ändras smidigt, till exempel sinusvåg, är det inga problem att hoppa över prover. Men för vågformer med smala spikar, till exempel en fyrkantvåg med en liten arbetscykel, finns risken att för frekvenser över 1,5 kHz som saknas kan ett enda sampel resultera i att en vågform inte beter sig som förväntat
Frekvensens noggrannhet
Antalet med vilket fasen ökas vid varje prov är proportionell mot frekvensen. Frekvensen kan därmed ställas in till en noggrannhet på 381kHz/2^32 = 0,089mHz. I praktiken behövs sådan noggrannhet aldrig, så gränssnittet begränsar för att ställa in frekvensen i steg om 1mHz. Frekvensens absoluta precision bestäms av precisionen hos Arduino -klockfrekvensen. Detta beror på Arduino-typen men de flesta anger en frekvens på 16.000 MHz, så en precision på ~ 10^-4. Koden gör det möjligt att ändra förhållandet mellan frekvensen och fasökningen för att korrigera för små avvikelser från 16MHz -antagandet.
Buffering och förstärkning
Motståndsnätverket har en hög utgångsimpedans, så dess utspänning sjunker snabbt om en belastning är ansluten. Det kan lösas genom att buffra eller förstärka utmatningen. Här görs buffringen och förstärkningen med en opamp. Jag använde LM358 eftersom jag hade några. Det är en långsam opamp (svag hastighet 0,5V per mikrosekund) så vid hög frekvens och hög amplitud blir signalen förvrängd. En bra sak är att den klarar spänningar mycket nära 0V. Utgångsspänningen är dock begränsad till ~ 2V under skenan, så med användning av +5V effekt begränsas utspänningen till 3V. Stegmoduler är kompakta och billiga. Matar +20V till opampen, den kan generera signaler med spänning upp till 18V. (OBS, schemat visar LTC3105 eftersom det var det enda steget jag hittade i Fritzing. I verkligheten använde jag en MT3608-modul, se bilder i nästa steg). Jag väljer att tillämpa en variabel dämpning på utgången från R2R DAC och använd sedan en av opamparna för att buffra signalen utan förstärkning och den andra för att förstärka med 5,7, så att signalen kan nå en maximal uteffekt på cirka 20V. Utgångsströmmen är ganska begränsad, ~ 10mA, så en starkare förstärkare kan behövas om signalen ska driva en stor högtalare eller elektromagnet.
Steg 2: Obligatoriska komponenter
För kärnvågformsgeneratorn
Arduino Uno eller Nano
16x2 LCD -skärm + 20kOhm trimmer och 100Ohm seriemotstånd för bakgrundsbelysning
5-stifts roterande givare (med integrerad tryckknapp)
25 motstånd på 10 kOhm
För bufferten/förstärkaren
LM358 eller annan dubbel opamp
steg-upp modul baserad på MT3608
50kOhm variabelt motstånd
10kOhm motstånd
47kOhm motstånd
1muF kondensator
Steg 3: Konstruktion
Jag lödde allt på ett 7x9cm prototypkort, som visas på bilden. Eftersom det blev lite rörigt med alla trådar försökte jag färga ledningarna som bär positiv spänning röd och de som bär marken svart.
Kodaren jag använde har 5 stift, 3 på ena sidan, 2 på andra sidan. Sidan med 3 stift är den faktiska givaren, sidan med 2 stift är den integrerade tryckknappen. På den 3-poliga sidan ska mittstiftet anslutas till jord, de andra två stiften till D10 och D11. På den 2-poliga sidan ska en stift vara ansluten till jord och den andra till D12.
Det är det fulaste jag någonsin gjort men det fungerar. Det skulle vara trevligt att sätta i ett hölje, men för närvarande motiverar det extra arbetet och kostnaden det inte riktigt. Nano och displayen är fästa med stifthuvuden. Jag skulle inte göra det igen om jag skulle bygga en ny. Jag satte inte kontakter på kortet för att hämta signalerna. Istället plockar jag upp dem med krokodilledningar från utskjutande bitar av koppartråd, märkta enligt följande:
R - rå signal från R2R DAC
B - buffrad signal
A - förstärkt signal
T - timersignal från stift 9
G - mark
+ - positiv "hög" spänning från stegmodulen
Steg 4: Koden
Koden, en Arduino -skiss, är bifogad och bör laddas upp till Arduino.
20 vågformer har fördefinierats. Det borde vara enkelt att lägga till någon annan våg. Observera att de slumpmässiga vågorna fyller 256-värde-arrayen med slumpmässiga värden, men samma mönster upprepas varje period. Sanna slumpmässiga signaler låter som brus, men den här vågformen låter mycket mer som en visselpipa.
Koden ställer in en 1 kHz signal på stift D9 med TIMER1. Detta är användbart för att kontrollera tidpunkten för den analoga signalen. Det var så jag kom på att antalet klockcykler är 42: Om jag antar antingen 41 eller 43 och genererar en 1 kHz signal har den helt klart en annan frekvens än signalen på stift D9. Med värdet 42 matchar de perfekt.
Normalt avbryter Arduino varje millisekund för att hålla reda på tiden med millis () -funktionen. Detta skulle störa den exakta signalgenereringen, så det specifika avbrottet är inaktiverat.
Kompilatorn säger: "Sketch använder 7254 byte (23%) av programlagringsutrymme. Maximalt är 30720 byte. Globala variabler använder 483 byte (23%) dynamiskt minne, vilket ger 1565 byte för lokala variabler. Maximalt är 2048 byte." Så det finns gott om plats för mer sofistikerad kod. Akta dig för att du kanske måste välja "ATmega328P (gammal bootloader)" för att kunna överföra till Nano.
Steg 5: Användning
Signalgeneratorn kan enkelt drivas via mini-USB-kabeln på Arduino Nano. Det görs bäst med en powerbank, så att det inte finns någon oavsiktlig jordslinga med apparaten som den kan anslutas till.
När den är påslagen kommer den att generera en 100Hz sinusvåg. Genom att vrida ratten kan en av de andra 20 vågtyperna väljas. Genom att rotera medan du trycker på den kan markören ställas in på någon av siffrorna i frekvensen, som sedan kan ändras till önskat värde.
Amplituden kan regleras med potentiometern och antingen den buffrade eller förstärkta signalen kan användas.
Det är verkligen bra att använda ett oscilloskop för att kontrollera signalamplituden, särskilt när signalen levererar ström till en annan enhet. Om för mycket ström dras, kommer signalen att klippa ut och signalen blir kraftigt förvrängd
För mycket låga frekvenser kan utgången visualiseras med en LED i serie med ett 10kOhm -motstånd. Ljudfrekvenser kan höras med en högtalare. Se till att ställa in signalen mycket liten ~ 0,5V, annars blir strömmen för hög och signalen börjar klippa.
Rekommenderad:
Generator: Fidget Spinner Generator 3 i 1: 3 -steg
Generator: Fidget Spinner Generator 3 i 1: fidget spinner generator 3 i 1 - nu kan du konfigurera din fidget spinner generator (tre val) mikrogeneratorn använder 3 neodymium sfärer och 3 neodymium skivor (led och små spoljärn mindre) Hitta oss PÅ INSTAGRAM och se en enkel elektrisk
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter - Rc helikopter - RC -plan med Arduino: 5 steg (med bilder)
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter | Rc helikopter | Rc -plan med Arduino: Att driva en Rc -bil | Quadcopter | Drone | RC -plan | RC -båt, vi behöver alltid en mottagare och sändare, antag att för RC QUADCOPTER behöver vi en 6 -kanals sändare och mottagare och den typen av TX och RX är för dyr, så vi kommer att göra en på vår
Generator - DC -generator med Reed Switch: 3 steg
Generator - DC Generator som använder Reed Switch: Enkel DC generator En likström (DC) generator är en elektrisk maskin som omvandlar mekanisk energi till likström. Viktigt: En likström (DC) generator kan användas som likströmsmotor utan konstruktion ändringar
Low Cost Waveform Generator (0 - 20MHz): 20 steg (med bilder)
Low Cost Waveform Generator (0 - 20MHz): ABSTRATH Detta projekt kommer från behovet av att få en våggenerator med en bandbredd över 10 Mhz och en harmonisk distorsion under 1%, allt detta till ett lågt kostnadspris. Detta dokument beskriver en design av en våggenerator med en bandbredd
Self Excite en generator utan någon DC -generator, kondensatorbank eller batteri: 5 steg (med bilder)
Self Excite en Generator Utan någon DC-generator, kondensatorbank eller batteri: Hej! Denna instruerbara är för att konvertera en fält exciterad generator till en själv-exciterad. Fördelen med detta trick är att du inte behöver driva fältet för detta generator med ett 12 volts batteri men istället startar den upp sig själv så att du