Dzięki za odpowiedź.
Myślę o użyciu właśnie FTDI. Problem przesyłu takiej ilości danych oczywiście istnieje. Nie widzę jednak problemu, żeby urządzenie poczekało chwilkę aż wypełni się jakiś bufor, a następnie przeszło do realizacji czyli wystawiania wartości na piny. Oczywiście programowo należy zapewnić aby była wystarczająca ilość danych do wykonania jednego pełnego ruchu(np. od opuszczenia do podniesienia wrzeciona). Pomiędzy ruchami w pewnych sytuacjach może pojawić się kilkusekundowy przestój na ściągnięcie danych - nie jest to jednak dla mnie problem.
Nasuwa się rzecz jasna potrzeba użycia jakiegoś bufora. Myślę tutaj nawet o buforze dwu-poziomowym. Poziom pierwszy (powiedzmy karta SD) do trzymania danych z PC. Poziom drugi to dwa banki pamięci równoległej(nie wiem jeszcze jakiej wielkości) do bezpośredniego wystawiania na piny sterujące silnikami.
Zastosowałbym dwa procki:
-pierwszy ściąga dane z PC i wrzuca je na kartę SD oraz równocześnie wrzuca do pamięci równoległej dane z karty(oczywiście odpowiedni sektor) do wolnego banku pamięci równoległej.
-drugi pobiera z pamięci równoległej kolejne bajty i wystawia na piny. Dzięki temu mamy pewność, że nie zabraknie nam mocy - nie ma tu żadnych obliczeń. Dodatkowo będzie to łatwo rozszerzyć o dodatkowe piny dla dodatkowych silników. Jeśli wystawimy wszystkie dane to zmieniamy bank itd.
Oczywiście trzeba by dodać jeszcze jakieś instrukcje sterujące i obsługę ich, być zbierać dane z urządzenia i dostarczać ja na PC. To jednak stosunkowo proste zadanie.
Proszę kolegów o opinię. Co myślicie na temat takiego podejścia?
Znaleziono 2 wyniki
Wróć do „sterowanie silnikami przez AVR”
- 21 sie 2011, 15:49
- Forum: Elektronika CNC
- Temat: sterowanie silnikami przez AVR
- Odpowiedzi: 14
- Odsłony: 3892
- 20 sie 2011, 18:56
- Forum: Elektronika CNC
- Temat: sterowanie silnikami przez AVR
- Odpowiedzi: 14
- Odsłony: 3892
sterowanie silnikami przez AVR
Witam, Panowie!
Ostatnio zastanawiam się nad zrobieniem sterownika silników krokowych opartego o AVR. Moje podstawowe założenia to maksymalna częstotliwość impulsów 80kHz(jeśli jest to mało wtedy odpowiednio więcej), 6 osi(lub więcej). Każdy silnik liczę jako 3 piny(ENABLED, DIR, STEP). Moim dodatkowym założeniem jest aby uC występował w tym układzie tylko i wyłącznie jako element wykonawczy. Chodzi mi o to aby nie wykonywał on żadnych obliczeń związanych np. z interpolacją itd. Chciałbym realizować wszystkie wyliczenia na PC'cie i tylko wysyłać te dane do realizacji na uC. Cała praca jaką ma zrobić mikrokontroler to wystawiać te dane poprzez porty (powiedzmy, że dodatkowo użyję zatrzasków) z odpowiednią częstotliwością.
Tu pojawia się kilka problemów:
1. Jak przesyłać tyle danych na uC z odpowiednią prędkością
2. Jak je przechowywać na uC
3. Jak zapewnić pracę tego układu tak aby nie naruszyć zależności czasowych.
ad.1. Jeśli mamy te 6 silników po 3 bity na każdy, daje nam to 3 bajty i jeśli chcemy mieć 80kHz to jest to 80kilo x 3 na sekundę. To można pociągnąć nawet przez USART->USB.
ad.2. Jaką pamięć zastosować? Jeden bank czy kilka? Być może dodatkowy uC tylko do komunikacji z PC i zapisywania danych do pamięci?
ad.3. To też jest w zasadzie pytanie o pamięć? uC musi się dostać do danych z taką szybkością aby zdążyć wystawić te 3 bajty na porty(z odpowiednią częstotliwością).
Proszę o zweryfikowanie, czy podążam dobrą ścieżką (czy mam dobre założenia, czy w poprawny sposób szukam rozwiązania)? Być może można kupić coś gotowego za nieduże pieniądze?
Pozdrawiam.
Ostatnio zastanawiam się nad zrobieniem sterownika silników krokowych opartego o AVR. Moje podstawowe założenia to maksymalna częstotliwość impulsów 80kHz(jeśli jest to mało wtedy odpowiednio więcej), 6 osi(lub więcej). Każdy silnik liczę jako 3 piny(ENABLED, DIR, STEP). Moim dodatkowym założeniem jest aby uC występował w tym układzie tylko i wyłącznie jako element wykonawczy. Chodzi mi o to aby nie wykonywał on żadnych obliczeń związanych np. z interpolacją itd. Chciałbym realizować wszystkie wyliczenia na PC'cie i tylko wysyłać te dane do realizacji na uC. Cała praca jaką ma zrobić mikrokontroler to wystawiać te dane poprzez porty (powiedzmy, że dodatkowo użyję zatrzasków) z odpowiednią częstotliwością.
Tu pojawia się kilka problemów:
1. Jak przesyłać tyle danych na uC z odpowiednią prędkością
2. Jak je przechowywać na uC
3. Jak zapewnić pracę tego układu tak aby nie naruszyć zależności czasowych.
ad.1. Jeśli mamy te 6 silników po 3 bity na każdy, daje nam to 3 bajty i jeśli chcemy mieć 80kHz to jest to 80kilo x 3 na sekundę. To można pociągnąć nawet przez USART->USB.
ad.2. Jaką pamięć zastosować? Jeden bank czy kilka? Być może dodatkowy uC tylko do komunikacji z PC i zapisywania danych do pamięci?
ad.3. To też jest w zasadzie pytanie o pamięć? uC musi się dostać do danych z taką szybkością aby zdążyć wystawić te 3 bajty na porty(z odpowiednią częstotliwością).
Proszę o zweryfikowanie, czy podążam dobrą ścieżką (czy mam dobre założenia, czy w poprawny sposób szukam rozwiązania)? Być może można kupić coś gotowego za nieduże pieniądze?
Pozdrawiam.