Taula de continguts:

Temporitzadors Arduino: 8 projectes: 10 passos (amb imatges)
Temporitzadors Arduino: 8 projectes: 10 passos (amb imatges)

Vídeo: Temporitzadors Arduino: 8 projectes: 10 passos (amb imatges)

Vídeo: Temporitzadors Arduino: 8 projectes: 10 passos (amb imatges)
Vídeo: Increíble Robot de Control Remoto hecho con cartón en casa 2024, Desembre
Anonim
Temporitzadors Arduino: 8 projectes
Temporitzadors Arduino: 8 projectes

L'Arduino Uno o Nano poden generar senyals digitals precisos en sis pins dedicats mitjançant els tres temporitzadors integrats. Només requereixen unes quantes ordres per configurar i no fan servir cicles de CPU per executar-se.

Utilitzar els temporitzadors pot ser intimidant si es parteix del full de dades complet ATMEGA328, que té 90 pàgines dedicades a la seva descripció. Diverses ordres Arduino incorporades ja utilitzen els temporitzadors, per exemple millis (), delay (), tone (), AnalogWrite () i la servoteca. Però per utilitzar tota la seva potència, els haureu de configurar a través dels registres. Comparteixo aquí algunes macros i funcions per fer-ho més fàcil i transparent.

Després d'una breu descripció general dels temporitzadors, seguiu 8 projectes interessants que depenen de la generació de senyal amb els temporitzadors.

Pas 1: components necessaris

Components obligatoris
Components obligatoris

Per fer els vuit projectes necessitareu:

  • Un Arduino Uno o compatible
  • Un prototip d’escut amb mini protoborda
  • 6 cables de pont de taula
  • 6 ponts de taula curts (fes-te a partir de filferro de connexió de nucli sòlid de 10 cm)
  • 2 cables de cocodril
  • 1 LED blanc de 5 mm
  • una resistència de 220 Ohm
  • una resistència de 10kOhm
  • un potenciòmetre de 10kOhm
  • 2 condensadors ceràmics 1muF
  • 1 condensador electrolític de 10 muF
  • 2 díodes, 1n4148 o similar
  • 2 micro servomotors SG90
  • 1 altaveu de 8 Ohm
  • 20 m de filferro esmaltat fi (0,13 mm)

Pas 2: Visió general dels temporitzadors Arduino per a la generació de senyals

El temporitzador 0 i el temporitzador 2 són temporitzadors de 8 bits, és a dir, que poden comptar de 0 a 255 com a màxim. El temporitzador 1 és un temporitzador de 16 bits, de manera que pot comptar fins a 65535. Cada temporitzador té dos pins de sortida associats: 6 i 5 per al temporitzador0, 9 i 10 per al temporitzador1, 11 i 3 per al temporitzador2. El temporitzador s'incrementa a cada cicle de rellotge d'Arduino o a una velocitat reduïda per un factor de prescala, que és 8, 64, 256 o 1024 (32 i 128 també estan permesos per al temporitzador2). Els temporitzadors compten de 0 a "TOP" i després de nou (PWM ràpid) o cap avall (PWM de fase correcta). El valor de "TOP" determina així la freqüència. Els pins de sortida es poden configurar, restablir o capgirar al valor del registre de comparació de sortida, de manera que aquests determinen el cicle de treball. Només el temporitzador 1 té la capacitat de configurar independentment la freqüència i els cicles de treball per a tots dos pins de sortida.

Pas 3: LED parpelleja

Image
Image
LED parpelleja
LED parpelleja
LED parpelleja
LED parpelleja

La freqüència més baixa que es pot arribar amb els temporitzadors de 8 bits és de 16 MHz / (511 * 1024) = 30, 6 Hz. Per tant, per fer parpellejar un LED amb 1Hz, necessitem el temporitzador 1, que pot assolir freqüències 256 vegades més petites, 0,12 Hz.

Connecteu un LED amb el seu ànode (pota llarga) al pin9 i connecteu el càtode amb una resistència de 220 Ohm a terra. Pengeu el codi. El LED parpellejarà exactament a 1Hz amb un cicle de treball del 50%. La funció loop () està buida: el temporitzador s’inicialitza a setup () i no necessita cap més atenció.

Pas 4: regulador de llum LED

Image
Image
Dimmer LED
Dimmer LED
Dimmer LED
Dimmer LED

