Podzielnica elektroniczna.

Linie produkcyjne, automaty, roboty nie tylko CNC. Przeróbki, modernizacje oraz konstrukcje własne.
Awatar użytkownika

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

Podzielnica elektroniczna.

#1

Post napisał: tuxcnc » 08 mar 2020, 16:21

Dawno temu rozgrzebałem projekt elektronicznej podzielnicy opartej na enkoderze obrotowym.
O ile cześć dotyczącą samego enkodera zrobiłem prawie natychmiast, o tyle interfejs nigdy nie doczekał się realizacji. Powód był prosty, zachciało mi się wyświetlacza dotykowego z wodotryskami, a czasu i chęci żeby go oprogramować nie znalazłem ...
Były ostatnio na Forum dyskusje o obsłudze enkodera, więc sobie temat przypomniałem i postanowiłem go zrealizować po najmniejszej linii oporu, czyli kosztem łatwości obsługi, za to przy minimalnych kosztach i minimalnym nakładzie pracy.

Potrzebne będą :

1. Tablet lub telefon z Androidem i przyzwoitym wyświetlaczem. Takie urządzenie, zupełnie nowe, można kupić już poniżej 200 PLN, ale nada się też sprzęt mocno wysłużony, leżący w szufladzie lub kupiony okazyjnie za śmieszne pieniądze.

2. Oprogramowanie https://play.google.com/store/apps/deta ... .dro&hl=pl. Zasadniczo zostało ono napisane do obsługi chińskich suwmiarek i enkoderów liniowych, ale będzie współpracować z dowolnym urządzeniem które wyśle przez Bluetooth dane w odpowiednim formacie i z prędkością 9600 baud. Program jest za darmo.

3. Moduł Bluetooth HC05 lub HC06. Koszt od 10 PLN z wliczoną wysyłką z Chin. Ja akurat użyłem HC06, który jest fabrycznie ustawiony na 9600 baud i pracuje bez problemu zarówno przy 5V jak i 3.3V.

4. Arduino DUE lub chiński klon za 50 PLN z wliczoną wysyłką z Chin. Tutaj sprawa jest dość istotna. Otóż DUE jest najtańszą platformą ze sprzętową obsługą enkodera z indeksem. Teoretycznie dałoby się urządzenie zrobić nawet na Arduino Nano, ale najzwyczajniej NIE WARTO, bo oszczędność prawie żadna, a zgubienie pozycji przy rzeczywistej obróbce rzeczywistego detalu może być dużo kosztowniejsze ...

5. Enkoder Omron E6C2-CWZ6C albo podobny. Model podałem żeby było jakieś odniesienie do sprzętu który działa u mnie, ale zasadniczo chodzi o to, żeby to był enkoder obrotowy zasilany napięciem 5V z wyjściami A,B,Z, czyli dwie fazy i indeks. Ja akurat mam enkoder 2000 cpr, ale oczywiście im więcej tym dokładniej.

Podłączamy do DUE enkoder i moduł BT, wgrywamy program poprzez ArduinoIDE, instalujemy TouchDRO na tablecie/telefonie i powinno działać.

Uwagi są takie, że Arduino i moduł BT mają "egocentryczne" nazwy pinów, znaczy się łącząc RX0 z RXD oraz TX0 z TXD połaczymy wejście z wejściem i wyjście z wyjściem. Właściwe jest połączenie TX0 na Arduino DUE z RXD na module BT. Komunikacja jest jednokierunkowa, więc jeden kabelek wystarczy, no i oczywiście zasilanie.
Zasilanie łączymy tak, że pin 5V zasila enkoder (tam są i tak wyjścia OC), natomiast 3.3V zasila moduł BT.

Jak już wspomniałem, współpraca programu TouchDRO z otoczeniem polega na tym, że program nasłuchuje danych z odpowiednią prędkością i w odpowiednim formacie, a potem otrzymane dane przelicza i wyświetla.
Format to przykładowo X9999; czyli litera określająca o którą oś chodzi, wartość liczbowa i średnik na końcu. Z tego co zauważyłem, dane mogą przychodzić w dowolnym momencie, w dowolnej kolejności, albo wcale. Po prostu odebranie danych powoduje aktualizację wyświetlacza.

