Skocz do zawartości

Pierwszy robot w stajni Othara


othar

Pomocna odpowiedź

Witam,
w tym temacie chciałbym zadawać pytania na które nie znajduję odpowiedzi.

To mój pierwszy projekt, więc proszę wyrozumiałość.

Postaram się nie powtarzać z pytaniami.

kontroler atMega168

język C-AVR

docelowo sterowanie BT, w tym momencie zapisana sekwencja ruchów

Na początek napęd:

dwa serwa

Pomyslałem, że skorzystam z wyjść PWM mikrokontrolera i zastosuję FastPWM z TOP w ICR1, jednak maksymalna wartość tego rejestru to 0xFFFF

Pytanie pierwsze:

przy częstotliwości kwarcu 8MHz próbaa ustawienia okresu na 20ms(50Hz) kończy sie przekroczeniem maksymalnej wartości TOP

(8*10^6)/50 = 16*10^4

TOP max = 65535 (6,5535*10^4)

Napewno macie rozwiązanie tego problemu, podzielilibyście się nim?

W tym momencie nie mam jeszcze żadnego kodu, bo zatrzymałem się na tym problemie.

Jeśli zbyt ogólne pytnie, to choć wskażcie mi drogę, ewentualnie przykładowe programy z których mógłbym coś wywnioskować.

Link do komentarza
Share on other sites

kontroler atMega168

język C-AVR

docelowo sterowanie BT, w tym momencie zapisana sekwencja ruchów

Ja zacząłbym od tego, że platforma która jest sterowana poprzez cokolwiek (np. BT) lub ma zapisaną sekwencję ruchów, nie jest robotem, a pojazdem RC. Pomijam oczywiście "roboty przemysłowe" i tego typu inne konstrukcje - mam tutaj na myśli robotykę amatorską - jeśli Twoja platforma nie będzie posiadała żadnych czujników za po mocą których będzie podejmować samodzielnie jakieś akcje, to niczym to nie będzie się różniło od "autka/samolotu/helikoptera" na zdalne sterowanie. Zwróć na to uwagę, co tak naprawdę chcesz zbudować🙂

Link do komentarza
Share on other sites

Impulsy które zlicza Timer mogą być dzielone przez wartość prescalera. To znaczy, że jeżeli masz prescaler ustawiony na 8, to do Timera trafia co ósmy impuls z zegara. W ten sposób możesz "zwiększyć" zakres Timera. Prescaler ustawia się bitami CSxx.

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

Użyję więc prescalera 🙂

Mam bardzo dużo wiedzy do przyswojenia, w bardzo krótkim czasie.

Dzięki

Ja zacząłbym od tego, że platforma która jest sterowana poprzez cokolwiek (np. BT) lub ma zapisaną sekwencję ruchów, nie jest robotem, a pojazdem RC. Pomijam oczywiście "roboty przemysłowe" i tego typu inne konstrukcje - mam tutaj na myśli robotykę amatorską - jeśli Twoja platforma nie będzie posiadała żadnych czujników za po mocą których będzie podejmować samodzielnie jakieś akcje, to niczym to nie będzie się różniło od "autka/samolotu/helikoptera" na zdalne sterowanie. Zwróć na to uwagę, co tak naprawdę chcesz zbudować🙂

Fakt, to nie będzie robot autonomiczny(wiki ).

Ale od samochodu RC się będzie różnił sposobem sterowania - będzie wykonywał konkretny wywołany ruch, a nie "odwzorowywał" sygnały z aparatury.

W zamyśle mam ochotę zastosować czujniki do informowania operatora o braku możliwości wykonania ruchu, ale najpierw chciałbym, żeby zaczął się poruszać.

Jak zdążę, to dodam do programu.

Link do komentarza
Share on other sites

(...)

W zamyśle mam ochotę zastosować czujniki do informowania operatora o braku możliwości wykonania ruchu, ale najpierw chciałbym, żeby zaczął się poruszać.

