logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Koder PWM - mój 2 program i cos nie bardzo chce działać

Innos 21 Wrz 2006 01:08 1770 11
REKLAMA
  • #1 3041349
    Innos
    Poziom 11  
    Posty: 75
    Witam. Targnołem się do napisania programu, który by obsługiwał serwa modelarskie. Program jest prymitywny (brak synchronizacji do 1,5 ms ), ale to 2 program jaki chciałem napisać.Ogólnie żecz biorąc, nie działa. Potencjometr jest podpiety pod ADC0 ( pin 40, port PA0 ), serwo jest podpięte pod OC1A (pin 19, port PD5 ). Prosze o pomoc.
    Załączniki:
    • Koder PWM.txt (1.81 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 3041373
    mariusz_bojarski
    Poziom 12  
    Posty: 19
    Ocena: 1
    a na jakiego to procka?? bo pwm to ja tylko raz na procku robilem, flownik do ups-a na 10kW, ale chętnie pomoge, pomóż innym, pomogą tobie, nie;)??
  • REKLAMA
  • #3 3041555
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Sadzac z opisu to jest to atmega16/32

    szczerze powiedziawszy nie rozumiem...
    1 Czy chcesz by serwo współpracowało z koderem (odbiornikiem)
    2 Czy chcesz po prostu sterowac wychyleniem serwa prockiem

    Ad.1 jesli tak to sprawa nieco sie komplikuje
    Ad.2 jesli tylko ustawiasz wychylenie to program musi po prostu sprawdzac zadaną rezystancję (napięcie) i korygować je silnikiem, PWM nie jest tu konieczny. Inna sparaw to musisz sterowac serwem w dwie strony... jesli serwo ma encoder sterowany odpowiednim wypełnieniem to wtedy faktycznie PWM wskazany, napisz cos wiecej o serwie
    Pozdrawiam
  • #4 3041781
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Ch.M. napisał:

    1 Czy chcesz by serwo współpracowało z koderem (odbiornikiem)
    2 Czy chcesz po prostu sterowac wychyleniem serwa prockiem

    nie rozumiem po co w komunikacji z odbiornikiem pomiedzy serwem a odbiornikiem mialby stac uC, no i po co bylby wtedy potencjometr? Przeciez odbiornik modelarski bezposrednio steruje serwem.
    Ch.M. napisał:

    Ad.2 jesli tylko ustawiasz wychylenie to program musi po prostu sprawdzac zadaną rezystancję (napięcie) i korygować je silnikiem, PWM nie jest tu konieczny. Inna sparaw to musisz sterowac serwem w dwie strony... jesli serwo ma encoder sterowany odpowiednim wypełnieniem to wtedy faktycznie PWM wskazany, napisz cos wiecej o serwie
    Pozdrawiam

    Serwo modelarskie ma wlasnie taki sterownik sterowany wypelnieniem

    Niestety nie znam sie na asm ale... czy oby napewno dobrze podlaczasz potencjomert? Masz podpiete zasilanie do czesci ADC (AVCC)? Co z napieciem referencyjnym?
    Sproboj moze najpierw wysterowac to serwo bez uzycia potencjometru, napisz programik ktory bedzie co jakis czas zmienial wypelnienie PWN.
  • #5 3041814
    Innos
    Poziom 11  
    Posty: 75
    Wiec tak. Proc to ATmega32 ( w pliku była jego inicjacja .include "m32def.inc" ). Serwo jest modelarskie i posiada dekoder PWM na kont obrotu wału.Chciałbym aby to działało w ten sposób: Gdy potencjometr jest w środkowym położeniu to serwo jest w neutralnym ( impuls 1,5 ms ). Gdy obrócę potencjometrem, serwo śledzi jego ruch. Proszę zajrzeć do załącznika i odpisać co zrobiłem żle.
  • REKLAMA
  • #6 3041902
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Hmmm nie odpowiedziale mi na pytanka odnosnie polaczenia hadrware.
    Ja wiem ze ten programik ma byc treningiem programowania, ale czy bedziesz to wykorzystywal do czegos konkretnego? Jesli tak to prosciej bedzie to zrobic na ne555 bez programowania.
  • REKLAMA
  • #7 3041956
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    czyli rozumiem dekoder PWM sterownika serwa dziala tak: wypełnienie 0% - kąt minimalny; wypełnienie 50% kąt 1/2max, 100%- kąt max. Jaka powinna byc częstotliwość PWM ? Wspominasz cos o 1,5ms czy to jest okres?
  • #8 3041970
    Innos
    Poziom 11  
    Posty: 75
    Elektronicznie wszystko jest podłączone ok. Zależało by mi na tym, aby zrobić to na uC. Do tego chciałbym zbudować aparaturę modelarską. Więc zaczynam od kodera. Myślę że takie postanowienie będzie dobrym sposobem by sie nauczyć programowania.
  • #9 3041986
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Ch.M. napisał:
    czyli rozumiem dekoder PWM sterownika serwa dziala tak: wypełnienie 0% - kąt minimalny; wypełnienie 50% kąt 1/2max, 100%- kąt max. Jaka powinna byc częstotliwość PWM ? Wspominasz cos o 1,5ms czy to jest okres?

    1,5ms trwa impuls dla polozenia srodkowego, impulsy sa podawane co 20ms (jak dobrze pamietam) impuls 1ms oraz 2ms polozenia skrajne.
  • #11 3044002
    zbig_wwl
    Poziom 17  
    Posty: 181
    Pomógł: 20
    Ocena: 17
    Skoro już napisałeś program to wrzuć go do AVR Studio i zdebaguj. Na pierwszy rzut oka widać podstawowe błędy jak chociaż to, że zaraz po wykonaniu tej procedury startowej program trafi do obsługi przerwania, bo skąd ma wiedzieć, żeby nagle się zatrzymać :?: Jak dojdzie do instrukcji reti, to zgodnie z tą instrukcją pobierze adres powrotu ze stosu i wróci w to wskazywane miejsce - tu pewnie będzie do "jmp reset", bo na stosie będą zera - nic jeszcze nie było odłożone.
    Poza tym po co te rozkazy reti w adresach wektorów przerwań :?:. Jak przez przypadek program tam trafi to co ma zrobić :?: - powinno być po prostu nop.
    Pozdrawiam
  • #12 3563361
    Innos
    Poziom 11  
    Posty: 75
    Witam. Problem z biegiem czasu rozwiązał sie sam. Nauczyłem sie C co bardzo pomogło w tym zadaniu.

Podsumowanie tematu

✨ Dyskusja dotyczy problemów z napisaniem programu do sterowania serwem modelarskim za pomocą mikrokontrolera ATmega32. Serwo jest podłączone do wyjścia OC1A (pin 19, port PD5), a potencjometr do ADC0 (pin 40, port PA0). Celem jest uzyskanie sterowania serwem w taki sposób, aby impuls o długości 1,5 ms odpowiadał położeniu neutralnemu, a zmiana położenia potencjometru powodowała proporcjonalne wychylenie serwa. Użytkownik napotkał trudności z działaniem programu, który nie uwzględnia synchronizacji impulsów PWM typowych dla serwomechanizmów (impulsy co 20 ms, o szerokości od 1 ms do 2 ms). Wskazano, że serwa modelarskie sterowane są sygnałem PWM o okresie około 20 ms, gdzie impuls 1,5 ms to pozycja środkowa. Poruszono kwestie poprawnego podłączenia potencjometru do ADC, zasilania AVCC oraz napięcia referencyjnego ADC. Zasugerowano debugowanie programu w AVR Studio oraz poprawę obsługi przerwań, eliminując błędy w wektorach przerwań i stosowaniu instrukcji reti. Autor potwierdził, że układ jest poprawnie podłączony i że celem jest nauka programowania mikrokontrolerów w kontekście budowy aparatury modelarskiej. Ostatecznie problem został rozwiązany dzięki nauce języka C, co ułatwiło implementację sterowania serwem.
Wygenerowane przez model językowy.
REKLAMA