La modulació d’amplada de pols és una manera eficaç de regular la intensitat d’un LED. Amb un conductor adequat, també és el mètode preferit per regular la velocitat dels electromotors. Com que el senyal està 100% encès o 100% de descompte, no es gasta energia en una resistència de sèrie. Bàsicament, és com parpellejar el LED més ràpid del que l’ull pot seguir. 50Hz és, en principi, suficient, però pot semblar que parpelleja una mica i, quan el LED o els ulls es mouen, pot resultar un molest “rastre” no continu. Utilitzant una escala prèvia de 64 amb un temporitzador de 8 bits, obtenim 16 MHz / (64 * 256) = 977 Hz, que s’adapti a l’objectiu. Seleccionem el temporitzador2, de manera que el temporitzador1 continua disponible per a altres funcions i no interferim amb la funció Arduino time (), que utilitza el temporitzador0.

En aquest exemple, el cicle de treball, i per tant la intensitat, està regulat per un potenciòmetre. Un segon LED es pot regular independentment amb el mateix temporitzador al pin 3.

Pas 5: convertidor digital a analògic (DAC)

Image
Image
Convertidor digital a analògic (DAC)
Convertidor digital a analògic (DAC)
Convertidor digital a analògic (DAC)
Convertidor digital a analògic (DAC)

L'Arduino no té una sortida analògica real. Alguns mòduls prenen una tensió analògica per regular un paràmetre (contrast de visualització, llindar de detecció, etc.). Amb només un condensador i resistència, el timer1 es pot utilitzar per crear una tensió analògica amb una resolució de 5 mV o millor.

Un filtre de pas baix pot "fer mitjana" el senyal PWM a una tensió analògica. Un condensador està connectat mitjançant una resistència a un pin PWM. Les característiques estan determinades per la freqüència PWM i els valors de la resistència i del condensador. La resolució dels temporitzadors de 8 bits seria de 5V / 256 = 20mV, de manera que optem per Timer1 per obtenir una resolució de 10 bits. El circuit RC és un filtre de pas baix de primer ordre i tindrà una certa ondulació. L'escala de temps del circuit RC hauria de ser molt més gran que el període del senyal PWM per reduir l'ondulació. El període que obtenim per a una precisió de 10 bits és de 1024 / 16MHz = 64mus. Si fem servir un condensador de 1muF i una resistència de 10kOhm, RC = 10ms. La ondulació de pic a pic és com a màxim de 5V * 0,5 * T / (RC) = 16mV, cosa que aquí es considera suficient.

Tingueu en compte que aquest DAC té una impedància de sortida molt alta (10kOhm), de manera que la tensió caurà significativament si treu corrent. Per evitar-ho, es pot emmagatzemar amb un opamp o es pot triar una altra combinació de R i C, per exemple 1kOhm amb 10muF.

A l'exemple, la sortida DAC es dirigeix amb un potenciòmetre. Es pot executar un segon canal DAC independent amb el temporitzador 1 al pin 10.

Pas 6: metrònom

Image
Image
Metrònom
Metrònom
Metrònom
Metrònom

Un metrònom ajuda a fer un seguiment del ritme quan es reprodueix música. Per a polsos molt curts, la sortida del temporitzador arduino es pot alimentar directament a un altaveu, que produirà clics clarament audibles. Amb un potenciòmetre, la freqüència de batecs es pot regular de 40 a 208 batecs per minut, en 39 passos. Es necessita el temporitzador 1 per obtenir la precisió necessària. El valor de "TOP", que determina la freqüència, es modifica dins de la funció loop () i això requereix atenció. Aquí veieu que el mode WGM difereix dels altres exemples que tenen una freqüència fixa: aquest mode, amb TOP configurat pel registre OCR1A, té una memòria intermèdia doble i protegeix contra la falta de TOP i obté un error llarg. Tanmateix, això significa que només podem utilitzar 1 pin de sortida.

Pas 7: espectre de so

Image
Image
Espectre sonor
Espectre sonor
Espectre sonor
Espectre sonor

Els humans poden escoltar més de 3 ordres de magnitud de les freqüències de so, de 20Hz a 20kHz. Aquest exemple genera l'espectre complet amb un potenciòmetre. Es posa un condensador de 10 µF entre l'altaveu i l'Arduino per bloquejar el corrent continu. El temporitzador 1 produeix una ona quadrada. El mode de generació de formes d’ona aquí és PWM de fase correcta. En aquest mode, el comptador comença a comptar cap enrere quan arriba a la part superior, cosa que dóna lloc a impulsos que tenen la mitjana fixa, fins i tot quan el cicle de treball varia. Tanmateix, també es tradueix en un període (gairebé) doble, i passa que amb la prescala 8, el temporitzador 1 cobreix tot l’espectre audible, sense necessitat de canviar la prescala. També aquí, ja que el valor de TOP s'està canviant a la marxa, utilitzant OCR1A com a part superior es redueixen els errors.

