sterowanie silnikami przez AVR

Rozmowy na temat układów elektronicznych sterowania obrabiarek CNC

Autor tematu
WallyGator
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 9
Rejestracja: 10 lut 2010, 15:31
Lokalizacja: Warszawa

sterowanie silnikami przez AVR

#1

Post napisał: WallyGator » 20 sie 2011, 18:56

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.



Tagi:


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 5
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#2

Post napisał: jarekk » 21 sie 2011, 14:19

No ja mam taki sterownik :-). Zrobiłem go dla Piotra Rakowskiego i jego Step2Cnc.

Kilka uwag:
- 80 kHz *3 bajty = 240 kilo bajtów = 1,9 Mega bita /sekundę. To przejdzie przez RS'a - ale ledwie. Ja używam układów FTDI i wiem używam około 1Mega bita / sekunde - czy kolega doliczył również dane potrzebne do synchronizacji oraz wydolność PC'ta przy wysyłaniu takich danych ?
- Ja nie przesyłam pojedynczych bajtów ( zawierających step/dir), tylko dane odcinków prostoliniowych. Około 96 bajtów / odcinek ( arytmetyka 64 bitowa, 4 osie, zawiera przyspieszenia )

Takie rozwiązanie jak kolega proponuje istnieje ( CncGraf ) tyle że używa FPGA i pamięci SRAM.

Przy tym rozwiązaniu nigdy za dużo pamięci ani MHz - proponuję zmienić AVR na ARM Cortex'a (np. LPC1769 120Mhz, 64kb RAM) - będzie łatwiej. Albo nawet któryś z procków z SDRAM - bo będzie można cąłkiem sporo zbuforować.
WallyGator pisze: Być może można kupić coś gotowego za nieduże pieniądze?
Jeden z kolega na forum prezentuje swoje bardzo ciekawe rozwiązanie:
https://www.cnc.info.pl/topics12/pikocn ... 85,190.htm

Niedługo będzie też dostępny mój sterownik do Macha'a ( 4 osie, 100kHz, ethernet)


Autor tematu
WallyGator
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 9
Rejestracja: 10 lut 2010, 15:31
Lokalizacja: Warszawa

#3

Post napisał: WallyGator » 21 sie 2011, 15:49

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?


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 5
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#4

Post napisał: jarekk » 21 sie 2011, 16:06

Prościej ci bedzie z SDRAMem. Karta SD to utrudnienie - będzie wolna ( no chyba że masz w procku dedykowany pełny kontroler). Radzę unikać dwóch procków - zawsze łatwiej wszystko okiełznać jednym szybkim ( bo najsłabszym punktem będzie wymiana danych). Jeżeli chcesz podłączać pamięć równoległą, i dzielić między procki - to będzie skomplikowane elektrycznie.

Aha - i ethernet będzie się dużo lepiej zachowywał niż USB(polecam)

[ Dodano: 2011-08-21, 16:07 ]
Poza tym - z którym programem ma to działać ? Bo zrobienie samemu czegoś na kształt Mach'a czy Step'a - to zadanie jeszcze większe niż sam kontroler

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 9323
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#5

Post napisał: tuxcnc » 21 sie 2011, 16:46

Tak się zastanawiam czy Was podziwiać, czy nad Wami płakać.
Chyba to robicie wyłącznie z miłości do najlepszego systemu jaki kiedykolwiek wymyślono, ale który do sterowania w czasie rzeczywistym się nie nadaje wcale.
Jak byście nie kombinowali, to płyta Intel Atom z EMC2 wyjdzie taniej, szybciej i lepiej.
Nie lepiej poświęcić energię na coś pożytecznego ?

.


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 5
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#6

Post napisał: jarekk » 21 sie 2011, 18:22

EMC2 jest dobry, ale nie jest to pępek świata Panie Nieomylny i Jedynie Słuszny :mrgreen:

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 9323
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#7

Post napisał: tuxcnc » 21 sie 2011, 19:15

jarekk pisze:Panie Nieomylny i Jedynie Słuszny :mrgreen:
A jakieś argumenty merytoryczne ?

Ja to bym się wcale nie odzywał, bo każdy wolny człowiek może sobie marnować swoje własne życie na co mu się spodoba, tylko tak przykro patrzeć jak zdolni ludzie marnotrawią swoją energię na robienie czegoś bez sensu.
To nie te czasy, że pecet kosztował pięć tysięcy i żarł trzysta watów.
Dziś Atoma można złożyć za trzy stówki i po kilkunastu minutach instalacji i ustawiania mieć kompletny sterownik.
Ile kosztuje złożenie systemu na ARM ?
Nawet jak nic by nie kosztowało, to wystarczy poświęcić dwadzieścia godzin, żeby się przestało opłacać.
Czy naprawdę nie można robić czegoś pożyteczniejszego ?

.

Awatar użytkownika

pitsa
Moderator
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 4463
Rejestracja: 13 wrz 2008, 22:40
Lokalizacja: PL,OP

#8

Post napisał: pitsa » 21 sie 2011, 20:47

Pewien fin o imieniu Linus też zajmował się marnotrawieniem czasu na "bezsensowne" tworzenie swojego własnego systemu. :mrgreen:
Ten kto używa linuxa powinien doskonale rozumieć, że warto robić to co dla wielu wydaje się niepotrzebną robotą.
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 9323
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#9

Post napisał: tuxcnc » 21 sie 2011, 22:11

pitsa pisze:Pewien fin o imieniu Linus też zajmował się marnotrawieniem czasu na "bezsensowne" tworzenie swojego własnego systemu. :mrgreen:
Ten kto używa linuxa powinien doskonale rozumieć, że warto robić to co dla wielu wydaje się niepotrzebną robotą.
Jak zwykle mylisz pojęcia.
Zbudowanie samochodu z silnikiem parowym było kiedyś wielkim postępem, ale dziś byłoby tylko wielką głupotą.

.


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 5
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#10

Post napisał: jarekk » 21 sie 2011, 22:20

tuxcnc pisze:jarekk napisał/a:
Panie Nieomylny i Jedynie Słuszny :mrgreen:

A jakieś argumenty merytoryczne ?
Och - bardzo proste. Początkowo to była zabawa, ale w tej chwili po prostu jest biznes.
Po prostu mam klienta który nie zaakceptował rozwiązania EMC2 ( bo i takie proponowałem). Zażyczył sobie real-timeowy sterownik dla Windows. On ma z tego interes, w związku z tym ja również ( i sporo zabawy bo to lubię).

Czy trzeba coś więcej ? Wszystkim by życzył takiego produktywnego marnowania czasu :grin:

PS. Część ludzi, zwłaszcza tych mało związanych z komputerami lubi po prostu mieć Windows z Corelem. Do tego guzik (ewentualnie program który odczyta plik Corela) typu "Wykonać". Drugi komputer z Linuksem nie jest tam mile widziany ( mimo że miało by to sens).

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”