RE: Electronic screw na malé čínské soustruhy.

Radek Benedikt benedikt na lphard.cz
Středa Prosinec 28 20:18:55 CET 2022


Ahoj vsem,

Vysoce oblibeny projekt je na Arduinu ELS v.7e2
Еще одна электронная гитара для токарника, на Ардуино
https://www.chipmaker.ru/topic/118083/
Je to docela tvrdarna s mnoha klony, zajimave je na ni predevsim ovladani. Blbuvzdorne pomoci otocnych prepinacu rezimu, joystikem s aretaci a "tocitkem". Ten joystik není vubec blbe reseni, navrhoval to spis clovek od soustruhu, nez programator a s nim se v podstate "zapina" pohyb. A lidsky to ma i nastaveni limitu.

A druhy projekt pro inspiraci bych videl Clough42.

Kazdopadne jsou u nich videt ukazky jak to cele omotorovat, osnimacovat atd.

Motory jsem si poridil ja jsou radeji hybridni serva, nehrozi tam ztrata kroku.

Pro vypocet posuvu v zavislosti od pozice vretena (tj. jako zdroj pro pohyb krokovych motoru je potreba osadit na vreteno inkrementalni snimac s pokud možno hodne pulsy na otacku - limit je spis co zvladne obslouzit procesor.
Algoritmus pro prepocet pulsu od vretene na krokove motory je vhodne prevzit z algoritmu pro vykreslovani 2D na obrazovce. Pravda, videl jsem i zoufala reseni typu pocitej pulsy vynasob to prepocotavací konstantou 1.1789545, zaokrouhli a pripadne posli x pulsu na vystup. A i pokud ma ten procesor HW aritmetiku v pohyblive radove carce tak je to nepresne. A navic je to zbytecne, neni potreba vedet kde to vreteno/motor je, jen pocitat zda se ma vygenerovat posuv motoru, kdyz prijde puls. Klasika je algoritmus Bresenham. Ono to v podstate vychazi z definice deleni pro první stupen zakladni skoly. Od delence se odcita delitel a pocita se kolikrat je potreba odecist. Tady je to jeste primitivnejsi. Kazdy puls odecte delitel a kdyz vypocet podtece, tak se posle pulz do motoru. K vysledku odecteni se pricte delenec a pokud je to porad podtecene (tj. zaporne) posle se dalsi puls atd. dokud není vysledek kladny. A s nim se pokracuje pri dalsim pulsu  od vretena. Ta ukazka kodu dale je obousmerna a lze ji zjednodusit, na soustruhu se smer pohybu pri posuvu za behu nemeni... Jede se limit/limit tam a zpet. V nekterych projektech (treba prave v 7e2) je to mirne doladene na "celou" cast a zbytek. Je to sice trochu necitelnejsi, ale dela to totez.

Radek (benedikt2hw.cz)

--------------------------------------------------------------------------------------------
In a nutshell, Bresenham incrementally calculates the division and remainder of points along the line to decide whether this or next pixel up is the better choice. So, instead of periodically measuring the rotation delta and reevaluating the gear ratio expression at each cycle, we will respond to the encoder pulses as they happen and incrementally calculate the output using only integer addition and subtraction.

Below is a C++ implementation of this method:

namespace gear {
  uint16_t enc_last_count = 0;
  int N = 7, D = 30; // Pulse ratio is 7/30
  int error = 0; // "sub-pixel" error
}

void InterruptHandler() { // Called when encoder value changes.
  using namespace gear;
  auto e = Encoder::get_count();
  auto step_dir = Dir::none;
  if (enc_last_count + 1 == e) { // forward
    error += N; // update error
    if ((error << 1) >= D) { // is the other 'pixel' closer?
      error -= D; // yes, trim the error
      step_dir = Dir::fwd;
    }
  }
  else { // backward
    error -= N;
    if ((err << 1) <= -D) {
      error += D;
      step_dir = Dir::back;
    }
  }
  if (step_dir != Dir::none) {
    step_gen::step(step_dir);
  }
  enc_last_count = e; // save
}
Step generation is not shown but uses a separate timer peripheral in the microcontroller to create a precise (14 ns resolution) step pulse output. Pulse parameters are to be customized for the motor driver selected.




Další informace o konferenci Hw-list