Jak zdążę, to dodam do programu.

Nie to, wtedy do jak najbardziej będzie robot:)

Link do komentarza
Share on other sites

W przykładowym programie zamieszczonym w Teście układu KAmodBT222

Zauważyłem, że serwa są sterowane z częstotliwością 56Hz(18ms), podczas gdy teoretycznie powinno być 50Hz(20ms).

Te 2ms nie wpływają w znaczący sposób na pracę serwomechanizmów? Czy może jest to dopuszczalne w programach testowych, ale wdocelowych już nie?

I jeszcze jedno pytanko:

jak bardzo może się grzać atMega8 przy pracy z częstotliwością 8MHz? Im wyższa częstotliwość, tym bardziej się grzeje?

Link do komentarza
Share on other sites

Pokaż schemat ale wcześniej zmierz napięcie zasilania oraz przejrzyj kierunki wszystkich linii portów. Prawdopodobnie ustawiłeś na wyjście coś, do czego jest podłączone wyjście innego układu. Taki konflikt powoduje przepływ dużych prądów (kilkadziesiąt mA) i grzanie (najczęściej obu) scalaków. Nie wspominam o błędach w montażu (zwarcia portów do plusa, masy itp) - to zapewne już dokładnie sprawdziłeś.

Link do komentarza
Share on other sites

(...)

Zauważyłem, że serwa są sterowane z częstotliwością 56Hz(18ms), podczas gdy teoretycznie powinno być 50Hz(20ms).

Te 2ms nie wpływają w znaczący sposób na pracę serwomechanizmów? Czy może jest to dopuszczalne w programach testowych, ale w docelowych już nie?

Witam

te 2ms nie mają żadnego wpływu.

Tak na prawdę w sygnale sterującym informacja o pozycji serwa przekazywana jest za pomocą czasu trwania "1" a nie wypełnienia sygnału

(wypełnienie to czas trwania "1" do całego okresu). 20 ms jest tutaj wartością maksymalną ponieważ, jak nie powtórzysz sygnału po 20 ms wewnętrzny sterownik serwa wyłączy silnik aż do następnej "1".

Nie ma w związku z tym znaczenia czy sygnał ma okres 18ms czy nawet 10ms -byle mnie mniej niż 20ms.

Pozdrawiam

Link do komentarza
Share on other sites

Nie mogę się dogadać z moimi microserwami TowerPro SG90

w załącznikach main.c i hardware.h

Nie wiem czy jest prawidłowa długość impulsów, nie mam oscyloskopu, ani sprawdzonych serw i płytki. Jestem jeszcze na stykówce.

Objaw jest taki, że serwo "stuka" albo raczej wykonuje ruch minimalny w lewo i prawo(na rozebranym serwie widać, na niemodyfikowanym tylko słychać).

[ Dodano: 18-07-2012, 13:08 ]

Ustawiłem fuse bity:

CKSEL 1111

SUT 11

ale nadal coś nie tak...

Czy PORTxn sterujący serwomechanizmami powinien być w trybie source(1) czy sink(0)?

hardware.h

main.c

Link do komentarza
Share on other sites

Wróciłem, z nową energią do nauki i probemem:

ustawiam komunikację USART:

int UART_Init(void)
{
UBRR0H = (uint8_t)(BAUD_PRESCALE>>8);
UBRR0L = (uint8_t)BAUD_PRESCALE;

	// enable TX and RX
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);

/* UART settings:    datasheet str.190
	data:	8bit
	parity:	none
	stop:	1bit */
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);

return BT_Init_OK;
}

W efekcie w rejestrzach:

UBRR0H dostaję w symulatorze 0x06

UBRR0L dostaję 0x23

z prostej matematyki, a nawet tablic w datasheet wychodzi, że powinienem mieć w UBRR0H 0x00, ponieważ mój baud rate wynosi 0x23.

skąd się bierze to 0x06 w górnej części rejestru?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.