Hej
Wracając do tematu. Kupiłem A4988 - działa. Niestety trafiłem na mały problem - reszta kodu
zakłóca pracę silnika. Początkowo skorzystałem z gotowej biblioteki obsługującej krokowce.
Sam silnik pracował idealnie, niestety z resztą kodu pracuje nierówno i wolniej niż powinien.
Przeanalizowałem kod i wychodzi na to, ze niektóre pojedyncze elementy wykonują się
dłużej nić wynosi czas pojedynczego kroku silnika i blokują jego działanie.
Najgorsza sprawa z termometrami typu DS18B20. Samo wywołanie pomiaru trwa bodaj
pojedyncze uS więc nie powinno stanowić problemu, ale już odczyt pojedynczego
termometru to kilkanaście mS (piszę z głowy). Termometrów mam pięć wiec 5x na sekundę
program staje na te kilkanaście mS. Oczywiście jeśli w tym czasie wypadnie moment
gdy sterownik krokowca powinien dostać impuls to go nie dostanie - krok zostanie pominięty...
AHA - dość ważne - u mnie krokowiec napędza pompkę perystaltyczną. Nie potrzeba więc
dynamicznych zmian prędkości, byle prędkość była taka jak powinna. Sama reakcja na
polecenie zmiany prędkości może nastąpić ze zwłoką nawet 1S. Świat się nie zawali
Zastanawiam się jak to zwalczyć. Jeden z pomysłów to dodać do sterowania krokowcem
dodatkowy procesor (choćby Arduino Mini) i powierzyć mu wyłącznie generowanie impulsów
dla sterownika silnika. Informację o tym jaka ma być prędkość podawać mu portem
szeregowym tylko gdy potrzebna jest zmiana (za potwierdzeniem odbioru).
To mogę zrobić sam...
Alternatywa - przerwanie na timerze. Tu nie znam się dlatego pytam. Czy wywołanie
co np. 5uS funkcji generującej impulsy przerwaniem wchodzi w rachubę (tak często).
Grosza sprawa - czy takie przerwanie nie będzie kolidować z opisanymi termometrami?
Chodzi o sytuację gdy główny kod wywołuje odczyt DSa, czeka te naście mS, w tym czasie
wypada moment przerwania, przerwanie wywołuje funkcję i wraca do DSa. Czy to nie
zakłóci odczytu temperatury?...
Z góry dzięki za podpowiedzi...
Póki co po południu zmienię podział kroków z 1/4 na 1/1 żeby wydłużyć czas między impulsami
i zobaczę co to da...
Jakub