Silniki krokowe są często drogie dla dużego silnika. Jednak dzięki mocnemu, standardowemu silnikowi prądu stałego i enkoderowi obrotowemu można „symulować” silnik krokowy. Jak dokładne są kodery obrotowe z Arduino tylko z podstawową pętlą i niewiele innych kodów? Czy będzie to „brakowało impulsu” i nie będzie często rejestrować wystarczającej rotacji? Jak sobie z tym poradzić, używając znacznie więcej kodu? Czy jest na to lepszy sposób? Czy zakłócenia pomogłyby? Czy istnieje jakiś obwód, który pomógłby w rozwiązaniu tego problemu?
Uwaga: Prawdopodobnie nie przekroczy 4 obrotów na sekundę ... (To może być dużo, ale jeśli wykonujesz mechanizm śruby pociągowej, który wynosiłby 24 cale na minutę, jeśli występuje 10 obrotów na cal ruchu liniowego. )
źródło
Odpowiedzi:
Przerwy są tym, czego użyłbyś w tej sytuacji.
Prędkości, o których wspomniałeś, są na tyle wolne, że prawdopodobnie będziesz w stanie policzyć je w pętli, jednak nie jest to zalecane, ponieważ typowa pętla zajmie wiele cykli zegara, w zależności od liczby instancji w pętli , możesz przegapić pewne liczby.
Przerwania są wykonywane w tym celu, ponieważ mogą być wyzwalane w dowolnym momencie, niezależnie od stanu pętli.
Istnieje funkcja o nazwie,
attachInterrupt()
która pobierze trzy argumenty.Poniżej znajduje się przykład liczenia przerwania
Tryby są następujące:
Więcej informacji na temat używania przerwań można znaleźć tutaj .
W zależności od używanego enkodera konieczne będzie dostosowanie kodu do potrzeb i wykonanie dodatkowych obliczeń w celu ustalenia pozycji, ale powinien to być dobry punkt wyjścia.
Edytuj Oto przykładowy kod z Arduino Sandbox do używania enkodera obrotowego.
źródło
ISR_NAKED()
), możesz pominąć automatyczne zapisywanie kontekstu C i bez problemu pobrać 100-500 Khz częstotliwości przerwań, ale w tym momencie piszesz asembler w C.ISR()
bezpośredniego użycia przerwania .Dodanie pewnych odniesień do już napisanych bibliotek i przykładów, aby umożliwić porównanie różnych podejść i doświadczeń z szybkością i podatnością na brakujące kroki.
Odczytywanie enkoderów obrotowych: http://playground.arduino.cc/Main/RotaryEncoders
Koder kwadraturowy zbyt szybki dla Arduino (z rozwiązaniem): http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/
Biblioteka Teensy Encoder: https://www.pjrc.com/teensy/td_libs_Encoder.html
Odczytywanie enkodera obrotowego na Arduino: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/
źródło