W programie TouchDRO można ustawić CPR użytego enkodera a także ustawić cale lub milimetry. Domyślnie CPR jest podawane w impulsach na cal, a żeby było śmieszniej przyjmuje także wartości ułamkowe do dwóch miejsc po przecinku, co akurat okazuje się być ogromną zaletą .
U mnie enkoder jest 2000 cpr, co daje osiem tysięcy pozycji na obrót przy odczycie kwadraturowym.
Tak więc aby wyświetlać pozycję w stopniach muszę ustawić wyświetlanie w calach, oraz ustawić cpr na 22,22 bo 8000/22,22 to w przybliżeniu 360.
Ale jest też ciekawsza możliwość, gdy potrzebujemy podzielić pełny obrót na kilka równych części.
Przykładowo jeśli potrzebuję wyznaczyć sześć pozycji dokładnie co 60 ° to jako cpr muszę wpisać 1333,33, a wtedy wyświetlacz będzie pokazywał wartości od 0,001 do 6,000. Jak się nietrudno domyślić, kolejne podziały będą na 1,000, 2,000, 3,000, 4,000, 5,000 i 6,000 czyli trzeba ustawić kolejne liczby całkowite z wyzerowaną częścią ułamkową.
No nie jest to idealne rozwiązanie, ale zawsze można sobie policzyć czy zrobić zawczasu ściągawkę ...

A to jest program pod ArduinoIDE :

Kod: Zaznacz cały

//tuxcnc GPL
#define encoder_cpr 2000 // change to your encoder resolution
#define encoder_quad (encoder_cpr * 4); // quadrature counts is 4*CPR
char valid = 3;
int position = -1;

void setup() {
  Serial.begin(9600);
  // set pullups on inputs
  pinMode(2, OUTPUT);
  digitalWrite(2, 1);
  pinMode(13, OUTPUT);
  digitalWrite(13, 1);
  pinMode(A6, OUTPUT);
  digitalWrite(A6, 1);
  
 // Setup Quadrature Encoder with index

 REG_PMC_PCER0 = (1<<27); // activate clock for TC0

 // select XC0 as clock source and set capture mode

 //REG_TC0_CMR0 = 5; // continous count
 // or
 REG_TC0_CMR0 = (1<<0)|(1<<2)|(1<<8)|(1<<10); // reset counter on index

 // activate quadrature encoder and position measure mode, no filters

 REG_TC0_BMR = (1<<8)|(1<<9)|(1<<12);

 // enable the clock (CLKEN=1) and reset the counter (SWTRG=1) 

 REG_TC0_CCR0 = 5;  //
 
  // check if was first index

}

void loop() {
//REG_TC0_CV0 Stores count from encoder
//(REG_TC0_QISR >> 8) & 0x1; gives 0 or 1 depends of direction

if (valid == 1) {
position = REG_TC0_CV0;
  if (position < 0) { position += encoder_quad; } 
 }
else {
  if ((REG_TC0_QISR & 1) == 1) valid--;
 }
    Serial.print("X");
    Serial.print(position + 1);
    Serial.print(";");

delay(100);
}
Niestety, program pisałem dawno, nie pamiętam dlaczego jest akurat tak, ani które wyjścia enkodera idą na które piny Arduino DUE. W każdym razie to są fizyczne wejścia licznika, więc na pewno w grę wchodzą tylko te trzy, a jak się źle podłączy to nic się nie spali, najwyżej nie będzie działać, a możliwości wiele nie jest ... Zresztą zawsze można zajrzeć do dokumentacji Atmel SAM3X8E.




tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 1
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

Re: Podzielnica elektroniczna.

#2

Post napisał: tomcat65 » 08 mar 2020, 16:47

tuxcnc pisze:Uwagi są takie, że Arduino i moduł BT mają "egocentryczne" nazwy pinów, znaczy się łącząc RX0 z RXD oraz TX0 z TXD połaczymy wejście z wejściem i wyjście z wyjściem. Właściwe jest połączenie TX0 na Arduino DUE z RXD na module BT.

Nie są to jakieś egocentryczne nazwy, tylko typowe dla transmisji po UART.
TX - transfer data
RX - receive data
Jak jedno urządzenie wysyła (po TX ), drugie odbiera po RX. Dotyczy to wszystkich urządzeń komunikujących się w tym trybie i taki jest standardowy sposób połączeń.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „INNE MASZYNY i URZĄDZENIA”