Taula de continguts:

Generador de formes d'ona Arduino: 5 passos (amb imatges)
Generador de formes d'ona Arduino: 5 passos (amb imatges)

Vídeo: Generador de formes d'ona Arduino: 5 passos (amb imatges)

Vídeo: Generador de formes d'ona Arduino: 5 passos (amb imatges)
Vídeo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Desembre
Anonim
Generador de formes d'ona Arduino
Generador de formes d'ona Arduino

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ó

Construcció
Construcció
Construcció
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: