Stránka 1 z 1

Ovládání krokových motorů přes AT89C2051 nefunguje

Napsal: 14 dub 2010, 10:32
od frenkie1988
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

Napsal: 14 dub 2010, 10:47
od ZdenekHQ
P1.0 a P1.1 vyžadují externí pull-up odpory kvůli internímu komparátoru .

Měl bys nejspíš nějak definovat stav P1 po startu a po vyskočení z jednotlivých podprogramů.

Napsal: 14 dub 2010, 11:14
od Standa33
Zkus na výstupy uP připojit jen (8x LED s odpory), zpozdeni nastav na cca 1s. Každý stav pak bude "vidět" po dobu 1s - otestuješ funkce programu.

Poté zapoj žárovky do kolektorů tran. - otestuješ zda správně spínají tranzistory.