Taula de continguts:
- Pas 1: consideracions tècniques
- Pas 2: components necessaris
- Pas 3: construcció
- Pas 4: el codi
- Pas 5: Ús
Vídeo: Generador de formes d'ona Arduino: 5 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
Actualització de febrer de 2021: consulteu la nova versió amb una freqüència de mostreig de 300 vegades superior, basada en el Raspberry Pi Pico
Al laboratori, sovint es necessita un senyal repetitiu d’una certa freqüència, forma i amplitud. Pot ser provar un amplificador, comprovar un circuit, un component o un actuador. Hi ha disponibles generadors de formes d'ona potents comercialment, però és relativament fàcil fer-ne un d'útil amb un Arduino Uno o un Arduino Nano; vegeu, per exemple:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Aquí teniu la descripció d’un altre amb les funcions següents:
* Formes d'ona precises: sortida de 8 bits mitjançant R2R DAC, forma de 256 mostres
* Ràpid: freqüència de mostreig de 381 kHz
* Precís: rang de freqüències de passos de 1 MHz. Tan precís com el vidre Arduino.
* Fàcil operació: configurable en forma d'ona i freqüència amb un únic codificador rotatori
* Àmplia gamma d'amplituds: milivolts a 20V
* 20 formes d'ona predefinides. Senzill per afegir-ne més.
* Fàcil de fer: Arduino Uno o Nano més components estàndard
Pas 1: consideracions tècniques
Realització d’un senyal analògic
Una de les deficiències de l’Arduino Uno i Nano és que no disposa d’un convertidor digital-analògic (DAC), de manera que no és possible fer-lo sortir una tensió analògica directament als pins. Una solució és l’escala R2R: es connecten 8 pins digitals a una xarxa de resistències de manera que es poden assolir 256 nivells de sortida. Mitjançant l'accés directe al port, l'Arduino pot configurar 8 pins simultàniament amb una sola comanda. Per a la xarxa de resistències, es necessiten 9 resistències amb valor R i 8 amb valor 2R. He utilitzat 10kOhm com a valor de R, que manté el corrent dels pins a 0,5 mA o menys. Suposo que R = 1kOhm també podria funcionar, ja que l’Arduino pot lliurar fàcilment 5 mA per pin, 40 mA per port. És important que la proporció entre les resistències R i 2R sigui realment 2. Això s’aconsegueix més fàcilment posant 2 resistències de valor R en sèrie, per a un total de 25 resistències.
Acumulador de fase
La generació d’una forma d’ona passa a enviar repetidament una seqüència de números de 8 bits als pins Arduino. La forma d'ona s'emmagatzema en una matriu de 256 bytes i aquesta matriu es mostra i s'envia als pins. La freqüència del senyal de sortida es determina per la velocitat amb què s’avança a través de la matriu. Una manera robusta, precisa i elegant de fer-ho és amb un acumulador de fase: s’incrementa un nombre de 32 bits a intervals regulars i fem servir els 8 bits més significatius com a índex de la matriu.
Mostreig ràpid
Les interrupcions permeten obtenir mostres a moments ben definits, però la sobrecàrrega de les interrupcions limita la freqüència de mostreig a ~ 100 kHz. Un bucle infinit per actualitzar la fase, provar la forma d'ona i configurar els pins necessita 42 cicles de rellotge, aconseguint així una freqüència de mostreig de 16 MHz / 42 = 381 kHz. Girar o empènyer el codificador rotatiu provoca un canvi de pin i una interrupció que surt del bucle per canviar la configuració (forma d'ona o freqüència). En aquesta etapa, es recalculen els 256 números de la matriu, de manera que no cal realitzar càlculs reals de la forma d'ona al bucle principal. La freqüència màxima absoluta que es pot generar és de 190 kHz (la meitat de la freqüència de mostreig), però només hi ha dues mostres per període, de manera que no hi ha molt control de la forma. Per tant, la interfície no permet establir la freqüència per sobre de 100 kHz. A 50 kHz, hi ha 7-8 mostres per període i a 1,5 kHz i per sota de tots els 256 números emmagatzemats a la matriu es mostren cada període. Per a les formes d'ona on el senyal canvia sense problemes, per exemple l'ona sinusoïdal, saltar mostres no és cap problema. Però per a formes d'ona amb pics estrets, per exemple, una ona quadrada amb un petit cicle de treball, hi ha el perill que per a freqüències superiors a 1,5 kHz que falten una sola mostra es pugui produir que la forma d'ona no es comporti com s'esperava.
Precisió de la freqüència
El nombre d’increment de la fase a cada mostra és proporcional a la freqüència. Per tant, la freqüència es pot establir a una precisió de 381kHz / 2 ^ 32 = 0,089mHz. A la pràctica, aquesta precisió gairebé no es necessita, de manera que la interfície limita per establir la freqüència en passos d'1 MHz. La precisió absoluta de la freqüència està determinada per la precisió de la freqüència de rellotge Arduino. Això depèn del tipus Arduino, però la majoria especifica una freqüència de 16.000 MHz, de manera que una precisió de ~ 10 ^ -4. El codi permet modificar la proporció de la freqüència i l'increment de fase per corregir les petites desviacions de la suposició de 16 MHz.
Memòria intermèdia i amplificació
La xarxa de resistències té una impedància de sortida elevada, de manera que la seva tensió de sortida cau ràpidament si s’adjunta una càrrega. Això es pot solucionar emmagatzemant o amplificant la sortida. Aquí, la memòria intermèdia i l'amplificació es fan amb un opamp. Vaig utilitzar el LM358 perquè en tenia. És un opamp lent (velocitat de gir de 0,5 V per microsegon), de manera que a alta freqüència i amplitud alta el senyal es distorsiona. Una bona cosa és que pot manejar tensions molt properes a 0V. La tensió de sortida es limita, però, a ~ 2V per sota del carril, de manera que l'ús de + 5V limita la tensió de sortida a 3V. Els mòduls intensius són compactes i econòmics. Alimentant + 20V a l’opamp, pot generar senyals amb tensió de fins a 18V. (NB, l'esquema diu LTC3105 perquè va ser l'únic pas que vaig trobar a Fritzing. En realitat, vaig utilitzar un mòdul MT3608, vegeu les imatges dels passos següents). Decideixo aplicar una atenuació variable a la sortida del R2R DAC i després utilitzar un dels opamps per emmagatzemar el senyal sense amplificació i l’altre per amplificar en 5,7, de manera que el senyal pugui arribar a una sortida màxima d’uns 20V. El corrent de sortida és bastant limitat, ~ 10 mA, de manera que pot ser necessari un amplificador més fort si el senyal vol accionar un altaveu gran o un electroimant.
Pas 2: components necessaris
Per al generador de formes d'ona del nucli
Arduino Uno o Nano
Pantalla LCD de 16x2 + retallador de 20kOhm i resistència de la sèrie 100Ohm per a la retroiluminació
Codificador rotatiu de 5 pins (amb polsador integrat)
25 resistències de 10kOhm
Per al buffer / amplificador
LM358 o un altre opamp dual
mòdul step-up basat en el MT3608
Resistència variable de 50kOhm
Resistència de 10kOhm
Resistència de 47kOhm
Condensador de 1 muF
Pas 3: construcció
Vaig soldar-ho tot en un tauler prototip de 7x9cm, tal com es mostra a la imatge. Com que es va tornar una mica desordenat amb tots els cables, vaig intentar acolorir els cables que porten tensió positiva en vermell i els que porten terra negre.
El codificador que he utilitzat té 5 pins, 3 en un costat i 2 en l’altre costat. El costat amb 3 pins és el codificador real, el costat amb 2 pins és el polsador integrat. Al costat de 3 pins, el pin central s’hauria de connectar a terra, els altres dos pins a D10 i D11. Al costat de 2 pins, un pin s’hauria de connectar a terra i l’altre a D12.
És el més lleig que he fet mai, però funciona. Estaria bé posar-hi un recinte, però ara per ara el treball i el cost addicional no ho justifiquen. El Nano i la pantalla s’uneixen amb capçaleres. No ho tornaria a fer si en construís un de nou. No vaig posar connectors a la placa per captar els senyals. En lloc d’això, els agafo amb cables de cocodril de trossos de filferro de coure que sobresurten, etiquetats de la següent manera:
R: senyal cru del R2R DAC
B - senyal emmagatzemat
A - senyal amplificat
Senyal del temporitzador T des del pin 9
G - terra
+ - Tensió "alta" positiva del mòdul step-up
Pas 4: el codi
El codi, un esbós d’Arduino, s’adjunta i s’ha de penjar a l’Arduino.
S'han predefinit 20 formes d'ona. Hauria de ser senzill afegir qualsevol altra ona. Tingueu en compte que les ones aleatòries omplen la matriu de 256 valors amb valors aleatoris, però el mateix patró es repeteix cada període. Els veritables senyals aleatoris semblen soroll, però aquesta forma d’ona sona molt més com un xiulet.
El codi estableix un senyal d'1 kHz al pin D9 amb TIMER1. Això és útil per comprovar el temps del senyal analògic. Així és com vaig descobrir que el nombre de cicles de rellotge era de 42: si suposo 41 o 43 i genero un senyal d'1 kHz, clarament té una freqüència diferent de la del senyal del pin D9. Amb el valor 42 coincideixen perfectament.
Normalment, Arduino interromp cada mil·lisegon per fer un seguiment del temps amb la funció millis (). Això pertorbaria la generació precisa del senyal, de manera que la interrupció en particular està desactivada.
El compilador diu: "Sketch utilitza 7254 bytes (23%) d'espai d'emmagatzematge del programa. El màxim és de 30720 bytes. Les variables globals utilitzen 483 bytes (23%) de memòria dinàmica, deixant 1565 bytes per a les variables locals. El màxim és de 2048 bytes". Per tant, hi ha un ampli espai per a un codi més sofisticat. Tingueu en compte que potser haureu de triar "ATmega328P (carregador d'arrencada antic)" per carregar-lo correctament al Nano.
Pas 5: Ús
El generador de senyal es pot alimentar simplement mitjançant el cable mini-USB de l’Arduino Nano. Es fa millor amb un banc de potència, de manera que no hi hagi cap bucle de terra accidental amb l’aparell amb el qual es pugui connectar.
Quan l’engegueu generarà una ona sinusoïdal de 100Hz. En girar el comandament, es pot triar un dels altres 20 tipus d’ona. En girar mentre es prem, el cursor es pot configurar en qualsevol dels dígits de la freqüència, que després es pot canviar al valor desitjat.
L'amplitud es pot regular amb el potenciòmetre i es pot utilitzar el senyal tamponat o amplificat.
És molt útil utilitzar un oscil·loscopi per comprovar l’amplitud del senyal, sobretot quan el senyal subministra corrent a un altre dispositiu. Si s’extreu massa corrent, el senyal es retallarà i el senyal es distorsionarà molt
Per a freqüències molt baixes, la sortida es pot visualitzar amb un LED en sèrie amb una resistència de 10kOhm. Les freqüències d'àudio es poden escoltar amb un altaveu. Assegureu-vos de configurar el senyal molt petit ~ 0,5 V, en cas contrari, el corrent augmenta massa i el senyal comença a retallar-se.
Recomanat:
NeckLight V2: collarets brillants amb formes, colors i llums: 10 passos (amb imatges)
NeckLight V2: collarets brillants amb formes, colors i llums: Hola a tothom, després dels primers instructables: NeckLight que vaig publicar, que va ser un gran èxit per a mi, vaig triar fer-ne la V2. V2 és corregir algun error del V1 i tenir més opcions visuals. En aquest Instructables, ex
Formes: aprendre per a tothom amb Makey Makey: 5 passos (amb imatges)
Formes: Aprendre per a tothom amb Makey Makey: els professors ensenyen TOTS els estudiants. De vegades, el nostre aprenentatge ha de ser diferent segons l’estudiant. A continuació es mostra un exemple d’una lliçó senzilla que podeu crear per assegurar-vos que tots els vostres estudiants treballin en habilitats essencials. Aquest projecte funcionaria bé
Funció DIY / Generador de formes d'ona: 6 passos (amb imatges)
Funció DIY / Generador de formes d'ona: en aquest projecte veurem breument els generadors de funcions / formes d'ona comercials per tal de determinar quines característiques són importants per a una versió de DIY. Després us mostraré com crear un simple generador de funcions, l'analògic i el dígit
Generador d'ona sinusoïdal de 3 fases basat en Arduino Due: 5 passos
Generador d'ona sinusoïdal de 3 fases basat en Arduino Due: l'objectiu d'aquest recurs és ajudar a algú que intenta utilitzar el major rendiment de Due + manca de referència + full de dades poc útil. Aquest projecte és capaç de generar fins a ona sinusoïdal de 3 fases @ 256 mostres / cicle a freq baixa (< 1 kHz) i 16 s
Generador de formes d'ona de baix cost (0 - 20 MHz): 20 passos (amb imatges)
Generador de formes d'ona de baix cost (0 - 20 MHz): RESUM Aquest projecte prové de la necessitat d'obtenir un generador d'ones amb un ample de banda superior a 10 Mhz i una distorsió harmònica inferior a l'1%, tot això amb un preu de baix cost. Aquest document descriu el disseny d'un generador d'ones amb una amplada de banda superior