Ovládání krokových motorů přes AT89C2051 nefunguje
Napsal: 14 dub 2010, 10:32
Dobrý den. Mám menší problém. Zadání mé úlohy je ovládat dva krokové motory přes mikrokontrolér AT89C2051. Jedná se o polohovací zařízení na kameru. Mám 4 tlačítka na vstupu připojené na bránu P3 (leva - P3.3, prava - P3.2, nahoru - P3.1, dolu - 3.0). Je to zapojené tak, že na vstupu daného portu je vždy log.1, po stisku tlačítka se obvod uzavře přes indikační diodu a předřadný odpor 220ohm k zemi a na vstupu se objeví log.0. Tato část funguje. Problém ovšem nastává na výstupu. Pro zkoušku je nahrán program na střídání log.1 a 0 na jednotlivých bitech portu P3.
Projekt se skládá ze dvou plošných spojů. Jeden řídící (na obrázku vlevo od Atmel) a výkonovou část (vpravo od Atmel) a je to propojeno přes svorkovnice. Tento program oživí Atmel pouze na 6 z 8 bitů portů brány P3. Střídavě má vždy cca 2s log1 a 0. Kromě dvou P1.0 a P1.1. Ovšem když připojím výkonovou část s tranzistory, tak na výstupu je stále 0,6V. Kromě tedy zase té P1.1,P1.0.
Když byl nahrán program na řízení motorů tak na P1.4-P1.7 při držení tlačítka se napětí na výstupu pohybovalo vždy mezi 0,2 - 0,4V. Bylo viditelné okem na měřáku, tedy zpoždění by mělo být v pořádku. Při stisku myslím 2 tlačítek napětí také skákalo mezi 0,2 až 0,4 ale vždy se jednou vrátilo na 0 a podruhé na 0,6V asi.
Mám dva mikroprocesory. Jeden jsem zjistil že je asi vadný, ale zkoušel jsem to i s druhým novým a pořád to samé.
Krokové motory jsou použité z tiskáren HP deskjet 690c. s označením PM35L-048-HPD4. Má 5 vývodů, řízení unipolární, podle popisu výrobce napájen 24V DC.
Nemáte někdo nějakou radu kde by mohl být problém? Po pár debatách jsme usoudili jestli použité tranzistory nejsou pořád sepnuty k zemi a nebo je třeba nahradit Darlingtonovým zapojením (např. TIP122).
Předem děkuji za rady.
schéma zapojení:
[img=http://www.freeimagehosting.net/uploads/th.74f9cf2e47.jpg]
zde je program na řízení motorů, jestli je úplně dobře zatím netuším, nespínají ty tranzistory.
include REG51.INC
org 0
sjmp start
org 30h
start:
clr P3.7 ;rozsvícení diody napajájecí:
testovani_vstupu:
jnb P3.3,LEVA ;jump if not bit
jnb P3.2,PRAVA
jnb P3.1,NAHORU
jnb P3.0,DOLU
sjmp testovani_vstupu;
LEVA:
mov P1,#00000011b ;1,3 – L 2,4 - P
acall zpozdeni
mov P1,#00000110b
acall zpozdeni
mov P1,#00001100b
acall zpozdeni
mov P1,#00001001b
acall zpozdeni
sjmp testovani_vstupu
PRAVA:
mov P1,#00001001b
acall zpozdeni
mov P1,#00001100b
acall zpozdeni
mov P1,#00000110b
acall zpozdeni
mov P1,#00000011b
acall zpozdeni
sjmp testovani_vstupu
NAHORU:
mov P1,#00110000b
acall zpozdeni
mov P1,#01100000b
acall zpozdeni
mov P1,#11000000b
acall zpozdeni
mov P1,#10010000b
acall zpozdeni
sjmp testovani_vstupu
DOLU:
mov P1,#10010000b
acall zpozdeni
mov P1,#11000000b
acall zpozdeni
mov P1,#01100000b
acall zpozdeni
mov P1,#00110000b
acall zpozdeni
sjmp testovani_vstupu ;short jump – po projeti cyklu testuje zda je ještě „0“
zpozdeni: mov r3,#5
cek2: mov r2,#100
cek1: mov r1,#150
djnz r1,$
djnz r2,cek1
djnz r3,cek2
ret ;vyskočení z podprogramu
end ;ukončení programu
Projekt se skládá ze dvou plošných spojů. Jeden řídící (na obrázku vlevo od Atmel) a výkonovou část (vpravo od Atmel) a je to propojeno přes svorkovnice. Tento program oživí Atmel pouze na 6 z 8 bitů portů brány P3. Střídavě má vždy cca 2s log1 a 0. Kromě dvou P1.0 a P1.1. Ovšem když připojím výkonovou část s tranzistory, tak na výstupu je stále 0,6V. Kromě tedy zase té P1.1,P1.0.
Když byl nahrán program na řízení motorů tak na P1.4-P1.7 při držení tlačítka se napětí na výstupu pohybovalo vždy mezi 0,2 - 0,4V. Bylo viditelné okem na měřáku, tedy zpoždění by mělo být v pořádku. Při stisku myslím 2 tlačítek napětí také skákalo mezi 0,2 až 0,4 ale vždy se jednou vrátilo na 0 a podruhé na 0,6V asi.
Mám dva mikroprocesory. Jeden jsem zjistil že je asi vadný, ale zkoušel jsem to i s druhým novým a pořád to samé.
Krokové motory jsou použité z tiskáren HP deskjet 690c. s označením PM35L-048-HPD4. Má 5 vývodů, řízení unipolární, podle popisu výrobce napájen 24V DC.
Nemáte někdo nějakou radu kde by mohl být problém? Po pár debatách jsme usoudili jestli použité tranzistory nejsou pořád sepnuty k zemi a nebo je třeba nahradit Darlingtonovým zapojením (např. TIP122).
Předem děkuji za rady.
schéma zapojení:
[img=http://www.freeimagehosting.net/uploads/th.74f9cf2e47.jpg]
zde je program na řízení motorů, jestli je úplně dobře zatím netuším, nespínají ty tranzistory.
include REG51.INC
org 0
sjmp start
org 30h
start:
clr P3.7 ;rozsvícení diody napajájecí:
testovani_vstupu:
jnb P3.3,LEVA ;jump if not bit
jnb P3.2,PRAVA
jnb P3.1,NAHORU
jnb P3.0,DOLU
sjmp testovani_vstupu;
LEVA:
mov P1,#00000011b ;1,3 – L 2,4 - P
acall zpozdeni
mov P1,#00000110b
acall zpozdeni
mov P1,#00001100b
acall zpozdeni
mov P1,#00001001b
acall zpozdeni
sjmp testovani_vstupu
PRAVA:
mov P1,#00001001b
acall zpozdeni
mov P1,#00001100b
acall zpozdeni
mov P1,#00000110b
acall zpozdeni
mov P1,#00000011b
acall zpozdeni
sjmp testovani_vstupu
NAHORU:
mov P1,#00110000b
acall zpozdeni
mov P1,#01100000b
acall zpozdeni
mov P1,#11000000b
acall zpozdeni
mov P1,#10010000b
acall zpozdeni
sjmp testovani_vstupu
DOLU:
mov P1,#10010000b
acall zpozdeni
mov P1,#11000000b
acall zpozdeni
mov P1,#01100000b
acall zpozdeni
mov P1,#00110000b
acall zpozdeni
sjmp testovani_vstupu ;short jump – po projeti cyklu testuje zda je ještě „0“
zpozdeni: mov r3,#5
cek2: mov r2,#100
cek1: mov r1,#150
djnz r1,$
djnz r2,cek1
djnz r3,cek2
ret ;vyskočení z podprogramu
end ;ukončení programu