„Inteligentní“ ručkové měřidlo s PICAXE

Ručková měřidla jsou z hlediska rychlé kontroly, zda je měřená veličina ve stanovených mezích, vhodnější, než měřidla s digitálním údajem. Jejich vlastnosti je možné výrazně vylepšit spojením s mikrokontrolérem.

Stál jsem před úlohou vylepšit funkci ručkového měřidla s rozsahem 0 – 10 V (100 μA) osazeného ve větším celku přístroje. Úkolem měřidla bylo hlídat napájecí napětí 9 V s povolenou tolerancí +/- 0,5 V. Nový byl požadavek na přesnější zobrazení (potlačení nuly o 5 V), indikaci překročení mezí v uplynulé době pomocí LED a zapamatování si minimální a maximální dosažené hodnoty.

Toto zadání je nepochybně možné řešit i analogově, nicméně s požadavkem na zapamatování dosaženého minima a maxima by to už nebylo úplně jednoduché. Rozhodl jsem se pro aplikaci PICAXE 08M2 způsobem, který pro mikrokontroléry není zrovna typický. Myslím, že toto řešení vychází současně obvodově nejjednodušeji a vyžaduje i minimum nastavování.

schema_merak

Schema zapojení mikrokontroléru

Vstupní napětí je odporovým děličem sníženo na polovinu a přivedeno na vstup mikrokontroléru (pin 3), na němž je aktivován AD převodník s referenčním napětím navázaným na napájecí napětí. Pro desetibitový převod je výhodné, když je stabilizované napájecí napětí nastaveno přesně na 5,12 V, pak je rozlišení převodu (vzhledem ke vstupu) přesně 0,01 V / bit.

Výstup pro napájení měřidla je pin 5, ten může na pozadí generovat pulzně šířkovou modulaci signálu. PWM je RC článkem s tantalovým kondenzátorem 10 μF převedena na stejnosměrné napětí s velmi dobrou linearitou. Trimrem se při vstupním napětí 10,0 V nastaví plná výchylka měřidla.

Protože mikrokontrolér nemá nadbytek vstupů, je použit trik. Spínače SW1 a SW2, jimiž se vyvolá zobrazení minima respektive maxima zaregistrovaného od posledního vynulování (nebo zapnutí napájení), jsou připojeny také na AD převodník, tentokrát však nastavený na rychlý osmibitový převod. Pokud není stisknuto žádné tlačítko, je na vstupu napětí odpovídající přibližně polovině napájení, při stisku SW1 se na vstup dostane (téměř) zem a při stisku SW2 napájecí napětí.

Mikrokontrolér průběžně měří napětí na vstupu, odečte od něj 5 V (číslo 500 – to je potlačení nuly), co přesahuje zobrazí řízením PWM na voltmetru (rozsah 0 – 5 V z hlediska zapojení, 5 – 10 V z hlediska vstupu). Současně program ukládá minimální a maximální dosaženou hodnotu a po stisku SW1 respektive SW2 tuto hodnotu po dobu přibližně 4 s ukáže měřidlem, přitom pomalu se střídou 1:1 bliká LED na výstupu 0. Jestliže je minimum menší než 8,5 V nebo maximum větší než 9,5 V (požadavek na nastavitelnost mezí nebyl součástí zadání), pak průběžně bliká LED velmi krátkými záblesky.

Za zmínku stojí tlačítko SW3. Je připojené přímo ke vstupu mikrokontroléru, k němuž je programově připojen vnitřní pullup rezistor, takže je na vstupu v klidu spolehlivě zajištěna úroveň H. Krátký stisk tlačítka nic nezpůsobí, pokud jej podržíme déle (20 průchodů smyčkou programu), zabliká výrazně LED a uložené minimum a maximum se nastaví na aktuální hodnotu napětí (je-li napětí v mezích, vynuluje se signalizace překročení mezí). Výsledný program v PICAXE 08M2 vypadá takto:

REM PICAXE 08M2 - řízení analog. měřidla 0,1 mA s kontrolou min/max
REM vstup 0-5V na ADC4, TL min a max ADC1, mazání IN3, LED OUT0
REM výstup PWM, napájení = reference 5,12V)
pullup %00001000                                      ;nastavení pullup na In3
pwmout 2,255,512                                      ;počáteční nastavení PWM 
symbol hornimez=950                                   ;maximum mez 9,5V
symbol dolnimez=850                                   ;minimum mez 8,5V
readadc10 4,w5                                        ;počáteční načtení aktual. napětí
let w6=w5                                             ;maximum dosažené (x 0,01V) ve w6
let w7=w5                                             ;minimum dosažené (x 0,01V) ve W7

start:                                                ;hlavní smyčka programu
  readadc 1,b0                                        ;načtení stavu SW1 a SW2
  readadc10 4,w5                                      ;načtení aktuálního napětí do w5
  if pin3=0 then inc b1 else b1=0 endif               ;načtení SW3 - nulování
  if b1>20 then                                       ;nepřetržitý stisk SW3 po 20 cyklů
    let w6=w5                                         ;vymaž dosažené maximum
    let w7=w5                                         ;vymaž dosažené minimum  
    gosub blikani                                     ;výrazně zablikej
    endif
  if w5>w6 then let w6=w5 endif                       ;nastavení maxima při změně
  if w5<w7 then let w7=w5 endif                       ;nastavení minima při změně
  if b0>192 then                                      ;stisk SW2 - ukaž maximum 
    if w6>500 then let w8=w6-500*2 else w8=0 endif    ;potlačení nuly
    if w8>1023 then let w8=1023 endif                 ;ošetření horní meze
    pwmduty 2,w8 gosub blikani endif 
  if b0<64 then                                       ;stisk SW1 - ukaž minimum
    if w7>500 then let w9=w7-500*2 else w9=0 endif    ;potlačení nuly
    if w8>1023 then let w8=1023 endif                 ;ošetření horní meze
    pwmduty 2,w9 gosub blikani endif 
  if w5>500 then                                      ;posunutí nuly o 5V při U>5V
    w5=w5-500*2                                       ;posunutí a roztažení intervalu
    else w5=0 endif                                   ;nula pro napětí <5V
  if w5>1023 then let w5=1023 endif                   ;ošetření horní meze
  pwmduty 2,w5                                        ;generování PWM
  if w6>hornimez or w7<dolnimez then 
    high 0 pause 1 low 0 endif                        ;krátké záblesky při překročení
  pause 100
  goto start                                          ;uzavřít smyčku programu

blikani:                                              ;blikání - 10 cyklů po 0,4s
  for b4=1 to 20 toggle 0 pause 200 next b4 return

Standardní třípinové připojení k sériovému portu počítače dovoluje kdykoli řídící program změnit a přeprogramovat například toleranci vstupního napětí. Pokud by to bylo potřeba, šlo by i rozlišit krátké a dlouhé stisky SW1 a SW2, nastavovat meze tlačítky a hodnoty ukládat do EEPROM, aby se neztratily odpojením napájení. Celá realizace včetně zapojení na univerzální DPS připájené zezadu k měřidlu na jeho vývody a naprogramování netrvala víc než 3 hodiny.

MeterBasic1

Stupnice měřidla pro konkrétní úlohu

Podobným způsobem lze ve stejném zapojení uskutečnit i jiné úpravy signálu, třeba zavést nelinearity, které by se analogově dělaly jen velmi obtížně. Příkladem může být stupnice s pěti zónami symetricky položenými kolem poloviny rozsahu, prostřední se zobrazením 0,2 V/d, kolem ní zóny s 0,5 V/d a krajní zóny s 1 V/d (celkový rozsah měřidla 3,2 V s popisem od 3,6 do 6,4 V), přičemž uvnitř každé ze zón je zobrazení lineární a tedy snadno čitelné při rovnoměrných rozestupech dílků.

MeterBasic1a

Ukázkový příklad nelineární stupnice, která je ve svých jednotlivých úsecích mezi popsanými dílky po částech lineární