RAMPA na ARDUINO

Dyskusje na temat silników krokowych i sterowników silników krokowych.
Awatar użytkownika

Autor tematu
markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 64
Posty: 3975
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

RAMPA na ARDUINO

#1

Post napisał: markcomp77 » 12 kwie 2012, 20:19

RAMPA na ARDUINO
-------------------------------

Zapraszam do rozważań nad realizacją przyśpieczania i hamowania z poziomy ARDUINO.

pozwalam sobie wstawić fajny przyczynek do tej dyskusji w wykonaniu Kolegi Pitsa
z wątku:
https://www.cnc.info.pl/topics65/silnik ... t35539.htm

pitsa pisze:Kształt S ma krzywa prędkości gdy ustalona jest rampa "trapezowa" dla przyspieszenia.

Obrazek

Tu jest to ładnie wyjaśnione: http://people.mech.kuleuven.be/~bruynin ... n-api.html

A ten rysunek przedstawia kolejne pochodne drogi:

Obrazek

"Jerk" to jest właśnie zryw, pochodna zrywu to udar.

Kim La w swoim oprogramowaniu nie tylko operuje na przyspieszeniach ale i na zrywie. Stąd rekreacyjnie tym się bawię.

Obrazek

Zastanawiam się jak pokazać efekt rampy trapezowej i "wygładzonej". Może na osi zamocować talerzyk z wodą? Może coś z pomysłów , tylko bez enkodera?


SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

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

Re: RAMPA na ARDUINO

#2

Post napisał: pitsa » 12 kwie 2012, 20:52

Nie zauważyłem gdy się pojawił ten wątek. Robię teraz kilka rzeczy jednocześnie. Szykuję zestaw na wycieczkę i tutaj: https://www.cnc.info.pl/download.htm?id ... special=65 wrzuciłem arkusz z prymitywną rampą /1.2 (na start) lub */1.2 (na stop).
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ

Awatar użytkownika

Autor tematu
markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 64
Posty: 3975
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#3

Post napisał: markcomp77 » 12 kwie 2012, 21:07

pitsa pisze:. Szykuję zestaw na wycieczkę
ooo... - jakaś ciewkawa?
ładna pogoda się zaczyna... i by się człowiek wybrał gdzieś
a i długi łikend... już tuż tusz
--

opracowanie oprogramowania rampy dla arduino może wspomóc wiele pomniejszych projektów

--

przykład do realizacji: OSCYLATOR silnika...

1. ustawiana prędkość max, np. potencjometrem, jednak odczyt realnej prędkości na wyświetlaczu (ew. nawet z enkodera)

2. ustawiana wartość akceleracji - również potencjometrem.. i możliwość odczytania jego wartości na wyświetlaczu

2.a. krztałt rampy

3. ustawienie amplitudy oscylacji lewo/prawo - również potencjometr... i zrzut na wyświetlacz

4. obsługa krańcówek (choć to można zrobić po prostu przerywając sygnał STEP)

OSCYLATOR przypomina moduł kontroli silnika w kreatorze stepconf linuxcnc

takie malutki moduł OSCYLATORa nadawał by się do strojenia serv... do testowania zmęczeniowego osi maszyny (ew. trzy lub więcej takich modułów do badaniu paru osi na raz)
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

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

#4

Post napisał: pitsa » 12 kwie 2012, 22:03

No to robimy. :-)

Zamiast regulacji potencjometrem może być przełącznik inkrementalny i standardowy wyświetlacz LCD lub coś takiego wystarczy: http://www.dealextreme.com/p/8x-digital ... 73?item=41 Są nawet takie zabawki jak mini joystick: http://www.dealextreme.com/p/repair-par ... 340?item=4
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ

Awatar użytkownika

Autor tematu
markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 64
Posty: 3975
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#5

Post napisał: markcomp77 » 12 kwie 2012, 22:43

można oczywiście dokupować moduły...
ale potencjometry - podpinamy do wejść analogowych - i już...
albo można dać przyciski lewo/prawo (takie od szyby w aucie... do kupienia za grosze)

a wyświetlacz - dać typowy--- HD-coś tam (najczęściej występujący... w wielu odmianach, rozmiarach, kolorach)
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

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

no to lecim z rampowaniem

#6

Post napisał: pitsa » 13 kwie 2012, 00:13

Wyświetlacz http://nettigo.pl/products/216 - zgodny z HD44780.

Najprostsze sterowanie to 2 lub 3 przyciski, ale jeden potencjometr do zmiennej szybkości jakiegoś nastawu prędkości lub czasu może być ciekawe. Ale na początek wystarczy sama płytka Arduino.
Próba rampy: http://youtu.be/Q-80IXh8vf4
Kod:

Kod: Zaznacz cały

#define enable 4     
#define DIR_PIN 5 
#define STEP_PIN 6

int  podzial=8;      // testowe ruchy silnika ustawione na pełny obrót

void setup() 
{ 
  pinMode(enable, OUTPUT); 
  pinMode(DIR_PIN, OUTPUT); 
  pinMode(STEP_PIN, OUTPUT); 
} 

void loop() { 
delay(4000); 
 for(int hyhy=25 ; hyhy > 2 ; hyhy = hyhy - 1){ 
   rampa(200*podzial, 10000, 30+hyhy*10); 
   rampa(-200*podzial, 10000, 30+hyhy*10); 
 } 
 for(int hyhy=2 ; hyhy < 25 ; hyhy = hyhy + 1){ 
   rampa(200*podzial, 10000, 30+hyhy*10); 
   rampa(-200*podzial, 10000, 30+hyhy*10); 
 } 
} 