Pas 8: servomotors

Image
Image
Servomotors
Servomotors
Servomotors
Servomotors

Hi ha servobiblioteques potents, però si només teniu dos servos per conduir, també podeu fer-ho directament amb el temporitzador1 i, per tant, reduir la CPU, l’ús de memòria i evitar interrupcions. El popular servo SG90 pren un senyal de 50Hz i la longitud del pols codifica la posició. Ideal per al temporitzador1. La freqüència és fixa, de manera que ambdues sortides del pin9 i del pin 10 es poden utilitzar per dirigir els servos de forma independent.

Pas 9: duplicador de tensió i inversor

Inversor i duplicador de tensió
Inversor i duplicador de tensió
Inversor i duplicador de tensió
Inversor i duplicador de tensió
Inversor i duplicador de tensió
Inversor i duplicador de tensió

De vegades, el vostre projecte requereix una tensió superior a 5 V o una tensió negativa. Pot ser executar un MOSFET, executar un element piezoelèctric, alimentar un opamp o restablir una EEPROM. Si el consum actual és prou petit, fins a uns 5 mA, una bomba de càrrega podria ser la solució més senzilla: només dos díodes i dos condensadors connectats a un senyal de pols des d’un temporitzador permeten duplicar l’arduino de 5V a 10V. A la pràctica, hi ha 2 gotes de díode, de manera que s’assemblarà més a 8,6 V a la pràctica per al duplicador o a -3,6 V per a l’inversor.

La freqüència de l’ona quadrada hauria de ser suficient per bombar prou càrrega a través dels díodes. Un condensador de 1 µF mou 5 µC de canvi quan la tensió varia entre 0 i 5 V, de manera que per a un corrent de 10 mA, la freqüència ha de ser com a mínim de 2 kHz. A la pràctica, és millor una freqüència més alta, ja que redueix l’ondulació. Amb el timer2 comptant de 0 a 255 sense preescala, la freqüència és de 62,5 kHz, que funciona bé.

Pas 10: transferència d'alimentació sense fils

Image
Image
Transferència d'alimentació sense fils
Transferència d'alimentació sense fils
Transferència d'alimentació sense fils
Transferència d'alimentació sense fils

No és estrany carregar un rellotge intel·ligent sense cables, però el mateix pot formar part d’un projecte Arduino. Una bobina amb senyal d'alta freqüència pot transferir energia a una altra bobina propera mitjançant inducció, sense contacte elèctric.

Primer prepareu les bobines. Vaig fer servir un rotlle de paper de 8,5 cm de diàmetre i filferro esmaltat de 0,13 mm de diàmetre per fer 2 bobines: la primària amb 20 voltes, la secundària amb 50 voltes. L’autoinductància d’aquest tipus de bobines amb N bobinats i un radi R és de ~ 5muH * N ^ 2 * R. Així doncs, per a N = 20 i R = 0,0425 es dóna L = 85muH, cosa que es va confirmar amb el provador de components. Produïm un senyal amb una freqüència de 516 kHz, donant lloc a una impedància de 2pi * f * L = 275 Ohm. Això és prou alt perquè l'Arduino no entri en sobrecorrent.

Per fer funcionar la bobina de la manera més eficaç, ens agradaria utilitzar una font de corrent altern. Es pot fer un truc: les dues sortides d’un temporitzador es poden executar en fase oposada invertint una de les sortides. Per fer-ho encara més semblant a una ona sinusoïdal, fem servir el PWM de fase correcte. D'aquesta manera, entre el pin 9 i el 10, la tensió alterna entre 0V, pin 9 + 5V, ambdós 0V, pin 10 + 5V. L’efecte es mostra a la imatge a partir d’un traç d’objectiu (amb una escala prèvia 1024, aquest abast de joguina no té massa amplada de banda).

Connecteu la bobina primària als pins 9 i 10. Connecteu un LED a la bobina secundària. Quan la bobina secundària s’acosta a la primària, el LED s’il·lumina amb força.

Recomanat: