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
Ovládání krokových motorů přes AT89C2051 nefunguje
Moderátor: Moderátoři
- frenkie1988
- Příspěvky: 1
- Registrován: 14 dub 2010, 02:00
- ZdenekHQ
- Administrátor
- Příspěvky: 25593
- Registrován: 21 črc 2006, 02:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
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ů.
Měl bys nejspíš nějak definovat stav P1 po startu a po vyskočení z jednotlivých podprogramů.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]