Witaj,
W moim układzie wykorzystuje dwa silniki bipolarne podłączone do mostków Allegro A3966, którymi steruje jak na razie ATmega8(taktowana wewnętrznie 8MHz). Pojedynczy silnik żeby mógł się poruszać z określoną prędkością trzeba rozpędzić, tzn stopniowo zwiększać częstotliwość w zależnośći od kroku. Generacje częstotliwości zaimplementowałem w następujący sposób:
->Uruchamiam TIMER2 z pełną prędkością(bez prescalera) który generuje przerwania od przepełnienia. Kolejne przerwania pojawiają się co 31,25us
->W przerwaniu ikrementuje zmienną counter.
->Następnie uruchamiam funkcje opóźniającą która porównuje wartość counter do nastawy częstotliwości która wcześniej przeliczam. Dzieje się to w pętli
W ten o to sposób zyskałem możliwość generacji sekwencji sterującej z odpowiednią częstotliwością.
Pojawił się problem. Chce teraz uruchomić 2 silnik(jeszcze tego nie zaimplementowałem) który również musi się rozpędzać, i obracać się z innymi prędkościami. Oba silniki muszą być sterowane niezależnie. Co jest niemożliwe ponieważ w momencie sterowania pojedynczym silnikiem, drugi z nich pozostanie nieruchomy ze względu na czekanie procesora na wykonanie pętli while.
Czy istnieje jakiś trick, by takie silniki sterować niezależnie, coś na zasadzie wątków, tak bym miał nad nimi niezależną kontrole ?
W moim układzie wykorzystuje dwa silniki bipolarne podłączone do mostków Allegro A3966, którymi steruje jak na razie ATmega8(taktowana wewnętrznie 8MHz). Pojedynczy silnik żeby mógł się poruszać z określoną prędkością trzeba rozpędzić, tzn stopniowo zwiększać częstotliwość w zależnośći od kroku. Generacje częstotliwości zaimplementowałem w następujący sposób:
->Uruchamiam TIMER2 z pełną prędkością(bez prescalera) który generuje przerwania od przepełnienia. Kolejne przerwania pojawiają się co 31,25us
->W przerwaniu ikrementuje zmienną counter.
->Następnie uruchamiam funkcje opóźniającą która porównuje wartość counter do nastawy częstotliwości która wcześniej przeliczam. Dzieje się to w pętli
Kod: C / C++
W ten o to sposób zyskałem możliwość generacji sekwencji sterującej z odpowiednią częstotliwością.
Pojawił się problem. Chce teraz uruchomić 2 silnik(jeszcze tego nie zaimplementowałem) który również musi się rozpędzać, i obracać się z innymi prędkościami. Oba silniki muszą być sterowane niezależnie. Co jest niemożliwe ponieważ w momencie sterowania pojedynczym silnikiem, drugi z nich pozostanie nieruchomy ze względu na czekanie procesora na wykonanie pętli while.
Czy istnieje jakiś trick, by takie silniki sterować niezależnie, coś na zasadzie wątków, tak bym miał nad nimi niezależną kontrole ?