Proporcionálny servopohon bez snímača polohy
DIPLOMOVÁ PRÁCA
Bc. JOZEF HUTIRA
ŽILINSKÁ UNIVERZITA V ŽILINE Elektrotechnická fakulta Katedra telekomunikácií
Študijný odbor: TELEKOMUNIKÁCIE
Vedúci diplomovej práce: Ing. Marián Dutko, DUEL Námestovo, s.r.o
Stupeň kvalifikácie: inžinier (Ing.) Dátum odovzdania diplomovej práce: 19. 5. 2006
ŽILINA 2006
Abstrakt
V dnešnej dobe hrá veľkú úlohu aj regulácia a automatizácia. Medzi jednu z oblastí
patrí aj regulácia tepelnovodného vykurovania objektov. Súčasťou takýchto regulačných
systémov je veľa komponentov, medzi ktoré patria aj regulačné ventily. Ako výhodný
spôsob riadenia týchto ventilov sa ukazuje riadenie pomocou servopohonu. Práve návrh
riadiacej jednotky takéhoto servopohonu je predmetom tejto práce.
Práce sa zaoberá návrhom riadiacej jednotky servopohonu umožňujúcej
proporcionálne ovládanie na základe vstupného analógového riadiaceho signálu. Návrh je
rozdelený do niekoľkých častí. Prvá časť je zameraná na analýzu požiadaviek na riadiacu
jednotku a opisu jej základných častí. Ďalšie časti sa zaoberajú samotným návrhom
jednotlivých blokov, výsledkom ktorých je skutočné obvodové riešenie jednotky.
Posledná časť je venovaná niekoľkým verziám modifikácií jednotky, ktoré by mali
pokryť širokú oblasť použitia.
2
Žilinská univerzita v Žiline, Elektrotechnická fakulta,
Katedra telekomunikácií ________________________________________________________________________
ANOTAČNÝ ZÁZNAM - DIPLOMOVÁ PRÁCA
Priezvisko, meno: Hutira Jozef školský rok: 2005/2006
Názov práce: Proporcionálny servopohon bez snímača polohy
Počet strán: 42 Počet obrázkov: 25 Počet tabuliek: 3
Počet grafov: 0 Počet príloh: 3 Použitá lit.: 7
Anotácia (slov resp. český jazyk): Práca sa zaoberá návrhom riadiacej jednotky
servopohonu umožňujúcej proporcionálne ovládanie na základe vstupného analógového
riadiaceho signálu. Práca obsahuje analýzu požiadaviek na jednotku, popis a návrh jej
blokov a riadiaceho programu. Výsledkom je skutočné obvodové riešenie jednotky.
Anotácia v cudzom jazyku (anglický resp. nemecký): Master Thesis concern about
design control unit servodrive enabling proporcional control dependent on input analog
control signal. This theme includes analysis of request on unit, specification and
designing blocks and control program. As a result is real electric circuit.
Kľúčové slová: servopohon, riadenie, mikrokontrolér, program , kalibrácia, riadiaca
jednotka
....................................................................................................................................
Vedúci práce: Ing. Marián Dutko, DUEL Námestovo, s.r.o
Recenzent práce : Ing. Ján Lach, STU Bratislava, strojnícka fakulta
Dátum odovzdania práce: 19.05.2006
3
OBSAH
OBSAH................................................................................................................................4 Zoznam obrázkov a tabuliek ................................................................................................6
Zoznam skratiek a symbolov ............................................................................................7
Úvod ....................................................................................................................................8
1 Základný popis ...............................................................................................................9
2 Blok spínačov napätia..................................................................................................11 2.1 Relé ako spínač .......................................................................................................12 2.2 Bipolárny tranzistor ako spínač ..............................................................................12 2.3 Unipolárny tranzistor ako spínač ............................................................................13 2.4 Realizácia................................................................................................................13
3 Prúdový snímač ............................................................................................................15
4 Napájací zdroj ..............................................................................................................17
5 Mikrokontrolér ATtiny 15L........................................................................................19 5.1 Základné vlastnosti .................................................................................................20 5.2 Analógovo – digitálny prevodník ...........................................................................22 5.3 I/O port B ................................................................................................................24
6 Riadiaci program .........................................................................................................25 6.1 Inicializácia periférií mikrokontroléra ....................................................................25 6.2 Kalibrácia................................................................................................................26
6.2.1 Posuv do smeru „Otvorené“.............................................................................28 6.2.2 Posuv do smeru „Zatvorené“ ...........................................................................28 6.2.3 Meranie uplynutého času .................................................................................29
6.3 Výpočet novej polohy servopohonu .......................................................................31 6.3.1 Násobenie dvoch 16 bitových čísel..................................................................33 6.3.2 Delenie 32 bitového čísla 16 bitovým číslom..................................................35
6.4 Aktualizácia súčasnej polohy..................................................................................37 6.5 Vývojový diagram celého riadiaceho programu.....................................................38
7 Praktická realizácia Riadiacej jednotky servopohonu.............................................39
7.1 Popis zapojenia .......................................................................................................39 7.2 Schéma zapojenia....................................................................................................41
8 Modifikácie ...................................................................................................................42 8.1 Verzia 1.1 - Proporcionálne riadenie polohy, riad. signál 0–5V, napájanie 5V ....42
8.1.1 Zdroj.................................................................................................................42 8.1.2 Delič riadiaceho signálu...................................................................................43 8.1.3 Prepojka JP2.....................................................................................................43
8.2 Verzia 1.2 - Proporcionálne riadenie polohy, riad. signál 0–10V, napájanie 12V .44 8.2.1 Zdroj.................................................................................................................44 8.2.2 Delič riadiaceho signálu...................................................................................44 8.1.3 Prepojka JP2.....................................................................................................44
8.3 Verzia 1.3 - Proporcionálne riadenie polohy, riad. signál 0–10V, napájanie 24V .45 8.4 Verzia 2.1 a 2.2 – Dvojstav. riadenie (Otvorený - Zatvorený), nap. 12V a 24V....45
4
8.4.1 Riadiaci program...............................................................................................46
Záver .................................................................................................................................48
Zoznam použitej literatúry .............................................................................................49
PRÍLOHOVÁ ČASŤ .......................................................................................................52
5
Zoznam obrázkov a tabuliek Obr. 1.1 Bloková schéma Riadiacej jednotky servopohonu .............................................10 Obr. 2.1 Principiálna schéma Bloku spínačov napätia .....................................................11 Obr. 2.2 Blok spínačov s relé............................................................................................12 Obr. 2.3 Blok spínačov s bipolárnymi tranzistormi ..........................................................12 Obr. 2.4 Blok spínačov s unipolárnymi tranzistormi ........................................................13 Obr. 2.5 Blok spínačov napätia.........................................................................................14 Obr. 3.1 Schéma prúdového snímača ...............................................................................15 Obr. 4.1 Bloková schéma stabilizátora zo spätnou väzbou ..............................................17 Obr. 4.2 Doporučené zapojenie 78L05 .............................................................................18 Obr. 4.3 Schéma napájacieho zdroja.................................................................................18 Obr. 5.1 Bloková schéma ATtiny 15L..............................................................................21 Obr. 5.2 Bloková schéma AD prevodníka ........................................................................23 Obr. 5.3 Principiálna schéma jedného pinu portu.............................................................24 Obr. 6.1 Vývojový diagram kalibrácie .............................................................................27 Obr. 6.2 Posuv do smeru „Otvorené“ ...............................................................................28 Obr. 6.3 Posuv do smeru „Zatvorené“ ..............................................................................28 Obr. 6.4 Vývojový diagram násobenia dvoch 16b čísel ...................................................34 Obr. 6.5 Vývojový diagram delenia 32b čísla 16b číslom...............................................36 Obr. 6.6 Vývojový diagram Aktualizácia polohy servopohonu .......................................37 Obr. 6.7 Vývojový diagram riadiaceho programu ............................................................38 Obr. 7.1 Schéma zapojenia Riadiacej jednotky servopohonu...........................................41 Obr. 8.1 Schéma prvej úpravy zdroja ...............................................................................42 Obr. 8.2 Delič riadiaceho signálu .....................................................................................43 Obr. 8.3 Schéma druhej úpravy zdroja .............................................................................44 Obr. 8.4 Vývojový diagram riadiaceho programu ............................................................47 Tabuľka 2.1 - Funkčná tabuľka Bloku spínačov napätia .................................................11 Tabuľka 2.2 - Elektrické parametre IRF 7343.................................................................14 Tabuľka 4.1 - Elektrické parametre 78L05......................................................................18
6
Zoznam skratiek a symbolov
MCU Microcontroller Unit
Mikrokontrolér
RISC Reduced instruction set computer
Počítač s redukovanou inštrukčnou sadou
CISC Complex instruction set computer
Počítač s úplnou inštrukčnou sadou
ALU Arithmetic Logic Unit
Aritmeticko-logicka jednotka
FLASH Flash-EEPROM
Zrýchlená EEPROM
EEPROM Electrically Erasable Programmable Read-Only Memory
Elektricky mazateľná pamäť ROM
ISP In-System Programming
Programovanie priamo v systéme
SPI Serial Peripheral Interface
Sériové rozhranie
PWM Pulse Width Modulation
Pulzne šírkovú modulácia
ADC Analog to Digital Converter
Analógovo digitálny prevodník
7
Úvod
V dnešnej dobe hrá veľkú úlohu aj regulácia a automatizácia. Medzi jednu z oblastí
patrí aj regulácia tepelnovodného vykurovania objektov.
Používa sa veľa princípov regulácie, z ktorých každá má svoje výhody a nevýhody.
Najčastejšie sa používa termostatová regulácia.
Termostatová regulácia je založená na princípe teplotného čidla umiestneného v tzv.
referenčnej miestnosti a na nastavenej teplote, ktorá by v tejto miestnosti mala byť.
Termostat porovnáva, či je teplota vyššia alebo nižšia. Na základe tohto údaju sa aktivuje
zdroj tepla. Medzi výhody termostatovej regulácie patrí predovšetkým udržovanie stálej
teploty v miestnosti. V nej sa odráža aj vplyv poveternostných podmienok, slnečné
žiarenie a ďalšie faktory. Na druhej strane je ale ovplyvňovaná teplota celého objektu,
a tak napríklad vetranie v referenčnej miestnosti spôsobí vykurovanie v celom objekte,
prípadne zasvietenie slnka do tejto miestnosti, spôsobí, že sa tu síce bude udržovať
stabilná teplota, ale ostatné miestnosti budú chladnúť.
Vhodným riešením tohto nedostatku je použitie regulačných ventilov pred samotným
vykurovacím telesom (radiátorom) a ich regulácia podľa aktuálnej teploty miestnosti.
Tým sa odstránia teplotné rozdiely jednotlivých miestností, spôsobené tepelnými
stratami.
Na automatické regulovanie je vhodne použiť regulačný ventil so servopohonom, ktorý
na základe riadenia od vhodného regulátora prestavuje svoju polohu. Práve pre takýto
servopohon bola navrhnutá riadiaca jednotka popísaná v tejto práci. V jej záverečnej časti
je popísaných niekoľko verzií modifikácií, ktoré by mali pokryť širokú oblasť použitia.
8
Proporcionálny servopohon bez snímača polohy
1 Základný popis
Ako už napovedá samotný názov, úlohou je navrhnúť riadiacu jednotku pre
servopohon, ktorá by umožňovala proporcionálne ovládanie na základe vstupného
analógového riadiaceho signálu 0 – 5V. Koncové polohy servopohonu (otvorené -
zatvorené) sú determinované dvoma signálmi. Koncovú polohu „Otvorené“ ohraničuje
signál, ktorý generuje koncový spínač a koncovú polohu „Zatvorené“ ohraničuje signál
generujúci snímač prúdu elektromotora. Keďže nie je k dispozícii žiadny údaj o aktuálnej
polohe servopohonu, je nutné ho vypočítať na základe času, ktorý uplynie počas presunu
z jednej koncovej polohy do druhej. Kvôli odstráneniu integrovanej chyby polohy je
potrebné servopohon periodicky automaticky kalibrovať.
Celková koncepcia riešenia by sa dala rozdeliť do niekoľký funkčných blokov:
Blok spracovania riadiaceho signálu – jeho úlohou je spracovanie vstupného
signálu do formy vhodnej pre ďalšie spracovanie.
Blok spínačov napätia – na základe riadiacich signálov ovláda napájacie napätie
elektromotora.
Koncový spínač – generuje vhodný signál pri dosiahnutí koncovej polohy
Prúdový snímač – jeho výstupom je signál informujúci o aktuálnej hodnote
prúdu prechádzajúceho elektromotorom.
Riadiaca logika – zabezpečuje na základe vstupných údajov výpočet a zmenu
polohy servopohonu pomocou riadiacich signálov.
Napájací zdroj – poskytuje vhodné napájacie napätia pre ostatné funkčné bloky.
9
Bloková schéma:
Obr. 1.1 Bloková schéma Riadiacej jednotky servopohonu
V ďalších častiach bude uvedený popis návrhu jednotlivých blokov jednotky.
10
2 Blok spínačov napätia Na blok spínačov napätia elektromotora je kladených niekoľko požiadaviek:
• Jednoduché napájacie napätie +5V
• Zmena veľkosti a polarity výstupného napätia na základe riadiacich signálov
• Riadenie dvomi signálmi s napäťovými úrovňami TTL
• Minimálne straty pri spínaní
• Jednoduchá realizácia
Po analýze týchto požiadaviek je možné blok spínačov popísať nasledujúcou
principiálnou schémou:
Obr. 2.1 Principiálna schéma Bloku spínačov napätia
Funkčná tabuľka
ON – zopnutý spínač
OFF – rozopnutý spínač
R1 R2 S1 S2 S3 S4 UM0 0 ON OFF ON OFF 0 V0 1 ON OFF OFF ON + 5 V1 0 OFF ON ON OFF - 5 V1 1 OFF ON OFF ON 0 V
Tabuľka 2.1 - Funkčná tabuľka Bloku spínačov napätia
Ďalším krokom pri návrhu je výber vhodných spínacích prvkov. Do úvahy pripadajú
nasledovné tri druhy:
• Relé
• Bipolárny tranzistor
• Unipolárny tranzistor
11
2.1 Relé ako spínač
Blok spínačov s použitím relé by vyzeral nasledovne:
Obr. 2.2 Blok spínačov s relé
Výhody: - veľmi malý odpor v zopnutom stave => minimálne straty
- jednoduchá realizácia
Nevýhody: - životnosť kontaktov relé
- vyššia cena
2.2 Bipolárny tranzistor ako spínač
Obr. 2.3 Blok spínačov s bipolárnymi tranzistormi
12
Výhody: - životnosť
- jednoduchá realizácia
Nevýhody: - veľké napäťové úbytky na tranzistoroch => vyššie straty
2.3 Unipolárny tranzistor ako spínač
Obr. 2.4 Blok spínačov s unipolárnymi tranzistormi
Výhody: - malý odpor v zopnutom stave => minimálne straty
- jednoduchá realizácia
2.4 Realizácia
Najvhodnejším riešením bloku spínačov napätia vychádza zapojenie s unipolárnymi
tranzistormi.
Doplnením koncového spínača a snímacieho rezistora, potrebného pre blok prúdového
snímača, dostávame výsledné zapojenie:
13
Obr. 2.5 Blok spínačov napätia
Pri výbere vhodných typov tranzistorov je potrebné zohľadniť viacero elektrických
parametrov a veľkosť puzdra, vzhľadom na stiesnenú montáž.
Vhodným typom je dvojica N-MOSFET + P-MOSFET tranzistorov v jednom puzdre pod
typovým označením IRF 7343 [4].
Elektrické parametre IRF 7343
SO-8
Parameter N-MOSFET P-MOSFET
VDS Max. napätie Drain - Source 55 V - 55 VID @ TA = 25oC Max. prúd cez Drain 4,7 A - 3,4 AID @ TA = 70oC Max. prúd cez Drain 3,8 A - 2,7 APD @ TA = 25oC Max. výkonová strataPD @ TA = 70oC Max. výkonová strataVGS Max. napätie Gate - SourceRDS(on) @ VGS=10V Odpor Drain - Source v zopnutom stave 0,050 Ω 0,105 Ω
2,0 W1,3 W± 20 V
Tabuľka 2.2 - Elektrické parametre IRF 7343
14
3 Prúdový snímač
Prúdový snímač by mal zabezpečiť snímanie prúdu, ktorý prechádza
elektromotorom, jeho prevod na napätie, ktoré následne upraví a zosilní na úroveň
vhodnú pre ďalšie spracovanie.
Uvedené požiadavky splňuje nasledujúci obvod:
IS
Obr. 3.1 Schéma prúdového snímača
Snímaný prúd prechádza snímacím rezistorom RS, vplyvom ktorého vznikne napäťový
úbytok, ktorý je následne filtrovaný RC členom R1C1 a privedený na vstup zosilňovača.
Tento pozostáva z operačného zosilňovača IC1 a rezistorov R2 a R3, ktoré určujú jeho
zosilnenie. Po zosilnení signál prechádza filtračným členom R4C2 na výstupnú svorku
Usen.
Meraní bolo zistené, že prúd prechádzajúci elektromotorom sa pohybuje v normálnej
prevádzke okolo hodnoty IS ≅ 20mA. Na základe tohto zistenia je zvolená hodnota
snímacieho rezistora RS na 6,8Ω.
Potom sa bude napätie na snímacom rezistore R1 pohybovať okolo hodnoty:
mVAIRSU SRS 13610208,6 3 ≅⋅⋅Ω=⋅= −
Toto napätie je následne zosilňované zosilňovačom, ktorého zosilnenie je vzhľadom na
nasledujúce obvody za ním, ktoré vyžadujú napätie v rozsahu 0 až 2,56V, nastavené na
hodnotu 11x. Určujú ho rezistory R2 a R3, podľa vzťahu:
15
1110110101
231 3
3
=⋅⋅
+=+=RRA
Zosilnené napätie na výstupe prúdového snímača sa bude pohybovať okolo hodnoty:
VVAUUsen RS 496,11110136 3 ≅⋅⋅=⋅= −
Z predchádzajúcich úvah je možné popísať prevodovú charakteristiku prúdového snímača
rovnicou:
SIUsen ⋅⋅= 118,6
Usen – výstupné napätie [V]
IS – snímaný prúd [A]
Ako vhodný typ operačného zosilňovača bol vybratí obvod LMC6482 [3]. Je to
CMOS dvojitý operačný zosilňovač typu „Rail to Rail“ pre vstupný napäťový rozsah ,
schopný spracovať signály blízke napájaciemu napätiu. Toto je dôležité vzhľadom na
použité nesymetrické napájanie.
16
4 Napájací zdroj
Úlohou napájacieho zdroja je zabezpečiť konštantné napájacie napätie pre ostatné
obvody, bez ohľadu na meniace sa vstupné napätie.
Základné požiadavky:
• Výstupné napätie: +5V
• Vstupné napätie: +10 až 25V
• Prúdová zaťažiteľnosť: min. 50mA
• Ochrana proti opačnej polarite vstupného napätia
Na stavbu takéhoto zdroja je vhodný dnes už štandardný monolitický lineárny stabilizátor
78L05 [5]. Vyrába ho s malými obmenami väčšina firiem (Texas Instruments, SGS
Thomson, Motorola, National Semiconductor, Linear Technology), ktorí ho prevzali od
firmy Fairchild.
Vyznačuje sa tým, že používa iba tri svorky: vstupnú, výstupnú a spoločnú, a k svojej
činnosti potrebuje minimum externých súčiastok.
Pracuje v spojitom režime ako sériový regulátor so spätnou väzbou. Princíp takéhoto
regulátora môžeme popísať jednoduchou blokovou schémou:
RČ – regulačný člen
RZ – rozdielový zosilňovač
Obr. 4.1 Bloková schéma stabilizátora zo spätnou väzbou
17
Elektrické parametre 78L05
VOUT Výstupné napätie 5 V
IOUT Max. výstupný prúd 100 mA
Iq Kľudový prúd 6 mA
Udrop Dropout 1,7 V
VIN Max. vstupné napätie 30 V
Parameter
TO-92
Tabuľka 4.1 - Elektrické parametre 78L05
Doporučené zapojenie
Obr. 4.2 Doporučené zapojenie 78L05
Doplnením ďalších externých súčiastok, potrebných pre filtráciu a ochranu proti opačnej
polarite vstupného napätia dostávame definitívne zapojenie zdroja:
Obr. 4.3 Schéma napájacieho zdroja
Ochrana proti skratu na výstupe a tepelná ochrana je realizovaná internými ochrannými
obvodmi 78L05.
18
5 Mikrokontrolér ATtiny 15L
ATtiny15L je nízkopríkonový CMOS 8-bitový mikrokontrolér , založený na AVR
RISC architektúre vyrábaný firmou ATMEL[1]. Je schopný vykonať náročné inštrukcie v
rámci jedného hodinového cyklu, čím sa jeho výpočtový výkon blíži až k 1MIPS za MHz,
čo umožňuje optimalizáciu spotreby energie voči pracovnej frekvencii.
AVR jadro kombinuje bohatú inštrukčnú sadu s 32 univerzálnymi pracovnými registrami.
Všetkých 32 registrov je priamo pripojených na Aritmeticko-Logickú jednotku (ALU-
Arithmetic Logic Unit), čo umožňuje jednej inštrukcii behom jedného hodinového cyklu
prístup do dvoch registrov súčasne. Výsledná architektúra je výrazne efektívnejšia
a poskytuje až desaťkrát vyšší výkon ako konvenčné CISC mikrokontroléry.
Obvod je vyrobený s použitím Atmelom vyvinutej technológie stálych pamätí s vysokou
hustotou. ISP Flash pamäť integrovaná v čipe umožňuje preprogramovanie pamäte cez
SPI interface pomocou konvenčného programátora.
ATtiny 15L poskytuje 1kB Flash, 64 B EEPROM, šesť univerzálne použiteľných I/O
liniek, 32 univerzálnych pracovných registrov, dva 8-bitové Časovace/Čítače, jeden
s vysoko-rýchlostným PWM výstupom, interný oscilátor, interné a externé prerušenia,
programovateľný Watchdog časovač, 4-kanálový 10-bitový AD prevodník s jedným
diferenčným napäťovým vstupom, a tri softwarovo voliteľné úsporné režimy.
Pre obvod je možné použiť množstvo programových a systémových prostriedkov ako
napríklad: Macro Assembler, Program Debuggery/Simulátory, In-Circuit emulátory.
19
5.1 Základné vlastnosti
Pokročilá RISC architektúra
o 90 inštrukcií, väčšina vykonateľná v jednom hodinovom cykle
o 32 x 8 univerzálnych pracovných registrov
o Plne statická prevádzka
Stála (non-volatile) programová a dátová pamäť
o 1 KB Flash programová pamäť, programovateľná „In-System“
o 64 B EEPROM
o Programovatelné zámky pre utajenie dát Flash a EEPROM
Periféria
o Prerušenie pri zmene úrovne na pine
o Dva 8-bitové Čítače/Časovače s oddeleným preddeličom
o Jeden 150 kHz, 8-bitový vysoko-rýchlostný PWM výstup
o 4-kanálový 10-bitový ADC
o On-chip analógový komparátor
o Programovateľný Watchdog timer
Špeciálne vlastnosti MCU
o Programovanie „In-System“ cez SPI port
o Vylepšený Power-on-Reset obvod
o Programovateľný Brown-out obvod
o Interný kalibrovaný 1.6 MHz oscilátor
o Externé a interné prerušenia
o Low-power Idle a Power-down mód
6 programovateľných I/O liniek
20
5.2 Analógovo – digitálny prevodník
Vlastnosti:
• 10-bit rozlíšenie • ±2 LSB absolútna presnosť • 0,5 LSB nelinearita prevodu • 65 – 260 µs čas konverzie • 4 multiplexované vstupné kanály • 1 diferenčný vstupný kanál s voliteľným zosilnením 20x • 2,56V interné referenčné napätie • 0 – VCC rozsah vstupných napätí
AD prevodník (ADC) mikrokontroléra ATtiny15 je realizovaný ako 10-bitový AD
prevodník s postupnou aproximáciou.
ADC je pripojený k 4-kanálovému analógovému multiplexoru, ktorý dovoľuje výber
jedného diferenčného vstupu a štyroch jednoduchý napäťových vstupov, pripojených na
piny Portu B. Diferenčný vstup je vybavený zosilňovacím stupňom zo zosilnením 26 dB
(20x). ADC obsahuje vzorkovací a pamäťový obvod (Sample and Hold), ktorý zaistí, že
vstupné napätie do AD prevodníka bude počas konverzie konštantné.
Na čipe sa taktiež nachádza zdroj referenčného napätia s menovitou hodnotou 2,56V, ku
ktorému je možné pripojiť externý filtračný kondenzátor na účinnejšie potlačenie šumu,
prípadne použiť externý zdroj referenčného napätia.
ADC môže pracovať v dvoch režimoch – Single Conversion a Free Running. V Single
Conversion (jednoduchá konverzia), musí byť každá konverzia inicializovaná
užívateľom. V Free Running (voľne bežiacom) režime, ADC neustále vzorkuje
a aktualizuje ADC dátové registre.
Počas prevodu je možné povoliť špeciálny režim spánku CPU, tzv. „noise canceler“, čím
sa zredukuje rušenie z jadra CPU a iných I/O periférií.
22
5.3 I/O port B
Port B je 6-bitový obojsmerný vstupno/výstupný port. Každý pin portu môže byť
bez ohľadu na iný konfigurovaný buď ako vstupný, alebo ako výstupný.
Pri konfigurácii ako vstup je možné pre všetky piny portu zvlášť povoliť, alebo zakázať
interné zdvíhacie (pull-up) rezistory.
Pri konfigurácii ako výstup, umožňujú výstupné budiče prijať prúd 20mA, čo dovoľuje
priamo budiť LED displej.
Všetky I/O piny majú ochranné diódy pripojené na VCC a GND potenciál.
Principiálna bloková schéma jedného pinu portu:
Obr. 5.3 Principiálna schéma jedného pinu portu
Bližšie informácie o mikrokontroléry ATtiny15 a jeho perifériách je možné nájsť
v datasheete obvodu [2].
24
6 Riadiaci program
Riadiaci program nachádzajúci sa programovej FLASH pamäti mikrokontroléra
ATtiny15L zabezpečuje vykonávanie nasledujúcich úloh:
• Inicializáciu periférií mikrokontroléra ATtiny15
• Kalibráciu servopohonu
• Meranie riadiaceho napätia
• Výpočet novej polohy servopohonu
• Aktualizáciu súčasnej polohy
6.1 Inicializácia periférií mikrokontroléra Nachádza sa v úvodnej sekvencii programu. Zabezpečuje inicializáciu portov
(definovanie vstupných, výstupných, nastavenie počiatočných stavov), AD prevodníka a
nastavenie režimov interných časovačov.
25
6.2 Kalibrácia
Úlohou kalibrácie je odmeranie času, potrebného na presun servopohonu z jednej
koncovej polohy do druhej.
Táto operácia prebieha v niekoľkých krokoch:
1. Aktivovanie posuvu do smeru „otvorene“.
2. Čakanie na dosiahnutie koncovej polohy.
3. Deaktivovanie pohybu.
4. Aktivovanie posuvu do smeru „zatvorené“.
5. Odštartovanie merania času.
6. Čakanie na dosiahnutie koncovej polohy.
7. Deaktivovanie pohybu.
8. Zastavenie merania času.
9. Uloženie výsledku merania.
26
Aktivovanie posuvu servopohonu do konkrétneho smeru je realizované riadiacimi
signálmi, ktoré zabezpečia zopnutie príslušných spínacích prvkov.
6.2.1 Posuv do smeru „Otvorené“
Obr. 6.2 Posuv do smeru „Otvorené“
Pre posuv do tohto smeru je potrebné zabezpečiť zopnutie spínačov S2, S3
a koncového spínača KS. Vplyvom pretekajúceho prúdu vzniká napätie na snímacom
rezistore RS, ktorý je súčasťou prúdového snímača. Ten generuje na svojom výstupe
napätie priamo úmerné pretekajúcemu prúdu.
Po dosiahnutí koncovej polohy dochádza k rozopnutiu koncového spínača. To má za
následok zaniknutie prúdu a pokles napätia na výstupe prúdového snímača. Tento stav
vyhodnotí riadiaca logika ako dosiahnutie koncovej polohy.
6.2.2 Posuv do smeru „Zatvorené“
Obr. 6.3 Posuv do smeru „Zatvorené“
28
Pre posuv do smeru „Zatvorené“ je potrebné zabezpečiť zopnutie spínačov S1, S4.
Taktiež vplyvom pretekajúceho prúdu vzniká napätie na snímacom rezistore RS, ktoré
spôsobí generovanie napätia na výstupe prúdového snímača.
Pri dosiahnutí koncovej polohy dochádza väčšiemu mechanickému zaťaženiu
elektromotora, čo má za následok zvýšenie prúdu odoberaného elektromotorom. To
spôsobí zmenu aj na výstupe prúdového snímača, Ak dôjde k prekročeniu rozhodovacej
úrovne pre vypnutie, riadiaca logika to vyhodnotí ako dosiahnutie koncovej polohy.
Vplyvom záberového prúdu pri rozbehu motora nie je možné vyhodnocovať túto zmenu
prúdu ihneď pri štarte, ale s určitým časovým oneskorením potrebným pre jeho
spoľahlivý rozbeh.
6.2.3 Meranie uplynutého času
Meranie uplynutého času nie je nutné prevádzať v základných jednotkách sekundách,
prípadne milisekundách.
Z tohto dôvodu sa meranie realizuje nasledovným spôsobom:
Použitý mikrokontrolér generuje pomocou interného časovača každých 81,92 ms
prerušenie. V obsluhe prerušenia sa inkrementuje počítadlo týchto časových značiek.
Pred samotným meraním je preto nutné toto počítadlo vynulovať. Počas merania potom
dochádza k inkrementovaniu jeho stavu od nuly. Po skončení merania stačí prečítať stav
tohto počítadla, ktorý zodpovedá uplynutému času.
Ak chceme vyjadriť tento čas v sekundách potom:
UplynutýČas [s] = 81.92 . 10-3 s . StavPočítadla
Automatické vykonávanie kalibrácie sa uskutočňuje podobným spôsobom. Používajú
sa tu dve počítadla, ktoré sú na začiatku nastavené na hodnoty: Prvé počítadlo (počítadlo
časových značiek) na hodnotu 44032 a druhé na hodnotu, rovnajúcu sa konštante
automatickej kalibrácie (určuje čas medzi dvoma kalibráciami). V obsluhe prerušenia
dochádza k dekrementovaniu týchto dvoch počítadiel. Prvé počítadlo (počítadlo časových
značiek) je dekrementované pri každom prerušení. Po dosiahnutí nulovej hodnoty, čo
29
zodpovedá uplynutiu času cca 1hodina, je prvé počítadlo znova nastavené na hodnotu
44032 a zároveň dekrementované druhé počítadlo, počítadlo uplynutých hodín.
ssst 36001092,8144032][ 31 ≅⋅⋅= −
Po dosiahnutí nulovej hodnoty počítadla uplynutých hodín, dochádza k nastaveniu
príznaku pre vykonanie kalibrácie, ktorá je následne v najbližšom možnom čase
vykonaná.
30
6.3 Výpočet novej polohy servopohonu
Pre výpočet novej polohy sú potrebné tieto štyri vstupné údaje:
Kalibračný čas – Cal_Time - čas, potrebný pre presun pohonu z jednej koncovej
polohy do druhej, zmeraný v režime kalibrácie.
Aktuálna hodnota riadiaceho signálu – Akt_Ur – hodnota zmeraná pred
samotným výpočtom.
Predchádzajúca hodnota riadiaceho signálu – Last_Ur – naposledy použitá
hodnota pri výpočte polohy.
Maximálna hodnota riadiaceho signálu – Max_Ur – maximálna hodnota, ktorú
je možné namerať.
Výstupom výpočtu bude čas – PS_Time, ktorý je potrebný pre prestavenie pohonu na
novú pozíciu.
Vzťah medzi nimi je možné popísať jednoduchou trojčlenkou:
Max_Ur ................................................. Cal_Time
Akt_Ur .................................................. PS_Time
Potom platí: TimeCalUrMaxUrAktTimePS _
___ ⋅=
Uvedení vzťah avšak platí len zmenu pozície s koncovej polohy na novú pozíciu. Preto je
nutné vzťah upraviť tak, aby zohľadnil aj poslednú nastavenú pozíciu:
TimeCalUrMax
UrLastUrAktTimePS __
___ ⋅−
=
Pre výpočet polohy do opačného smeru, je potrebné vymeniť pozíciu hodnôt Akt_Ur
a Last_Ur:
TimeCalUrMax
UrAktUrLastTimePS __
___ ⋅−
=
31
Hodnoty riadiaceho signálu sú merané analogovo-digitálnym prevodníkom s 10 bitovým
rozlíšením:
REF
IN
VVADC 1024⋅
=
ADC – výsledok konverzie (0 až 1023), VIN – vstupné napätie AD prevodníka, VREF –
referenčné napätie AD prevodníka.
Najmenší krok AD prevodníka pri tomto rozlíšení je :
102422 10REFREF
NREF UUU
===∆ ak UREF = 2,56V potom mV521024
562 ,,==∆
Vzhľadom na najmenší krok AD prevodníka a jeho chybu pri prevode, sa výpočet
a následná korekcia pozície servopohonu uskutoční iba za predpokladu, že:
16__ ≥− UrLastUrAkt
Táto podmienka zabráni neustálemu korigovaniu pozície, ktoré môže byť spôsobené
superponovaným rušivým napätím na riadiacom napätí Ur, alebo kvantizačnou chybou
AD prevodníka.
Použitý mikrokontrolér ATtiny nepodporuje priamo všetky matematické operácie
používané pri výpočte. Z tohto dôvodu budú popísané jednoduché algoritmy na
odstránenie tohto problému.
32
6.3.1 Násobenie dvoch 16 bitových čísel
Mikrokontrolér ATtiny 15 nemá hardwarovú podporu pre násobenie dvoch čísel.
Na odstránenie tohto nedostatku je použitý jednoduchý výpočtový algoritmus, ktorý
využíva operácie algebrického súčtu a bitovej rotácie 8 bitových čísel.
Vstupnými dátami sú 16b násobenec, uložený v dvoch 8b registroch a 16b násobiteľ,
taktiež uložený v dvoch 8b registroch. Výsledkom je 32 bitové číslo uložené v štyroch 8b
registroch.
Samotný algoritmus prebieha v nasledujúcich krokoch:
1. Vynulovanie horných 16b výsledku.
2. Nastavenie počítadla slučiek na hodnotu 16.
3. Logický posuv doprava násobiteľa cez Carry bit. (Carry – príznak prenosu do
vyššieho rádu ).
4. Ak je nastavený Carry bit , tak sa pripočíta násobenec k horným 16b výsledku.
5. Logický posuv doprava horných 16b výsledku do dolných 16b výsledku a
násobiteľa.
6. Bitová rotácia doprava cez Carry bit dolných 16b výsledku a násobiteľa.
7. Dekrementovanie počítadla slučiek
8. Ak je hodnota počítadla rôzna od nuly, tak sa postup opakuje od kroku 4.
33
6.3.2 Delenie 32 bitového čísla 16 bitovým číslom.
ATtiny15 neobsahuje hardwarovú podporu ani pre delenie dvoch čísel.
Z tohto dôvodu je delenie riešené algoritmom využívajúcim operácie algebrického súčtu,
rozdielu a bitovej rotácie 8 bitových čísel.
Vstupnými dátami sú 32b delenec, uložený v štyroch 8b registroch a 16b deliteľ, uložený
v dvoch 8b registroch. Výsledkom algoritmu je 16b výsledok a 16b zvyšok po delení.
Samotný algoritmus prebieha v nasledujúcich krokoch:
1. Vynulovanie zvyšku po delení a Carry bitu.
2. Nastavenie počítadla slučiek na hodnotu 33.
3. Rotovanie delenca doľava cez Carry bit.
4. Dekrementovanie počítadla slučiek.
5. Ak je počítadlo rovné nule, tak je delenie hotové.
6. Rotovanie zvyšku doľava cez Carry bit.
7. Odpočítanie deliteľa/výsledku od zvyšku.
8. Ak je výsledok odčítania záporný, tak sa pripočíta naspäť, vynuluje sa Carry
bit a skočí na krok 3.
9. Nastaví sa Carry bit a skočí sa na krok 3.
35
6.4 Aktualizácia súčasnej polohy
Pre aktualizáciu polohy servopohonu je potrebný jeden vstupný údaj, a tým je čas
PS_Time. Je to vypočítaný čas potrebný pre prestavenie pohonu na novú pozíciu.
Na meranie času pre posuv pohonu na novú pozíciu je použitý rovnaký spôsob merania
ako v režime kalibrácie, teda počítanie počtu prerušení generovaných interným
časovačom každých 81,92 ms.
Aktualizácia polohy prebieha v nasledujúcich krokoch:
1. Nulovanie počítadiel prerušení.
2. Aktivovanie pohybu servopohonu do príslušného smeru.
3. Čakanie na dosiahnutie rovnosti uplynutého času s časom PS_Time
4. Deaktivovanie pohybu.
Vývojový diagram:
Obr. 6.6 Vývojový diagram Aktualizácia polohy servopohonu
37
7 Praktická realizácia Riadiacej jednotky servopohonu 7.1 Popis zapojenia
Jadro celého zapojenia tvorí mikrokontrolér ATtiny15L s riadiacim programom
uloženým v jeho FLASH pamäti. Hodinový takt udáva interný oscilátor s frekvenciou
1,6MHz. Celá Riadiaca jednotka servopohonu sa k vonkajším obvodom pripája cez
svorkovnicu J1.
Napájacie napätie privedené na svorkovnicu J1 prechádza ochranou diódou D1, ktorá
chráni obvody pri prepólovaní napájacieho napätia, na vstup napäťového stabilizátora
IO1. Kondenzátory C2 a C3 zabraňujú prípadnému rozkmitaniu stabilizátora. Výstupné
napätie stabilizátora je diódou D2 zvýšené na +5,6V. Z tohto napätia je cez oddeľovaciu
diódu D3 napájaní blok spínačov napätia elektromotora a taktiež nabíjaní zálohovací
kondenzátor C12 s kapacitou 1,5 F cez rezistor R12. Tento rezistor obmedzí nabíjací
prúd v okamihu pripojenia vybitého kondenzátora k napätiu. Dióda D3 zabráni vybitiu
zálohovacieho kondenzátora cez stabilizátor po vypnutí napájania. Všetky ostatné obvody
sú napájané cez diódu D4.
Spínanie napätia pre elektromotor zabezpečujú tranzistory T1 a T2 a koncový spínač KS,
ktorý po dosiahnutí koncovej polohy rozpojí jednu vetvu napájania. Tranzistory sú
ovládané portami PB0 a PB1 cez rezistory R5, R6, ktoré obmedzujú prúd pri nabíjaní
parazitných kapacít riadiacich elektród tranzistorov počas spínania.
Prúd elektromotorom je snímaný rezistorom R11. Vzniknutý napäťový úbytok je po
vyfiltrovaní RC členom R10, C10 privedení na neinvertujúci zosilňovač, tvorený
operačným zosilňovačom IC3A a rezistormi R8, R9. Zosilnené napätie je po filtrovaní
prvkami R7, C9 privedené na port PB4.
Riadiace napätie privádzané na svorkovnicu J1, je upravené na vhodnú veľkosť deličom
R1 a R2, filtrované C7, R3, C8 a následne privedené na port PB3. Porty PB3 a PB4 sú
v mikrokontroléry pripojené na analógový multiplexor, za ktorým je pripojení AD
prevodník.
Prepojka JP2 umožňuje zvoliť režim riadenia podľa stavu napájacieho napätia, ktorý sa
využíva v modifikovaných verziách Riadiacej jednotky servopohonu, popísaných
v ďalších kapitolách.
39
40
ISP programovanie mikrokontroléra je realizované cez konektor J2, zapojený podľa
odporučenia firmy ATMEL popísaného v [7]. Keďže sa prekrývajú použité porty a porty
cez ktoré sa prevádza programovanie je použitá už spomínaná oddeľovacia dióda D4.
Táto zabráni spúšťaniu elektromotora počas programovania. Ostatné prvky v zapojení
slúžia len na filtráciu napájacieho napätia.
Cele zapojenie je realizované SMT technológiou na doske plošných spojov s rozmermi
41 x 39 mm. Rozmery boli limitované fyzickými rozmermi samotného servopohonu.
8 Modifikácie Na pokrytie širokej oblasti použitia servopohonu boli navrhnuté nasledovné modifikácie:
Verzia 1.1 - Proporcionálne riadenie polohy, riadiaci signál 0 – 5V, napájanie 5V
Verzia 1.2 - Proporcionálne riadenie polohy, riadiaci signál 0 – 10V, napájanie
12V
Verzia 1.3 - Proporcionálne riadenie polohy, riadiaci signál 0 – 10V, napájanie 24V
Verzia 2.1 - Dvojstavové riadenie (Otvorený - Zatvorený), napájanie 12V
Verzia 2.2 - Dvojstavové riadenie (Otvorený - Zatvorený), napájanie 24V
Modifikácie budú popísané v ďalšej časti. Zmeny sa týkajú zapojenia zdroja , deliča
riadiaceho signálu, prepojky JP2 a riadiaceho programu.
8.1 Verzia 1.1 - Proporcionálne riadenie polohy, riadiaci signál 0 – 5V,
napájanie 5V
8.1.1 Zdroj
V zapojení zdroja došlo k výrazným zmenám oproti základného zapojeniu. Boli
vynechané, prípade nahradené niektoré obvodové prvky. Zapojenie po úprave vyzerá
nasledovne:
Obr. 8.1 Schéma prvej úpravy zdroja
42
Zo zapojenia bol vynechaní stabilizátor a sním súvisiace prvky a taktiež zálohovací
kondenzátor.
8.1.2 Delič riadiaceho signálu
Delič zabezpečuje úpravu veľkosti rozsahu riadiaceho signálu z 0 – 5V na rozsah
0 – 2,5V. Vychádza sa z jeho zapojenia na obrázku 8.2:
Obr. 8.2 Delič riadiaceho signálu
Výpočet hodnôt prvkov R1 a R2
Pri výpočte sa využíva nasledovný vzťah:
212
2 RRRUU rdR +
⋅= kde UR2 – max. výstupné napätia deliča
Urd – max. vstupné napätia deliča
R1, R2 – prvky deliča
Pre tento konkrétny prípad vstupné údaje sú:
Urd = 5V
UR2 = 2.5V
R2 = 11 kΩ , zvolená hodnota.
Potom pre hodnotu R1 platí:
( ) ( )Ω=Ω⋅=
−⋅⋅=
−⋅= k
UUURR
R
Rrd 1110115,2
5,25101121 33
2
2
Pre delič sú použité vypočítané prvky R1 = R2 = 11 kΩ.
8.1.3 Prepojka JP2 Prepojka JP2 je v tomto prípade rozpojená.
43
8.2 Verzia 1.2 - Proporcionálne riadenie polohy, riadiaci signál 0 – 10V,
napájanie 12V
8.2.1 Zdroj
Oproti pôvodnému zapojeniu bol vynechaní zálohovací kondenzátor a dve diódy,
ktoré boli nahradené prepojkou. Upravené zapojenie je na obrázku 8.3:
Obr. 8.3 Schéma druhej úpravy zdroja
8.2.2 Delič riadiaceho signálu
Pri určovaní prvkov deliča sa vychádza z toho istého postupu, aký bol použitý
v kapitole 8.1.2 Delič riadiaceho signálu.
Vstupnú údaje pre výpočet sú:
Urd = 10V
UR2 = 2.5V
R2 = 11 kΩ , zvolená hodnota.
Potom pre hodnotu R1 platí:
( ) ( )Ω=Ω⋅=
−⋅⋅=
−⋅= k
UUUR
RR
Rrd 3310335,2
5,25101121 3
3
2
2
Pre delič sú použité vypočítané prvky R1 = 33 kΩ a R2 = 11 kΩ.
8.1.3 Prepojka JP2
Prepojka JP2 je v tomto prípade rozpojená.
44
8.3 Verzia 1.3 - Proporcionálne riadenie polohy, riadiaci signál 0 – 10V,
napájanie 24V
Zapojenie tejto verzie modifikácie je totožné z predchádzajúcou, až na napäťový
stabilizátor v zdroji. Tento je nahradený za typ 78M05, z dôvodu väčšej výkonovej straty
na tomto stabilizátore.
78M05 oproti 78L05 umožňuje zaťaženie väčším prúdom (0,5A oproti 0,1A), ale hlavne
má iné púzdro a tým aj väčšiu dovolenú výkonovú stratu.
Poznámky k deliču riadiaceho napätia a prepojke JP2, platia tie isté ako v kapitole 8.2.
8.4 Verzia 2.1 a 2.2 - Dvojstavové riadenie (Otvorené - Zatvorené),
napájanie 12V a 24V
Servopohon má v týchto verziách iba dve polohy, ktoré sú riadené napájacím napätím:
• Zatvorené - prítomnosť napájacieho napätia
• Otvorené – bez napätia
Pri analýze požiadaviek na Riadiacu jednotku servopohonu narazíme na jeden problém
a tým je presun do polohy „Otvorené“, kvôli chýbajúcemu napájaciemu napätiu. Tento
problém je možné odstrániť dočasným zálohovaním napájacieho napätia. Zálohovanie je
v tomto prípade vyriešené zálohovacím kondenzátorom s kapacitou až 1,5F, ktorý svojim
nábojom pokryje výpadok napätia počas zmeny polohy. Nabíjanie kondenzátora prebieha
počas prítomnosti napájacieho napätia.
Realizácia Riadiacej jednotky vychádza zo základného zapojenia popísaného v kapitole
7.2 na obrázku 7.1.
Aby bolo riadenie realizované zmenou napájacieho napätia je potrebné zabezpečiť
prepojenie prepojky JP2, ktorou sa napájacie napätie privedie na delič riadiaceho napätia.
Pre samotnú realizáciu je potrebné ešte vypočítať hodnoty prvkov tohto deliča.
45
Výpočet prvkov deliča riadiaceho napätia
Realizuje sa podľa postupu uvedeného v kapitole 8.1.2.
Hodnoty vstupných údajov pre výpočet :
Urd12 = 12V – 2V = 10V , najnižšie povolené napájacie napätie pre 12V verziu
Urd24 = 24V – 4V = 20V , najnižšie povolené napájacie napätie pre 24V verziu
UR2 = 1.5V , rozhodovacia úroveň, bola zvolená z rozsahu 0 – 2,5V
R2 = 3,9 kΩ , zvolená hodnota.
Potom pre hodnoty rezistora R1 platí:
( ) ( )Ω=Ω⋅=
−⋅⋅=
−⋅= k
UUURR
R
RrdV 1,22101,22
5,15,110109,321 3
3
2
21212
( ) ( )Ω=Ω⋅=
−⋅⋅=
−⋅= k
UUURR
R
RrdV 1,48101,48
5,15,120109,321 3
3
2
22424
Pre praktickú realizáciu sú hodnoty prvkov upravené na:
• 12V napájanie: R1 = 22 kΩ, R2 = 3,9kΩ
• 24V napájanie : R1 = 47 kΩ, R2 = 3,9 kΩ
Pri 24V napájaní je potrebné zrealizovať aj výmenu stabilizátora 78L05 za typ 78M05,
z dôvodov popísaných v kapitole 8.3.
8.4.1 Riadiaci program
Riadiaci program uložený v programovej pamäti mikrokontroléra, zabezpečuje
vykonávanie týchto štyroch základných úloh:
• Inicializáciu periférií
• Sledovanie zmien riadiaceho signálu
• Presun do polohy „Otvorený“
• Presun do polohy „Zatvorený“
Činnosť programu je možné popísať jednoduchým vývojovým diagramom:
46
Záver
Regulácia vykurovania objektov je široká oblasť, dôkazom čoho je aj množstvo
firiem zaoberajúcich sa touto problematikou. Pri riešení niektorých problémov by mal
pomôcť aj v tejto práci popísaný servopohon pre regulačný ventil.
Práca popisuje celý návrh riadenia servopohonu. V prvej časti sú rozanalyzované
požiadavky na riadiacu jednotku servopohonu a jej základné bloky.
V ďalších kapitolách nasleduje návrh konkrétnych blokov jednotky a to blokov
spracovania riadiaceho signálu, riadenia elektromotora servopohonu, napájacích obvodov
a samotného riadenia. Súčasťou je aj výber vhodných prvkov a popis ich základných
vlastností.
Neoddeliteľnou súčasťou je aj riadiaci program jednotky. Program rieši otázky výpočtu
a riadenia polohy servopohonu. Z dôvodu chýbajúcej priamej podpory niektorých
aritmetických operácií použitým mikrokontrolérom, je súčasťou tejto kapitoly aj ich
vhodný spôsob riešenia.
V poslednej časti je uvedení celkový návrh obvodového riešenia riadiacej jednotky
a predstavení rad modifikácií, ktoré by mali pokryť širokú škálu použitia.
Tieto verzie sa líšia predovšetkým spôsobom riadenia polohy, riadiacim signálom
a veľkosťou napájacieho napätia. Prvé tri verzie umožňujú plynulú zmenu polohy, zatiaľ
čo ďalšie dve iba dvojstavovú reguláciu.
Riadenie analógovým riadiacim signálom je nožné v budúcnosti nahradiť digitálnym
signálom s vhodnou formou. Zmena by si vyžiadala len minimálne zmeny v navrhovanej
koncepcii.
48
Zoznam použitej literatúry [1] www.atmel.com [2] datasheet ATtiny15L [3] datasheet LMC6482IM [4] datasheet IRF7343 [5] datasheet 78L05 [6] PUNČOCHÁŘ, J.: Operační zesilovače v elektronice. Praha: BEN – technická
literatúra, 2002. ISBN 80-7300-059-8
[7] Application Notes AVR 042: AVR Hardware Design Considerations
49
ČESTNÉ VYHLÁSENIE
Vyhlasujem, že som zadanú diplomovú prácu vypracoval samostatne, pod odborným vedením vedúceho diplomovej práce Ing. Mariána Dutku a používal som len literatúru uvedenú v práci.
Súhlasím so zapožičiavaním diplomovej práce.
V Žiline dňa 19.5. 2005 Podpis .................................
50
POĎAKOVANIE
Touto cestou by som sa chcel poďakovať môjmu vedúcemu diplomovej práce Ing.
Mariánovi Dutkovi za odborné rady pri riešení problémov diplomovej práce.
Jozef Hutira
51
ŽILINSKÁ UNIVERZITA V ŽILINE Elektrotechnická fakulta Katedra telekomunikácií
DIPLOMOVÁ PRÁCA
PRÍLOHOVÁ ČASŤ 2006 bc. Jozef Hutira
52
Zoznam príloh: Príloha 1. Fotografia servopohonu Príloha 2. Doska plošných spojov Riadiacej jednotky Príloha 3. Výpis riadiaceho programu
53
Príloha 3 – Výpis riadiaceho programu ; *************************************************** ; ServoPohon v 1.0 ; *************************************************** ; Device = ATtiny15 ; XTAL = 1.6MHz ; *************************************************** .include "tn15def.inc" .equ CalTime = 12 ; cas pre dalsiu kalibraciu (v hodinach) .equ MaxADC_H = 0x03 ; max. hodnota zmarana AD prevodnikom .equ MaxADC_L = 0xFF .def STACK1 = r0 ; zasobnik na ulozenie obsahu registrov .def STACK2 = r1 .def temp2 = r2 .def temp3 = r3 .def temp4L = r4 .def temp4H = r5 .def nxt_PSL = r7 ; cas potrebny pre presun na novu poziciu .def nxt_PSH = r8 .def pocT01 = r9 ; pocitadla pre casovac 1 .def pocT02 = r10 .def pocT03 = r11 .def pocT1 = r12 .def pocT2 = r13 .def lst_PSL = r14 ; posledna zmerana hodnota Ur .def lst_PSH = r15 .def cal_Lo = r16 ; kalibracna konstanta .def cal_Hi = r17 .def ADC8b = r18 ; 8 bitovy vysledok merania .def ADC16L = r19 ; 16 bitovy vysledok merania .def ADC16H = r20 .def poc1 = r21 ; pocitadlo 1 .def poc2 = r22 ; pocitadlo 2 .def poc3 = r23 ; pocitadlo 3 .def temp = r24 ; temp .def temp1 = r25 ; temp1 .equ OPEN = 1 ; OPEN out .equ CLOSE = 0 ; CLOSE out .equ POS = 3 ; POS input .equ IS = 4 ; IS input .equ JUMPER = 2 ; JUMPER .equ ADC_POS = 0x82 ; <=> (1<<REFS1)+(1<<MUX1) .equ ADC_IS = 0x83 ; <=> (1<<REFS1)+(1<<MUX1)+(1<<MUX0) .equ I_MAX = 200 ; VypinaciPrud = (4 * I_MAX + 3) * 2.56 / 1023 ; *************************************************** ; *************************************************** .cseg ; CODE segment .org 0000 rjmp RESET
56
.org 0004 rjmp T1_OVF ; *************************************************** RESET: rcall AVR_ini ; inicializovanie AVR ldi temp, CalTime ; prednastavenie registrov casovanie kalibracie mov pocT03, temp ldi temp, 172 ; 172; 256 - 84 = 172 mov pocT02, temp set ; nastavenie priznaku kalibracie (bit T) TEST: brtc TESTp ; ak nie je nastavena priznak kalibracia tak preskoc rcall CALIBR ; kalibracia clt ; nulovanie znacky kalibracie sbic PINB, JUMPER ; test JUMPERa rjmp ClrLstV ; nulovanie Last Value ldi temp, MaxADC_H ; Last Position = 1023 (3FF) mov lst_PSH, temp ldi temp, MaxADC_L mov lst_PSL, temp rjmp TESTp ClrLstV: clr lst_PSH ; nulovanie Last Value clr lst_PSL TESTp: sbi ADCSR, ADSC ; Spustenie prevodu ADC w_ADC: sbic ADCSR, ADSC ; Cakanie na dokoncenie konverzie ADC rjmp w_ADC in ADC16L, ADCL in ADC16H, ADCH sbic PINB, JUMPER ; test JUMPERa rjmp TESTp1 ldi temp1, 0x03 ; (ADC16H;ADC16L) = 1023 - (ADC16H;ADC16L) ldi temp, 0xFF sub temp, ADC16L sbc temp1, ADC16H mov ADC16L, temp mov ADC16H, temp1 TESTp1: cp ADC16L, lst_PSL ; Zistenie smeru pohybu cpc ADC16H, lst_PSH brcc ps_OPEN ; skok na zmenu polohy do smeru OPEN ; *************************************************** ; Zmena polohy do smeru CLOSE ; *************************************************** mov temp, lst_PSL mov temp1, lst_PSH sub temp, ADC16L ; (temp1;temp) = (lst_PSH;lst_PSL) - (ADC16H;ADC16L) sbc temp1, ADC16H clr temp2 ; porovnavanie rozdielu s hodnotou 0x10 cpi temp, 0x10 cpc temp1, temp2 brcs TEST ; ak je rozdiel menssi ako 0x10 tak sa poloha neaktualizuje mov lst_PSL, ADC16L ; ulozenie novej hodnoty riadiaceho napatia
57
mov lst_PSH, ADC16H rcall MulDiv ; vypocet novej pozicie ldi temp, ADC_IS ; Prepnutie MUX ADC na meranie IS out ADMUX, temp clr temp ; nulovanie pocitadial meraca casu out TCNT1, temp clr pocT1 clr pocT2 cbi PORTB, CLOSE ; Aktivovanie pohonu do polohy CLOSE ldi poc3, 10 ; pocitadlo pre casove oneskorenie: poc3 * 50ms w_CLS: rcall w_50ms ; casove oneskorenie 50ms rcall ADC_ct ; ADC convert cpi ADC8b, I_MAX-5 ; brcs w_CLS1 ; ak Akt. prud je mensi ako I_MAX-10 skok na "w_CLS1" dec poc3 ; dekrementovanie pocitadla tst poc3 brne w_CLS w_CLS1: cp pocT1, nxt_PSL cpc pocT2, nxt_PSH brcc Deakt ; pokial je uplinuty cas menssi ako cas potrebny na presun rcall ADC_ct ; ADC convert cpi ADC8b, I_MAX ; Porovnaj a skoc ak ADC8b < I_MAX brcs w_CLS1 Deakt: sbi PORTB, CLOSE ; Deativovanie pohonu ldi temp, ADC_POS ; Prepnutie MUX ADC na meranie riadiaceho napetia out ADMUX, temp rjmp TEST ; *************************************************** ; Zmena polohy do smeru OPEN ; *************************************************** ps_OPEN :mov temp, ADC16L mov temp1, ADC16H sub temp, lst_PSL ; (temp1;temp) = (ADC16H;ADC16L) - (lst_PSH;lst_PSL) sbc temp1, lst_PSH clr temp2 ; porovnavanie rozdielu s hodnotou 0x10 cpi temp, 0x10 cpc temp1, temp2 brcc p_OPEN rjmp TEST ; ak je rozdiel mensi ako 0x10 tak sa poloha neaktualizuje p_OPEN: mov lst_PSL, ADC16L ; ulozenie novej hodnoty riadiaceho napatia mov lst_PSH, ADC16H rcall MulDiv ; vypocet novej pozicie clr temp ; nulovanie pocitadial meraca casu out TCNT1, temp clr pocT1 clr pocT2 ldi temp, ADC_IS ; Prepnutie MUX ADC na meranie IS out ADMUX, temp cbi PORTB, OPEN ; Aktivovanie pohonu do smeru OPEN w_OPEN: cp pocT1, nxt_PSL cpc pocT2, nxt_PSH
58
brcs w_OPEN ; cakaj pokial je uplinuty cas mensi ako cas potrebny na presun sbi PORTB, OPEN ; Deativovanie pohonu ldi temp, ADC_POS ; Prepnutie MUX ADC na meranie riadiaceho napetia out ADMUX, temp rjmp TEST ; *************************************************** ; AVR init ; *************************************************** AVR_ini: ldi temp, (1<<OPEN)+(1<<CLOSE) ; OPEN & CLOSE vystup out DDRB, temp ldi temp, (1<<OPEN)+(1<<CLOSE)+(1<<JUMPER) out PORTB, temp ldi temp, (1<<ADEN)+(1<<ADPS2) ; Inicializovanie ADC out ADCSR, temp ldi temp, ADC_POS ; Prepnutie MUX ADC na ADC_POS out ADMUX, temp ldi temp, (1<<CS13)+(1<<CS12)+(1<<CS11) ; Inicializovanie casovaca 1 out TCCR1, temp ; 1/512 ldi temp, (1<<TOIE1) ; povolenie prerusenia casovaca 1 out TIMSK, temp sei ; globalne povolenie preruseni ret ; *************************************************** ; Kalibracia ; *************************************************** CALIBR: ldi temp, ADC_IS ; Prepnutie MUX ADC na meranie IS out ADMUX, temp cbi PORTB, OPEN ; Aktivovanie pohonu do polohy OPEN w_cal0: rcall ADC_ct ; ADC convert cpi ADC8b, 0x05 ; Porovnaj a skoc ak ADC8b <5 brcc w_cal0 sbi PORTB, OPEN ; Deativovanie pohonu clr temp ; nulovanie pocitadial meraca casu out TCNT1, temp clr pocT1 clr pocT2
cbi PORTB, CLOSE ; Aktivovanie pohonu do polohy CLOSE ldi poc3, 10 ; pocitadlo pre casove oneskorenie: poc3 * 100ms w_cal1: rcall w_50ms ; casove oneskorenie 50ms rcall ADC_ct ; ADC convert cpi ADC8b, I_MAX-10 ; ak Akt. prud je mensi ako I_MAX-10 skok na "w_cal2" brcs w_cal2 dec poc3 ; dekrementovanie pocitadla tst poc3 brne w_cal1 w_cal2: rcall ADC_ct ; ADC convert cpi ADC8b, I_MAX ; Porovnaj a skoc ak ADC8b < I_MAX brcs w_cal2 sbi PORTB, CLOSE ; Deativovanie pohonu mov cal_Lo, pocT1 ; ulozenie merania mov cal_Hi, pocT2
59
ldi temp, ADC_POS ; Prepnutie MUX ADC na meranie riadiaceho napatia out ADMUX, temp ret ; *************************************************** ; ADC prevod ; *************************************************** ADC_ct: sbi ADCSR, ADSC ; Spustenie prevodu ADC w_ADC1: sbic ADCSR, ADSC ; Cakanie na dokoncenie konverzie ADC rjmp w_ADC1 in ADC16L, ADCL in ADC16H, ADCH mov ADC8b, ADC16L mov temp, ADC16H lsr temp ; ADCW / 4 ror ADC8b lsr temp ror ADC8b ret ; *************************************************** ; Casove oneskorenie 50ms ; *************************************************** w_50ms: clr poc1 ldi poc2, 0x68 w50_1: dec poc1 brne w50_1 dec poc2 brne w50_1 ret ; *************************************************** ; Obsluha prerusenia casovaca 1 ; *************************************************** T1_OVF: cli ; zakazanie preruseni in STACK1, SREG ; ulozenie obsahu mov STACK2, temp inc pocT1 brne T1_sk1 ; ak doslo k preteceniu inkrementuj pocT2 inc pocT2 T1_sk1: dec pocT01 brne T1_sk2 ; ak pocT01 = 0 tak dekrementuj pocT2 dec pocT02 brne T1_sk2 ; ak pocT02 = 0 tak dekrementuj pocT3 ldi temp, 172 ; 172; 256 - 84 = 172 mov pocT02, temp ; prednastavenie pocT02 dec pocT03 brne T1_sk2 ; ak pocT03 = 0 tak kalibruj ldi temp, CalTime mov pocT03, temp set ; nastavenie znacky (bit T) kalibracie bld STACK1, 6 T1_sk2: out SREG, STACK1 ; obnovenie obsahu mov temp, STACK2 sei ; povolenie preruseni reti
60
; *************************************************** ; Vypocet novej polohy ;*** ;* (nxt_PSH;nxt_PSL) = ((temp1;temp) * (cal_Hi;cal_Lo)) / 0x03FF ;*** ; *************************************************** MulDiv: clr temp3 ; NASOBENIE clr temp2 ; nulovanie horných 16b výsledku ldi poc3,16 ; nastavenie pocitadla lsr temp1 ror temp m16u_1: brcc noad8 add temp2, cal_Lo adc temp3, cal_Hi noad8: ror temp3 ror temp2 ror temp1 ror temp dec poc3 brne m16u_1 ; ak nula koniec nasobenia ; DELENIE ldi poc1, MaxADC_L ; delitel ldi poc2, MaxADC_H div16u: clr temp4L ; nulovanie zvysku Lo bajt sub temp4H,temp4H ; nulovanie zvysku Hi bajt a carry bitu ldi poc3,33 ; nastavenie pocitadla d16u_1: rol temp ; posuv delenca do lava rol temp1 rol temp2 rol temp3 dec poc3 ; dekramentovanie pocitadla brne d16u_2 ; mov nxt_PSL, temp mov nxt_PSH, temp1 ret ; koniec vypoctu d16u_2: rol temp4L ; posuv delenca do lava cez zvysok rol temp4H sub temp4L,poc1 ; zvysok = zvysok - delitel sbc temp4H,poc2 ; brcc d16u_3 ; ak je vysledok zaporny add temp4L,poc1 ; adc temp4H,poc2 clc ; nulovanie carry bitu rjmp d16u_1 d16u_3: sec ; nastavenie carry bitu rjmp d16u_1
61