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.
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
Moderatorzy:Jacek Bogusz, procesorowiec, robertw, tomasz_jablonski, r-mik, Moderatorzy
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.
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.
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?
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.
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.
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.
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.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość