Využitie čipov PICAXE na generovanie a meranie impulzov

Vo voľnom pokračovaní článku o mikrokontroléri PICAXE ukážeme zaujímavé funkcie PICAXE, ktoré sa často používajú v rôznych zariadeniach. Sú to funkcie založené na časovačoch a čítačoch mikrokontroléra, ktoré sú užitočné na generovanie impulzov, meranie dĺžky impulzov a meranie počtu pulzov, čiže v podstate meranie frekvencie.

Príklady sú vo videu:

Piny PICAXE 08M2

Pretaktovanie čipu

Najskôr vysvetlíme možnosti zmeny taktovacej frekvencie, čiže pretaktovanie a podtaktovanie. Implicitne nastavená taktovacia frekvencia je 4 MHz, Od tejto frekvencie sa odvíja nielen rýchlosť vykonávania inštrukcií, ale aj funkcie časovačov a komunikačných rozhraní. Pomocou príkazu SETFREQ môžete u čipu PICAXE 08M2 zvýšiť taktovaciu frekvenciu na 8, 16, alebo 32 MHz, alebo znížiť až na 31 kHz. Pre obvod PICAXE 08M2 môžete použiť príkaz SETFREQ s parametrami: k31, k250, k500, m1, m2, m4, m8, m16 a m32. Nastavíte tak interné taktovacie frekvencie 3I kHz, 250 kHz, 500 kHz, 1 MHz, 2 MHz, 4 MHz, 8 MHZ, 16 MHz a 32 MHz. V nasledujúcom príklade sa využíva implicitne nastavená frekvencia 4 MHz. Príkaz PAUSE bude fungovať tak ako má, pauza medzi blikaním bude 1000 ms, čiže 1 sekundu. Pre istotu frekvenciu nastavíme, keďže v nasledujúcich príkladoch sa bude meniť


setfreq m4 ; implicitná taktovacia frekvencia 4 MHz

main:

high C.2 pause 1000

low C.2  pause 1000

goto main

Teraz skúsime zmeniť taktovaciu frekvenciu na 32 MHz, čiže 8x vyššiu. LED dióda bude blikať 8x rýchlejšie


setfreq m32 ; taktovacia frekvencia 32 MHz

main:

high C.2 pause 1000

low C.2  pause 1000

goto main

Zdalo by sa že pre väčšinu aplikácií bude výhodné nastaviť čo najvyššiu taktovaciu frekvenciu, napríklad už spomínaných 32 MHz. Platí však jednoduché pravidlo: čím je vyššia taktovacia frekvencia, tým vyšší je prúdový odber. Na porovnanie pri 32 MHz samotný čip bez pripojených zariadení odoberá 2,2 mA. Pri 31 kHz je to takmer 20 x menej – 0,13 mA

Generovanie pulzov

Príkaz PULSOUT umožňuje jednoducho generovať pulzy. Má dva parametre: číslo pinu na ktorom sa generujú pulzy a dĺžku trvania pulzu v jednotkách 10 μs. Táto hodnota platí pri implicitnej frekvencii 4 MHz. Pri maximálnej frekvencii 32 MHz je jednotka v ktorej sa nastavuje dĺžka trvania pulzov  logicky 8 x kratšia, čiže 1,25 μs. Generovaný pulz je opačný oproti počiatočnému stavu na príslušnom pine. Príklad generuje najkratšie možné pulzy s pauzou 100 ms


setfreq m4     ; implicitná taktovacia frekvencia 4 MHz

main:

pulsout 1,1000  ; v jednotkách 10 μs

pause 100

goto main

Meranie dĺžky pulzov

Príkaz PULSIN meria dĺžku pulzu na pine určenom prvým parametrom. Druhý parameter určuje či sa bude pulz merať od nábežnej hrany (1) alebo zostupnej hrany (0) signálu. Tretí parameter je premenná, do ktorej sa dĺžka pulzov uloží. Môže to byť premenná typu byte začínajúca na b, alebo premenná typu word začínajúca na w. Jednotky sú rovnaké ako pri funkcii PULSOUT, čiže pri implicitnej taktovacej frekvencie 4 MHz je to 10 μs. Príkaz pulsin 2,1,w5 zmeria dĺžku pulzu na PIN 2 počínajúc nábežnou hranou a hodnotu v desiatkach mikrosekúnd uloží do premennej W5


setfreq m4  ; implicitná taktovacia frekvencia 4 MHz

main:

pulsin 1,1,w5

debug goto main

Meranie dĺžky pulzov je veľmi užitočné napríklad pri analýze signálov. Typickým príkladom je PWM signál pre servomotor, kde sa uhol natočenia určuje šírkou pulzu. Možno sa pýtate načo je to dobré, veď keď takýto signál privediete na servomotor, ten urobí čo treba. Ale čo ak potrebujete napríklad z dôvodu dosiahnutia vyššieho krútiaceho momentu, alebo vyššej presnosti nahradiť servo krokovým motorom. Vtedy môžete nechať riadiaci algoritmus bezo zmeny a v podprograme na ovládanie motora stačí len prepočítať zmeranú dĺžku pulzov na počet krokov, ktorý musí motor vykonať, aby sa jeho hriadeľ natočil o požadovaný uhol.

Počítanie impulzov

Príkaz COUNT umožňuje počítať pulzy počas určeného časového intervalu. Prvý parameter je číslo pinu, druhý čas v milisekundách počas ktorého sa budú počítať pulzy a tretí parameter je premenná, kam sa počet pulzov uloží. Odporúčame premennú typu word. Príkaz count 2,1000,w5 meria počet pulzov počas 1 sekundy, čiže vlastne meria frekvenciu v Hz. Pri  taktovacej frekvencii 4 MHz by mali pulzy mať dĺžku minimálne 40 μs a presne odmeriate frekvencie zhruba do 10 kHz. Ak zvýšite taktovaciu frekvenciu 32 MHz môžete merať zhruba do 50 kHz. Ak chcete zisťovať hodnotu frekvencie cez debug použijete konštrukciu


setfreq m4     ; implicitná taktovacia frekvencia 4 MHz

main:

count 1,1000,w5

debug

goto main

V budúcej časti už budeme používať PICAXE v rôznych prototypových doskách

Príklad na generovanie pulzov

Video ukazuje ako si vyrobiť kábel na programovanie PICAXE aj pripojenie alfanumerického displeja