Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Wejście analogowe w 89c2051

Leon
-
-
Posty: 7
Rejestracja: 19 mar 2003, o 12:57
Lokalizacja: Kalisz/Wlkp.

Wejście analogowe w 89c2051

Postautor: Leon » 22 cze 2003, o 11:07

Chciałbym zrealizować układ, za pomocą którego mógłbym sterować silnik krokowy. Chodzi o to, aby wykorzystać wejście analogowe At89... Na skutek ruchu potencjometru silnik krokowy ma zmieniać prędkość i kierunek obrotów. I tak: położenie środkowe potencjomertru - silnik nie pracuje, wychylenie potencjometru w prawo - silnik obraca się w prawo z prędkością zależną od wychylenia (im większe wychylenie tym większa prędkość), wychylenie potencjometru w lewo - ruch silnika w lewo z prędkością zależną od wychylenia.
Czy jest to możliwe na at89cx051? Słyszałem, że nie można realizować sprzężeń zwrotnych na tych procesorach.

Awatar użytkownika
franyo
-
-
Posty: 30
Rejestracja: 1 maja 2003, o 21:48
Lokalizacja: Wałbrzych
Kontaktowanie:

Postautor: franyo » 22 cze 2003, o 23:38

Witam
Atmele 89cx51 niestety nie mają wbudowanego przetwornika A/C tylko zwykły komparator. Porównuje on napięcia na pinach P1.0 i P1.1, i jeżeli na P1.0 będzie większe, to na wyjściu (pin P3.6 niedostępny na zewnątrz, ale normalnie obsługiwany) będzie 1, w przeciwnym razie 0. Proponuję więc 2 rozwiązania:
1. Podłączasz suwak potencjometru do P1.0, do P1.1 wyjście przetwornika C/A sterowanego z Atmela - np. drabinka rezystorów na porcie P3 + wtórnik. Reszta to oprogramowanie - P3 inkrementujesz - napięcie po wtórniku zaczyna skokowo rosnąć aż przewyższy napięcie z potencjometru - komparator zmieni stan na 0 - ty to wykrywasz i z liczby otrzymanej w tym momencie na P3 masz położenie suwaka potencjometru.
2. Lepsze (dokładniejsze) rozwiązanie przetwornika C/A to wykorzystanie kondziora liniowo ładowanego od 0 do napięcia zasilania z jakiegoś źródła prądowego. Kondzior podłączasz do P1.0, jak napięcie na nim przewyższy napięcie na suwaku - komparator zmieni stan - sprawdzasz czas, w jakim to zaszło i masz położenie suwaka - im szybciej tym suwak bliżej masy. Po sprawdzeniu rozładowujesz kondziora za pomocą jakiegoś tranzystorka sterowanego z Atmela i zaczynasz mierzyć czas od nowa.
Mam nadzieję, że naprowadziłem Cię na rozwiązanie.
Pzdr.

Leon
-
-
Posty: 7
Rejestracja: 19 mar 2003, o 12:57
Lokalizacja: Kalisz/Wlkp.

Postautor: Leon » 23 cze 2003, o 16:27

Rzeczywiście, w twoim pomyśle coś jest - dzięki, ale napotkałem się na inny problem - tym razem programowy: kiedy procesor "zmierzy" już wychylenie potencjometru i silnik zacznie się obracać, musi on ciągle monitorować położenie suwaka, aby silnki zmienił liczbę obrotów (lub kierunek) w razie potrzeby, no i ten podprogram dział w tej samej pętli co podprogram obsługi silnika strasznie zwalniając obroty silnika (operacja odczytu wartości wychylenia potencjometru zajmuje dużo czasu). Czy możnaby zlikwidować jakoś to opóżnienie? Może jakiś podprogram z przerwaniem, tak żeby zareagował na zmianę położenia suwaka?

katarcza
-
-
Posty: 158
Rejestracja: 29 kwie 2003, o 12:48

Postautor: katarcza » 23 cze 2003, o 22:34

Mozna jeszcze tak:

suwak potencjometru na jedno wejscie komparatora, do drugiego wejścia kondesator do masy oraz rezystor do innego pinu procka. potencjometr pomiedzy GND i Vcc.

procedura polega na pomiarze czasu ładowania kondesatora, mozna w prosty sposób urzyc przerwania komparatora (o ile takie jest w 2051, bo nie pamietam).

reszta chyba jasna, jak by ktos nie wiedział jak to chetnię odpowiem.

Awatar użytkownika
franyo
-
-
Posty: 30
Rejestracja: 1 maja 2003, o 21:48
Lokalizacja: Wałbrzych
Kontaktowanie:

Postautor: franyo » 24 cze 2003, o 11:08

Witam ponownie
Nie jestem pewny, czy pomysł ładowania kondensatora prosto z pinu procka jest dobry - mały prąd wyjściowy w stanie wysokim. Najprościej jest ładować go przez rezystor z +5V, np 10k, kondensator np 100nF, rozładowanie przez dowolny npn (emiter do masy, kolektor do kondensatora, baza przez rezystor np 10k do +5V, dodatkowo podpięta do wolnego portu - niski stan na porcie - ładowanie, wysoki - rozładowanie) - stała czasowa, czyli ładowanie kondensatora do 5V, to ok 1msek. I oczywiście można wykorzystać przerwanie od komparatora. Będzie ono generowane co pewien czas, zależny od położenia suwaka. Trzeba tylko zmierzyć ten czas i po problemie. A 1 msek chyba nie wpłynie na obroty silnika.
Pzdr.

Wróć do „8051”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 27 gości