void rampa(int steps, int startsteps, int speedm){ 
  // steps - liczba kroków do wykonania - ujemna liczba zmiana kierunku 
  // startsteps - czas startowego kroku us np. 20000
  // speedm - minimalny czas us między krokami na pełnej prędkości
  int przerwa = 20; 
  int licz = 0;       // licznik zrobionych kroków
  int krokirampy= 0;  
  int korekta= 6;     // trzeba jeszcze kroki doliczyć - tymczasowa poprawka 
  int pip = 20;                      // 20us - impuls step
  int dir = (steps > 0)? HIGH:LOW; 
  steps = abs(steps);                // wyciągnięcie kierunku z podanej liczby kroków.
  digitalWrite(DIR_PIN,dir);         // ustaw kierunek

  for(int i= startsteps; i > 1 ; i = i / 1.09 - 1){ 
    licz=licz+1; 
    przerwa=i; 
    if (przerwa < speedm) {przerwa = speedm ; } ; 
    digitalWrite(STEP_PIN, HIGH); 
    delayMicroseconds(pip); 
    digitalWrite(STEP_PIN, LOW); 
    delayMicroseconds(przerwa); 
  } 
    krokirampy=licz; 
  for(int i=0; i < (steps-2*krokirampy-korekta); i++ ) { 
    licz=licz+1; 
    digitalWrite(STEP_PIN, HIGH); 
    delayMicroseconds(pip); 
    digitalWrite(STEP_PIN, LOW); 
    delayMicroseconds(speedm); 
  } 
  for(int i=1; i < startsteps; i = i * 1.09 + 1){ 
    licz=licz++; 
    przerwa=i; 
    if (przerwa < speedm) {przerwa = speedm ; } ; 
    digitalWrite(STEP_PIN, HIGH); 
    delayMicroseconds(pip); 
    digitalWrite(STEP_PIN, LOW); 
    delayMicroseconds(przerwa); 
  } 
 } 

Źródło kodu bazowego: http://arduino.cc/forum/index.php?topic=94102.0
Ostatnio zmieniony 16 kwie 2012, 18:05 przez pitsa, łącznie zmieniany 1 raz.
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ


GSM
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 8
Posty: 183
Rejestracja: 01 kwie 2007, 21:05
Lokalizacja: Warszawa

#7

Post napisał: GSM » 13 kwie 2012, 01:09

O! Nowy temat o samych rampach. Nie będzie śmiecenia w drugim wątku.
markcomp77 pisze:OSCYLATOR silnika
Czy takie urządzenie jest faktycznie potrzebne? Do testów można przecież zaprząc komputer z EMC/Machem.

pitsa nie podoba mi się to dzielenie int-a przez float-a w pętli.
Tracisz część po przecinku. W tym przypadku wielkiej różnicy to nie robi ale potem się możesz naciąć przypadkiem.

Pozdrawiam,
GSM

Awatar użytkownika

blue_17
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 14
Posty: 1715
Rejestracja: 16 kwie 2009, 07:55
Lokalizacja: Kraków/Kornatka

#8

Post napisał: blue_17 » 13 kwie 2012, 03:12

GSM pisze:pitsa nie podoba mi się to dzielenie int-a przez float-a w pętli.
Ciekawy jaki kompilator to jest bo pewnie GCC grzmiało by :)

Jak dla mnie to prostsze jest GCC i robienie wszystkiego "ręcznie" , po jakimś czasie i po zebraniu bibliotek chyba dochodzi się do tego samego :)

Pozdrawiam
"I siedzieli oni razem pod nagim DOS-em i nie wstydzili sie tego." :D


GSM
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 8
Posty: 183
Rejestracja: 01 kwie 2007, 21:05
Lokalizacja: Warszawa

#9

Post napisał: GSM » 13 kwie 2012, 03:29

blue_17 pisze:Jak dla mnie to prostsze jest GCC i robienie wszystkiego "ręcznie" , po jakimś czasie i po zebraniu bibliotek chyba dochodzi się do tego samego :)
Jestem tego samego zdania.
Do tego mój organizm nie toleruje Arduino.
blue_17 pisze:Ciekawy jaki kompilator to jest bo pewnie GCC grzmiało by :)
Nie powinno, wszystko sobie automatycznie przekonwertuje/pocastuje. Ale jeśli by to było GCC to by krzyczało na pewno o deklarację zmiennej w prologu pętli.

Pozdrawiam,
GSM

Awatar użytkownika

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

#10

Post napisał: pitsa » 13 kwie 2012, 07:17

Od czegoś trzeba zacząć. Docelowo chcę dojść do opanowania zrywu. Arduino dobre jest na początek do szybkiego testowania. Tu jest prosto rozpisane sterowanie silnikiem krokowym: http://www.open.com.au/mikem/arduino/AccelStepper/
Tak wygląda kod:

Kod: Zaznacz cały

    if ((sqrSpeed / twoa) < distanceTo) 
    { 
	// Accelerate clockwise
	// Need to accelerate in clockwise direction
	if (_speed == 0.0f) 
	    requiredSpeed = sqrt(twoa); 
	else
	    requiredSpeed = _speed + abs(_acceleration / _speed); 
	if (requiredSpeed > _maxSpeed) 
	    requiredSpeed = _maxSpeed; 
    } 
    else
    { 
	// Decelerate clockwise, accelerate anticlockwise
	// Need to accelerate in clockwise direction
	if (_speed == 0.0f) 
	    requiredSpeed = -sqrt(twoa); 
	else
	    requiredSpeed = _speed - abs(_acceleration / _speed); 
	if (requiredSpeed < -_maxSpeed) 
	    requiredSpeed = -_maxSpeed; 
    } 
 
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Silniki Krokowe / Sterowniki Silników Krokowych”