Witajcie,
stworzyłem ten temat, ponieważ mam do Was prośbę.
Chciałbym, abyście pomogli mi wymyślić jakiś w miarę sensowny algorytm do sterowania serwonapędem.
Nie potrzebuję kodu.Potrzebuję sam algorytm.
Chodzi o sterowanie serwonapędem.
Sterowanie jest bardzo proste, wystarczy podawać sygnał prostokątny + do tego kierunek (albo 0, albo 1)
Częstotliwość wyjściowego sygnału powinna być zmieniana powiedzmy od 20kHz do 30kHz.
Muszę napisać funkcję, która będzie sprawdzała aktualną pozycję serwonapędu, nazwijmy ją x, porównywała z pozycją zadaną, obliczała różnicę i wysyłała tyle impulsów do serwonapędu, ile wynosi ta różnica (do tego sygnał kierunku w zależności, czy różnica jest większa, czy mniejsza od zera)
W sterowaniu ręcznym (które mi działa), robię to tak, że przycisk uruchamia timer, od którego jest ustawione przerwanie i w przerwaniu zmieniam stan wyjścia. Częstotliwość sygnału wyjściowego reguluję sobie zmianą preskalera i to wszystko mi działa.
W sterowaniu automatycznym, napisałem funkcję taką pierwotną/wstępną, bez obliczania różnicy, działającą na zasadzie "wyślij 5 impulsów", której argumentem nie jest pozycja zadana, tylko ilość impulsów, które mikrokontroler ma wysłać. Ustawiłem małą częstotliwość tak, żebym mógł liczyć (błyski diody), czy wysyła dobrą ilość.
W funkcji również uruchamiałem timer i w przerwaniu zmieniałem stan i zwiększałem flagę. Niestety nie działa mi to, ponieważ wysyła za dużą liczbę impulsów... Ale to jest nie ważne. Chciałbym poznać jakieś może ciekawsze metody
Bo co dwie głowy (albo i więcej głów
) to nie jedna.
Mam nadzieję, że problem opisałem dość jasno.
Dziękuję z góry za pomoc i pozdrawiam,
Adam.