Skocz do zawartości

[C] Prosty robot wahadło- problem


bestb

Pomocna odpowiedź

Witam

Jestem tutaj nowy wiec proszę o wyrozumiałość.

Ponieważ mam doświadczenie z elektronika, i mailem części w domu postanowiłem zbudować prostego robota opartego PIC-u na jednym silniku krokowym i czujniku (czujniki mam do wyboru może być to halla lub coś z optycznych).

Robot miał poruszać się do przodu następnie po otrzymaniu sygnału z czujnika ma się cofać i znów sygnał z czujnika i do przodu (taki rodzaj wahadła).Na chwile obecna robot jedzie tylko do przodu i ponieważ z programowaniem u mnie jest kiepsko proszę o pomoc w programowaniu...

czy musi byc to rodzaj pętli czy uzyc IF ELSE ?

potrzebował bym podpowiedzi w jaki sposób czujnik wysyła sygnał do kontrolera a ten zmienia kierunek ruchu?

czy czujnik jest podpięty pod inny port względem silnika czy mogą być na tym samym

dodam ze nie liczę tutaj na gotowca, a wytłumaczenie w jaki sposób uzyskać pożądany efekt

Link do komentarza
Share on other sites

Herbaty z fusami nie lubię, a tarota gdzieś zgubiłem. Opisz dokładniej problem, chyba że mamy ci wymyślić jak ma wyglądać twój robot.

Link do komentarza
Share on other sites

Z tego co zrozumiałem to chcesz zbudować odwrócone wahadło. Moim zdaniem silnik krokowy jest za wolny do takiego robota. i nie wiem w jaki sposób chcesz odczytywać odchylenie od równowagi za pomocą wymienionych czujników...

Link do komentarza
Share on other sites

Wg mnie to nie odwrócone wahadło ale zwyczajny pojazd, który może poruszać się w 2 kierunkach i zmiana kierunku następuje po odebraniu sygnału od czujnika.

Czujnik zdecydowanie podpinasz pod inny port niż sterownik silnika. Pisałeś, że masz doświadczenie z elektroniką.

Zakładam, że masz funkcję, która poprzez odpowiednie ustawienie wyjść uC umie obracać silnikiem w jedną lub w drugą stronę. Zakładam też, że umiesz odebrać sygnał z czujnika. Jeśli czujnik wyzwala przerwanie, to w obsłudze przerwania zmieniasz wartość globalnej zmiennej oznaczającej kierunek, a w głównej pętli uruchamiasz funkcję kręcącą silnikiem w kierunku wskazującym przez tę główną zmienną.

Sprawa wydaje się wyjątkowo prosta, ale bez szczegółów budowy układu pozostaje Ci pytać na forum cechu wróżek jak już sashir wspomniał.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

ok moze faktycznie opisalem to malo zrozumiale

Więc tak ma to być pojazd poruszający sie do przodu i do tylu oparty na pic i 1 silniku krokowym taki akurat mam, nie zależy mi na prędkości... na ośce pomiędzy kolkami zamotuje czujnik optyczny.

po podłączeniu zasilania pojedzie do przodu następnie dostanie sygnał z czujnika i pojedzie do tylu i tak w kolko...

ale jak już pisałem z programowanie stawiam pierwsze kroki.... mam taki kod który powoduje ze pojazd jedzie do przodu lub do tylu w zależności od zdefiniowania 1 z bitow, ale potrzebuje pomocy w jaki sposób sygnał z czujnika podpięty pod port D7 będzie zmieniał kierunek ruchu...


#pragma config OSC = HS    
#pragma config WDT = OFF  
#pragma config LVP = OFF   
#pragma config DEBUG = OFF       

#include < p18f4520.h>
#include <delays.h>

        void main (void)
        {
             LATD = 0x00;           
             TRISD = 0x00;          

             LATD = 0B00001000;    


             While (1)

             {
                   Delay1KTCYn(20);   
                   PORTDbits.RD0 = ~ PORTDbits.RD0;      


                                                          }
Link do komentarza
Share on other sites

Użyj enkodera i licz obroty kół, po zadanej liczbie obrotów zmieniaj kierunek. Na pewno używasz silnika krokowego? Bo w kodzie nie mogę znaleźć funkcji odpowiedzialnej za jego działanie. W silniku krokowym możesz liczyć kroki i na ich podstawie zmieniać kierunek.

Link do komentarza
Share on other sites

tak na 100% jest to silnik krokowy

wystarczy ze zmienię to LATD = 0B00001000; na to LATD = 0B00001010;

i jedzie w druga stronę, ale nie wiem ja zdefiniować port D7 jako wejście z czujnika ....

Link do komentarza
Share on other sites

olimek, zakładam, że nie chce budować żadnego z wymienionych przez Ciebie. Zarówno robot balansujący jak i odwrócone wahadło wymagają wykorzystania regulatorów, a bestb, w pierwszym poście napisał, że kiepsko u niego z programowaniem.

Link do komentarza
Share on other sites

Żeby ustawić port jako wejście w rejestrze TRISx należy ustawić bit danego portu.

W twoim przypadku to port d 7.

Do odczytu używaj Input(pin)

TRISD = 0x80;
while(1)
{
 if( Input(pin_D7))
 {
     LATD = 0B00001000; 
 } else
 {
     LATD = 0B00001010;
 }
}

Tu masz przykładowy kod. Jeżeli na pinie D7 jest stan wysoki silnik kręci się w jedną stronę, jeżeli stan niski silnik kręci się w drugą stronę.

  • Lubię! 1
Link do komentarza
Share on other sites

dzieki oto mi chodzilo

czyli kod bedzie wygladac tak:


#pragma config OSC = HS   
#pragma config WDT = OFF 
#pragma config LVP = OFF   
#pragma config DEBUG = OFF       

#include < p18f4520.h>
#include <delays.h>

        void main (void)
   TRISD = 0x80;
   while(1)
   {
     if( Input(pin_D7))
     {
         LATD = 0B00001000;
     } else
     {
         LATD = 0B00001010;
     }
   }
{
                   Delay1KTCYn(20);   
                   PORTDbits.RD0 = ~ PORTDbits.RD0;     

                                                           }
Link do komentarza
Share on other sites

A sprawdziłeś czy kod działa ?? Bo nie wiem czy po części nie jest on z innego środowiska. Jeżeli działa to postaw piwo 😃

Link do komentarza
Share on other sites

ok dopiero we wtorek sprawdze a piwo postawie za dobre checi

jesli ktos ma jakis inny pomysl chetnie postawie piwo innym

Link do komentarza
Share on other sites

A sprawdziłeś czy kod działa ?? Bo nie wiem czy po części nie jest on z innego środowiska. Jeżeli działa to postaw piwo 😃

nie jestem pewnien co do pin_d7 poniewaz widzialem takie przykladowe rozwiazanie

z uzyciem TRISD7

ale sprawdze to niebawem

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.