Witam wszystkich. Na samym początku oświadczam, że nie jestem ani po jednej stronie ani po drugiej, tylko jako żę zabieram się za fajny projekt wykorzystujący sześć serw, zamiast zadawać głupie pytania chciałem sprawdzić sam.
Często pojawiają się pytania czy można podłączyć jakąś ilość serw do mikrokontrolera, czy będzie działać i z jaką dokładnością. Postanowiłem to sprawdzić sam. Jako sprzęt do testów posłużyły mi:
- Dla Bascoma zestaw ATB 1.04 z mikrokontrolerem AtMega32 i kwarcem 16MHz
- Dla Arduino po prostu Arduino Uno z AtMega328 i kwarcem 16MHz
Do kontroli generowanych przebiegów posłużyłem się ośmiokanałowym klonem Saleae Logic.
Nie podłączałem serw, jedynie sprawdzałem przebiegi na pinach mikrokontrolera i moje założenia początkowe były następujące:
- pozycja 0 stopni - 1ms
- pozycja 90 stopni - 1.5ms
- pozycja 180 stopni - 2ms
Nie twierdzę, żę są to założenia idealne, ale w ten sposób było mi łatwiej.
Na początek kody źródłowe dla Bascoma:
I Arduino:
Jak widać standardowe kody, beż żadnych bajerów. Okazało się, że jednak w przypadku Arduino można uzyskać większą rozdzielczość. W przypadku Arduino od 1ms do 2 ms rozdzielczość wyniosła 100, natomiast w przypadku Bsscoma 76.
Teraz czas na przebiegi, zacznę od Bascoma:
I Arduino:
Postanowiłem sprawdzić jeszcze jedną rzecz....a dokładnie ile trwa sama obsługa serw zawarta w bibliotece. Posłużyłem się w tym celu dodatkowym pinem na którym wystawiłem stan wysoki, wstawiłem opóźnienie 100ms i zresetowałem pin. Tu przyszło duże zdziwienie, bo o ile w przypadku Arduino delay 100ms trwał 100ms:
Tak w przypadku Bascoma było o ponad 60ms dłużej:
Na koniec podaję jeszcze kody które wykorzystałem do sprawdzenia opóźnienia:
Mam nadzieję, że mój skromny test pomoże w przyszłości:) Jak pisałem, nie podłączałem serw i nie jestem w stanie powiedzieć jak się zachowują, jednak myślę, że pokazałem, że jednak jest delikatna przewaga Arduino nad Bascomem przez troszkę większą rozdzielczość, jak i brak opóźnień wynikających z obsługi serw. Oczywiście nie jest to ani reklama jednago, ani próba zmieszania z błotem drugiego...tylko domowy test z ciekawości. Zapewne istnieją bardziej optymalne sposoby sterowania, jednak jako że jestem początkujący, jak i chciałem innym początkującym nieco ułatwić, prosze starych wyjadaczy o brak uwag w stylu asembler, język C czy zewnętrzne karty PWM 12 bitów i więcej...
Często pojawiają się pytania czy można podłączyć jakąś ilość serw do mikrokontrolera, czy będzie działać i z jaką dokładnością. Postanowiłem to sprawdzić sam. Jako sprzęt do testów posłużyły mi:
- Dla Bascoma zestaw ATB 1.04 z mikrokontrolerem AtMega32 i kwarcem 16MHz
- Dla Arduino po prostu Arduino Uno z AtMega328 i kwarcem 16MHz
Do kontroli generowanych przebiegów posłużyłem się ośmiokanałowym klonem Saleae Logic.
Nie podłączałem serw, jedynie sprawdzałem przebiegi na pinach mikrokontrolera i moje założenia początkowe były następujące:
- pozycja 0 stopni - 1ms
- pozycja 90 stopni - 1.5ms
- pozycja 180 stopni - 2ms
Nie twierdzę, żę są to założenia idealne, ale w ten sposób było mi łatwiej.
Na początek kody źródłowe dla Bascoma:
I Arduino:
Jak widać standardowe kody, beż żadnych bajerów. Okazało się, że jednak w przypadku Arduino można uzyskać większą rozdzielczość. W przypadku Arduino od 1ms do 2 ms rozdzielczość wyniosła 100, natomiast w przypadku Bsscoma 76.
Teraz czas na przebiegi, zacznę od Bascoma:
I Arduino:
Postanowiłem sprawdzić jeszcze jedną rzecz....a dokładnie ile trwa sama obsługa serw zawarta w bibliotece. Posłużyłem się w tym celu dodatkowym pinem na którym wystawiłem stan wysoki, wstawiłem opóźnienie 100ms i zresetowałem pin. Tu przyszło duże zdziwienie, bo o ile w przypadku Arduino delay 100ms trwał 100ms:
Tak w przypadku Bascoma było o ponad 60ms dłużej:
Na koniec podaję jeszcze kody które wykorzystałem do sprawdzenia opóźnienia:
Mam nadzieję, że mój skromny test pomoże w przyszłości:) Jak pisałem, nie podłączałem serw i nie jestem w stanie powiedzieć jak się zachowują, jednak myślę, że pokazałem, że jednak jest delikatna przewaga Arduino nad Bascomem przez troszkę większą rozdzielczość, jak i brak opóźnień wynikających z obsługi serw. Oczywiście nie jest to ani reklama jednago, ani próba zmieszania z błotem drugiego...tylko domowy test z ciekawości. Zapewne istnieją bardziej optymalne sposoby sterowania, jednak jako że jestem początkujący, jak i chciałem innym początkującym nieco ułatwić, prosze starych wyjadaczy o brak uwag w stylu asembler, język C czy zewnętrzne karty PWM 12 bitów i więcej...