SpindleETH czyli wrzeciono przez Ethernet

Dyskusje dotyczące działania obsługi programu LinuxCNC
Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 1
Posty: 9456
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

SpindleETH czyli wrzeciono przez Ethernet

#1

Post napisał: tuxcnc » 26 maja 2025, 00:01

Nie daję żadnej gwarancji !!!
Nie mam jak sprawdzić na rzeczywistej maszynie.
Mam nadającą się do tego tokarkę, ale musiałbym zrobić kilka przeróbek, a nie mam na to czasu.
Tak więc sprawdziłem tylko analizatorem stanów logicznych i emulatorem enkodera na STM32-C3...
Wygląda na to, że wszystko działa, ale pewności mieć nie mogę.

Układ jest na STM32F103C8T6 (Blue Pill, na Aliexpress poniżej 10 PLN) i module W5500 na Aliexpress kilkanaście PLN), czyli jak ktoś będzie miał fart, to się zmieści w dwudziestu PLN.

Ważne, żeby kabelki pomiędzy płytkami były jak najkrótsze (max 10 cm), bo są z tym problemy.

W kodzie jest zakomentowana linia #define USE_ALL_PINS, bo piny PA13 i PA14 są używane także do programowania układu.
Jeśli są ustawione jako wejścia, to ST-Link nie potrafi zresetować układu i trzeba to robić ręcznie (nic trudnego, ale upierdliwe). Trzeba wtedy przytrzymać przycisk RESET i puścić go kiedy zacznie się programowanie.
Z zakomentowaną linią ten problem nie występuje, ale wspomnianych pinów nie można używać.
Jeżeli mamy nową płytkę i nie zamierzamy jej później reprogramować, to można odkomentować wspomnianą linię i pierwszy raz programowanie pójdzie normalnie, dopiero przy następnych trzeba kombinować,
Układ trzeba programować przez ST-Link (też kilka PLN na Aliexpress), bo USB musi być wyłączone (inaczej tracimy dwa kolejne piny).

Kilka słów o tym, jak to działa.
Układ jest zaprojektowany do obsługi wrzeciona z enkoderem i regulacją obrotów PWM.
Zapewne będą potrzebne dodatkowe układy (PWM->0/10V, albo mduł MOSFET, ewentualnie jakieś transoptory czy inne konwertery napięć), ale to już są kwestie czysto elektryczne i niczego więcej nie trzeba programować, a tylko połaczyć kabelki... Licznik PWM pracuje z szesnastobitową precyzją (o rząd wielkości lepszą niż potrzeba) i częstotliwością 1 kHz .)
Pin SpindleETH.spindle-pwm przyjmuje wartości 0-1 (czyli np. 0.57 to 57% wypełnienia). W pliku HAL można sobie to dopasować komponentem scale. Zresztą ile by nie zrobić, to i tak wszystkim nie dogodzi...
Enkoder jest obsługiwany licznikiem sprzętowym, więc jakiego by nie dać, to powinien zostać obsłużony. Wejście Z (index) jest obsługiwane przerwaniem na zboczu opadającym, więc też o jego długość nie ma potrzeby się martwić. Przerwanie ustawia flagę, która jest wysyłana najbliższą ramką i kasowana. Wynika z tego, że indeks nie może zostać niezauważony, ale może wystąpić opóźnienie nawet długości okresu wątku do którego komponent jest przypisany. No ale raczej nikt nie gwintuje na maksymalnych obrotach. a na dobrym komputerze powinno się zejść poniżej 0,5 milisekundy okresu...
Piny enable i ready działają zgodnie ze swoimi nazwami. Jeśli enable=0, to PWM i wszystkie wyjścia są ustawiane na zero. Pin index-ena synchronizuje przy gwintowaniu, a enc-reset zeruje pozycję enkodera (ten pin też jest io, czyli zostaje zresetowany kiedy tylko zadziała i nie trzeba tego sygnału zdejmować).

Czyli w sumie jeden enkoder z indeksem, jeden PWM, jedenaście wyjść cyfrowych i trzynaście (lub piętnaście) wejść cyfrowych.

STM32F103C6T6 nie będzie działał, ale to niewielkie zmartwienie, bo STM32F103C8T6 kosztuje prawie tyle samo.
Nie wiem jak się będą spisywać chińskie klony, ale tutaj to już loteria, bo za te same pieniądze można kupić zarówno oryginalny ST, jak i niewiadomy układ z nieudolnie podrobionym oznaczeniem.
Wniosek z tego taki, że zamiast trzech płytek u jednego sprzedawcy lepiej kupić po jednej u trzech...
.
SpindleETH.tar
(310 KiB) Pobrany 12 razy

Dodane 53 minuty :
Przedobrzyłem...
Miało być do wyboru, czy Arduino, czy Platformio, ale bibliotekę STM32_QuadEncoder umieściłem tylko w folderze SpindleETH/PlayformIO/SpindleETH/lib
W każdym razie ona jest i jak ktoś woli Arduino IDE, to musi ją sobie skopiować do swojego Arduino/libraries



Wróć do „LinuxCNC (dawniej EMC2)”