regulátor otáček ( kroků ) krokového motoru
-
RKal
- Příspěvky: 234
- Registrován: 7. 4. 2014, 9:26
- Bydliště: Krasov
aha, takže tyč je na pevno a otáčí se matka chápu to správně?
-
Thomeeque
- Příspěvky: 9649
- Registrován: 30. 1. 2012, 10:20
- Bydliště: Mimo ČR
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
-
hobbyrobot
- Příspěvky: 379
- Registrován: 27. 12. 2011, 9:24
V sobotu 17. října (tedy asi za 6 týdnů) pořádáme na MFF-UK další Malostranské Robodoupě, tentokrát zaměřené na řízení krokových motorů pomocí mikrokontrolérů a PC. Program není ještě přesně určen, ale s vysokou pravděpodobností se bude probírat knihovna AccelStepper pro Arduino, Arduino s programem GRBL, implementace Linuxu CNC do Beaglebone Black a bude se povídat i o Linuxu CNC v PC. Nebude pochopitelně chybět ani ukázka řízení krokového motoru mým oblíbeným PICAXE.elbarto píše:Kdyby nekdo ... kdo dobre vi, ktera bije planoval najakou prednasku/predvadecku na tema pohony/drivery/rizeni atd. prihlasi se myslim dost lidi. Za sebe bych rovnou rekl ANO. Posledni dobou na tema dost dikutujeme a zjistujeme, ze v tom pekne litame. Kutilove maji rozestaveme stavby ci prestaby a ted tapou v tematu pohonu a rizeni.
K vidění budou také funkční vzorky stolních strojů a v kuloárech bude možno probrat i ledacos jiného.
Pokud má někdo co říct k danému tématu, budeme rádi, když se s námi o své znalosti podělí veřejně. K dispozici je datový projektor, takže během přednášek budou i obrázky
Upozorňuji ale, že - protože se jedná jen o jedno sobotní odpoledne - jednotlivé přednášky o délce cca 20 minut budou mít více méně informativní charakter a jejich účelem je, mimo jiné, zkontaktovat lidi se zájmem o podobnou problematiku. Následně můžeme udělat další setkání v méně honosných prostorách a diskutovat o jednotlivých tématech až do bezvědomí...
Přesnou skladbu programu setkání, případně organizační změny můžete průběžně sledovat na Robodoupěti.
jrt
hobbyrobot.cz, jederobot.cz
robodoupe.cz, forum.robodoupe.cz
hobbyrobot.cz, jederobot.cz
robodoupe.cz, forum.robodoupe.cz
-
Pidrman
- Příspěvky: 53
- Registrován: 19. 1. 2015, 6:24
Zeptám se, kde se dají koupit planetové převodovky na krokáče na NEMA 17.
Díky Honza
Díky Honza
-
hobbyrobot
- Příspěvky: 379
- Registrován: 27. 12. 2011, 9:24
Aliexpress.com. Motor s osazenou převodovkou je většinou mnohem levnější, než samotná převodovka. A taky je dobré si při vyhledávání zaškrtnout "free shipping"... kde se dají koupit planetové převodovky na krokáče na NEMA 17
jrt
hobbyrobot.cz, jederobot.cz
robodoupe.cz, forum.robodoupe.cz
hobbyrobot.cz, jederobot.cz
robodoupe.cz, forum.robodoupe.cz
-
Mex
- Příspěvky: 10287
- Registrován: 6. 2. 2014, 10:29
Bylo by dobré se před koupí zamyslet, co si od toho slibuješ, jestli to tím dosáhneš a jestli to tedy skutečně potřebuješ. Řekl bych, že ve většině případů se dá daný problém řešit jinak, elegantnějí a nakonec i levněji.Pidrman píše:Zeptám se, kde se dají koupit planetové převodovky na krokáče na NEMA 17.
-
Pidrman
- Příspěvky: 53
- Registrován: 19. 1. 2015, 6:24
Mam prosbu, je tu někdo kdo umí arduino. Potřeboval bych s tím poradit.
Veškeré komponenty již mam doma, program nahraný na arduino, ale nějak mi to nefunguje jak má. Po nějaké době spuštění a navolení rychlosti otáčení se to pokaždé kousne ( ca 1 minuta )
A příznám se, že si s tím nevím rady
Honza
Veškeré komponenty již mam doma, program nahraný na arduino, ale nějak mi to nefunguje jak má. Po nějaké době spuštění a navolení rychlosti otáčení se to pokaždé kousne ( ca 1 minuta )
A příznám se, že si s tím nevím rady
Honza
-
jova
- Příspěvky: 2577
- Registrován: 2. 11. 2007, 1:40
- Bydliště: Chýnov to je kousek od Tábora
Možná ti poradí tady: http://forum.robodoupe.cz/viewforum.php ... bfc0b59350
-
packa
- Příspěvky: 7202
- Registrován: 7. 2. 2007, 6:42
- Bydliště: Královehradecký kraj
tak sem dej program kouknem na toPidrman píše:Mam prosbu, je tu někdo kdo umí arduino. Potřeboval bych s tím poradit.
Veškeré komponenty již mam doma, program nahraný na arduino, ale nějak mi to nefunguje jak má. Po nějaké době spuštění a navolení rychlosti otáčení se to pokaždé kousne ( ca 1 minuta )
A příznám se, že si s tím nevím rady
Honza
-
Pidrman
- Příspěvky: 53
- Registrován: 19. 1. 2015, 6:24
Díky za rady, snad někdo poradí.
Co se týče programu, tak tady je..... jen jsem upravil podle rad typ hodnoty u tick_count, změnil jsem původní hodnotu int tick_count; na unsigned long tick_count; :
#include <LiquidCrystal.h>
#include <TimerOne.h>
// buttons code
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// directions
#define FORWARD HIGH
#define BACKWARD LOW
// debounce time (milliseconds)
#define DEBOUNCE_TIME 200
// PINs for Pololu controller
#define PIN_STEP 2
#define PIN_DIR 3
// lookup table speed - ticks (interrupts)
const int speed_ticks[] = {-1, 600, 300, 200, 150, 120, 100, 86, 75, 67, 60, 55, 50, 46, 43};
// global variables
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int actual_speed;
int actual_direction;
int ticks;
unsigned long tick_count;
int button;
boolean debounce;
int previous_time;
// custom LCD square symbol for progress bar
byte square_symbol[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
// string constants
char forward_arrow[] = "-->";
char backward_arrow[] = "<--";
void setup() {
// init the timer1, interrupt every 0.1ms
Timer1.initialize(100);
Timer1.attachInterrupt(timerIsr);
// init LCD and custom symbol
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.createChar(0, square_symbol);
// pins direction
pinMode(PIN_STEP, OUTPUT);
pinMode(PIN_DIR, OUTPUT);
// initial values
actual_speed = 0;
actual_direction = FORWARD;
tick_count = 0;
ticks = -1;
debounce = false;
digitalWrite(PIN_DIR, actual_direction);
updateLCD();
}
void loop() {
// check if debounce active
if(debounce) {
button = btnNONE;
if(millis() > previous_time + DEBOUNCE_TIME) debounce = false;
} else button = read_buttons();
// if a button is pressed, start debounce time
if(button != btnNONE) {
previous_time = millis();
debounce = true;
}
// check which button was pressed
switch(button) {
case btnUP:
increase_speed();
break;
case btnDOWN:
decrease_speed();
break;
case btnLEFT:
change_direction(BACKWARD);
break;
case btnRIGHT:
change_direction(FORWARD);
break;
case btnSELECT:
emergency_stop();
break;
}
// finally update the LCD
updateLCD();
}
// increase speed if it's below the max (70)
void increase_speed() {
if(actual_speed < 70) {
actual_speed += 1;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
}
// decrease speed if it's above the min (0)
void decrease_speed() {
if(actual_speed > 0) {
actual_speed -= 1;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
}
// change direction if needed
void change_direction(int new_direction) {
if(actual_direction != new_direction) {
actual_direction = new_direction;
digitalWrite(PIN_DIR, actual_direction);
}
}
// emergency stop: speed 0
void emergency_stop() {
actual_speed = 0;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
// update LCD
void updateLCD() {
// print first line:
// Speed: xxxRPM -> (or <-)
lcd.setCursor(0,0);
lcd.print("SPEED: ");
lcd.print(actual_speed);
lcd.print("RPM ");
lcd.setCursor(13,0);
if(actual_direction == FORWARD) lcd.print(forward_arrow);
else lcd.print(backward_arrow);
// print second line:
// progress bar [##### ]
// 15 speed steps: 0 - 5 - 10 - ... - 70
lcd.setCursor(0,1);
lcd.print("[");
for(int i = 1; i <= 14; i++) {
if(actual_speed > (5 * i) - 1) lcd.write(byte(0));
else lcd.print(" ");
}
lcd.print("]");
}
// timer1 interrupt function
void timerIsr() {
if(actual_speed == 0) return;
tick_count++;
if(tick_count == ticks) {
// make a step
digitalWrite(PIN_STEP, HIGH);
digitalWrite(PIN_STEP, LOW);
tick_count = 0;
}
}
// read buttons connected to a single analog pin
int read_buttons() {
int adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
}
Co se týče programu, tak tady je..... jen jsem upravil podle rad typ hodnoty u tick_count, změnil jsem původní hodnotu int tick_count; na unsigned long tick_count; :
#include <LiquidCrystal.h>
#include <TimerOne.h>
// buttons code
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// directions
#define FORWARD HIGH
#define BACKWARD LOW
// debounce time (milliseconds)
#define DEBOUNCE_TIME 200
// PINs for Pololu controller
#define PIN_STEP 2
#define PIN_DIR 3
// lookup table speed - ticks (interrupts)
const int speed_ticks[] = {-1, 600, 300, 200, 150, 120, 100, 86, 75, 67, 60, 55, 50, 46, 43};
// global variables
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int actual_speed;
int actual_direction;
int ticks;
unsigned long tick_count;
int button;
boolean debounce;
int previous_time;
// custom LCD square symbol for progress bar
byte square_symbol[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
// string constants
char forward_arrow[] = "-->";
char backward_arrow[] = "<--";
void setup() {
// init the timer1, interrupt every 0.1ms
Timer1.initialize(100);
Timer1.attachInterrupt(timerIsr);
// init LCD and custom symbol
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.createChar(0, square_symbol);
// pins direction
pinMode(PIN_STEP, OUTPUT);
pinMode(PIN_DIR, OUTPUT);
// initial values
actual_speed = 0;
actual_direction = FORWARD;
tick_count = 0;
ticks = -1;
debounce = false;
digitalWrite(PIN_DIR, actual_direction);
updateLCD();
}
void loop() {
// check if debounce active
if(debounce) {
button = btnNONE;
if(millis() > previous_time + DEBOUNCE_TIME) debounce = false;
} else button = read_buttons();
// if a button is pressed, start debounce time
if(button != btnNONE) {
previous_time = millis();
debounce = true;
}
// check which button was pressed
switch(button) {
case btnUP:
increase_speed();
break;
case btnDOWN:
decrease_speed();
break;
case btnLEFT:
change_direction(BACKWARD);
break;
case btnRIGHT:
change_direction(FORWARD);
break;
case btnSELECT:
emergency_stop();
break;
}
// finally update the LCD
updateLCD();
}
// increase speed if it's below the max (70)
void increase_speed() {
if(actual_speed < 70) {
actual_speed += 1;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
}
// decrease speed if it's above the min (0)
void decrease_speed() {
if(actual_speed > 0) {
actual_speed -= 1;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
}
// change direction if needed
void change_direction(int new_direction) {
if(actual_direction != new_direction) {
actual_direction = new_direction;
digitalWrite(PIN_DIR, actual_direction);
}
}
// emergency stop: speed 0
void emergency_stop() {
actual_speed = 0;
tick_count = 0;
ticks = speed_ticks[actual_speed / 5];
}
// update LCD
void updateLCD() {
// print first line:
// Speed: xxxRPM -> (or <-)
lcd.setCursor(0,0);
lcd.print("SPEED: ");
lcd.print(actual_speed);
lcd.print("RPM ");
lcd.setCursor(13,0);
if(actual_direction == FORWARD) lcd.print(forward_arrow);
else lcd.print(backward_arrow);
// print second line:
// progress bar [##### ]
// 15 speed steps: 0 - 5 - 10 - ... - 70
lcd.setCursor(0,1);
lcd.print("[");
for(int i = 1; i <= 14; i++) {
if(actual_speed > (5 * i) - 1) lcd.write(byte(0));
else lcd.print(" ");
}
lcd.print("]");
}
// timer1 interrupt function
void timerIsr() {
if(actual_speed == 0) return;
tick_count++;
if(tick_count == ticks) {
// make a step
digitalWrite(PIN_STEP, HIGH);
digitalWrite(PIN_STEP, LOW);
tick_count = 0;
}
}
// read buttons connected to a single analog pin
int read_buttons() {
int adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
}
-
Thomeeque
- Příspěvky: 9649
- Registrován: 30. 1. 2012, 10:20
- Bydliště: Mimo ČR
Zedituj ten post ještě, dej ten program do tagu Code..
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
-
Pidrman
- Příspěvky: 53
- Registrován: 19. 1. 2015, 6:24
Přípona není povolena.
Jak to mam tady sem vložit ?
Jak to mam tady sem vložit ?
-
Pidrman
- Příspěvky: 53
- Registrován: 19. 1. 2015, 6:24
Tady je original program
https://github.com/lucadentella/A4988-a ... Dir.ino#L1" onclick="window.open(this.href);return false;
https://github.com/lucadentella/A4988-a ... Dir.ino#L1" onclick="window.open(this.href);return false;
-
Thomeeque
- Příspěvky: 9649
- Registrován: 30. 1. 2012, 10:20
- Bydliště: Mimo ČR
Nešlo jen o lepší čitelnost, CODE tag má i omezenou výšku a člověk tak nemusí skrolovat přes tři obrazovky, aby se doskroloval k dalšímu postu (zkus to, ještě to možná stihneš, možnost editace odeslaného postu je časově omezená).
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino