Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 16 sie 2025, o 15:45


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
    Autor Wiadomość
    PostNapisane: 13 wrz 2016, o 13:17 
    Offline
    Użytkownik

    Dołączył(a): 19 sty 2015
    Posty: 29
    Pomógł: 0

    Witam wszystkich!!
    Mam problem z wysterowaniem serwomechanizmów. Korzystam z ATmegi32, 16MHz. Wykorzystuję programowe pwm, wbudowany przetwornik ADC. Do sterowania służy joystick.
    O ile jedno serwo udało mi się wysterować i działa stabilnie, bez żadnych niechcianych drgnięć o tyle przy dwóch serwach mój sposób się już nie sprawdza, ponieważ działają one niestabilnie (a co dopiero bedzie przy 6). Proszę o pomoc, jakiś pomysł, nakierowanie mnie na właściwą ścieżkę :D

    Kod programu:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 wrz 2016, o 16:48 
    Offline
    Użytkownik

    Dołączył(a): 26 mar 2014
    Posty: 34
    Pomógł: 11

    Lepszym sposobem było by sterowanie serwami jedno po drugim (zwłaszcza kiedy ma być ich 6) tzn. kiedy ustawisz wyjście serwa w stan wysoki i czekasz 1,5 - 2,5ms, to wtedy ustawiasz stan niski dla tego serwa, a dla kolejnego dopiero w tym momencie ustawiasz stan wysoki i tak po kolei dla wszystkich serw.
    Sygnał sterujący jednym serwem trwa 20ms, więc dzieląc go przez 2,5ms (maksymalny czas trwania stanu wysokiego), wychodzi że w tym czasie można po kolei wysterować do 8 serw.

    Wygląda to mniej więcej tak (przykład dla 2 serw, atmega8, taktowanie 8MHz):
    Inicjalizacja timera:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Obsługa przerwania:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Wartość OCRA oznacz czas po jakim włączane są kolejne serwa, a do OCRB wpisujesz wartość w zależności od położenia serwa od 1500 do 2500 ale tak żeby nie przekroczyć wartość w OCRA (wtedy nie wykona się przerwanie COMPB).
    W ten sposób można zrealizować to na jednym timerze, z precyzją do 1000 pozycji serw (teoretycznie :) ), a przerwania od timera nie obciążają zbytnio mikrokontrolera, bo przerwanie wywoływane jest co ok 1ms (w zależności od położenia danego serwa), a nie jak w twoim przypadku co kilkanaście us.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 wrz 2016, o 17:48 
    Offline
    Użytkownik

    Dołączył(a): 26 cze 2016
    Posty: 186
    Pomógł: 7

    Mario17 napisał(a):
    Lepszym sposobem było by sterowanie serwami jedno po drugim (zwłaszcza kiedy ma być ich 6) tzn. kiedy ustawisz wyjście serwa w stan wysoki i czekasz 1,5 - 2,5ms, to wtedy ustawiasz stan niski dla tego serwa, a dla kolejnego dopiero w tym momencie ustawiasz stan wysoki i tak po kolei dla wszystkich serw.
    Sygnał sterujący jednym serwem trwa 20ms, więc dzieląc go przez 2,5ms (maksymalny czas trwania stanu wysokiego), wychodzi że w tym czasie można po kolei wysterować do 8 serw.


    Nie wiem jak teraz, ale drzewiej to standardowo impuls sterujący był co 20 ms, więc to chyba bardzo dobra rada.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 wrz 2016, o 07:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 25 mar 2015
    Posty: 116
    Pomógł: 16

    Przy 6 serwach ,rozważ zastosowanie układu PCA9685 firmy NXP. Jest to 16 kanałowy, 12 bitowy kontroler PWM sterowany magistralą I2C.
    Pozdr.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 16 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO