Программирование шаговых двигателей
- Войдите на сайт для отправки комментариев
Чт, 05/06/2014 - 20:38
Всем привет. Сразу говорю:"Я нуб". Вопрос мой таков. Подскажите библиотеки для написания кода для ШД кроме той что на сайте: "Stepper". Есть может быть какие нибудь уроки по этому делу. И второе связано с G-code. Есть ли уроки или что нибудь подобное по программированию прошивки, чтобы G-Code посылать на Ardunio?
AccelStepper - в ней есть ещё ускорение и замедление
AccelStepper - в ней есть ещё ускорение и замедление
поищиет мои сообщения
я уж столько здесь кода безплатно рабочего навыкладывал
спрашивайте помогу
а вот AccelStepper отстой его можно пользовать только с одним мотором
самая веселуха когда будет второй
для настольных станков ускорение и замедление не нужно
вот когда покажите мне станки в железе где это нужно поговорим
Да, оказывается все только станки и ваяют. МНЕ НРАВИТСЯ...
И ускорения мне нужны.
Топикстартер сам решит что ему нужно
Да, оказывается все только станки и ваяют. МНЕ НРАВИТСЯ...
И ускорения мне нужны.
Топикстартер сам решит что ему нужно
раскажите
интересно
ну вот мы только начали битву на пояльниках в поисках истины
а автор сгинул
что хоть делать будем?
если звездолет для полета на альфа-центавру я присоединяюсь :)
В подобной полемике участвовать не хочу. Ваяю фото-видео.
..фото-видео.
так две скорости
быстрый прогон
и точная юстировка
все как в станках
холостой ход
рабочий ход
короче многа букАв не осилю
повторяю какой-нибудь код на паре дешевый и мощных H-мостов типа L298 и мощных движках типа NEMA14 17 23
упрощай нехачу
//art100 20140218 for laserscanner - USB - Arduino - liserline and L298 - Stepper Motor(1.8 gradus=1 step) // S ascii 83 Start scanning T ascii 84 sTop scanning 20140423 #include <Stepper.h> //for stepper chip L298 //const for myStepper library first const int stepsmotor1 = 200; // *1.8gradus/step = 360 gradus for stepper chip L298 const int stepsmotor2 = 200; // *1.8gradus/step = 360 gradus for stepper chip L298 Stepper myStepper1(stepsmotor1, 4,5,6,7); // -L298-motor Stepper myStepper2(stepsmotor2, 8,9,10,11); // -L298-motor //pins //serial pin 0 //serial pin 1 //int led2 = 2; //laser green test int led3 = 3; //laser red work //int led11 =11; // test //int led12 =12; // test on shield //int led13 =13; // test led on board always int but0 =A0; // no solder int but1 =A1; // button motor1 up -^-gnd int but2 =A2; // button motor1 down -^-gnd int but3 =A3; // button motor2 up -^-gnd int but4 =A4; // button motor2 down -^-gnd int but5 =A5; // button start on shield //type int temp00=1; int temp01=1; int temp02=1; int temp03=1; int temp04=1; int temp05=1; long step1Laser = 200; //long step1Laser = 200; //400step=0.9gradusa/step 200step =1.8gradusa/step 100step=3.6gradusa/step long step1Table = 200; //400step=0.9gradusa/step 200step =1.8gradusa/step 100step=3.6gradusa/step int commandusb = 0; // void setup() { Serial.begin(9600); // open COM Port // pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); pinMode(but0,INPUT_PULLUP); pinMode(but1,INPUT_PULLUP); pinMode(but2,INPUT_PULLUP); pinMode(but3,INPUT_PULLUP); pinMode(but4,INPUT_PULLUP); pinMode(but5,INPUT_PULLUP); // pinMode(led12, OUTPUT); // pinMode(led13, OUTPUT); myStepper1.setSpeed(50); // 60 rpm // myStepper1.setSpeed(60); // 60 rpm myStepper2.setSpeed(60); // 60 rpm digitalWrite(led3, HIGH); //laser to work befor start } //==================================================================== void loop() { commandusb=0; temp00=1;temp01=1;temp02=1;temp03=1;temp04=1;temp05=1;// temp01=digitalRead(but1);temp02=digitalRead(but2);temp03=digitalRead(but3);temp04=digitalRead(but4);temp05=digitalRead(but5);temp00=digitalRead(but0); // if(temp01==0 || temp02==0 || temp03==0 || temp04==0){// || temp05==0){//temp00==0 || // digitalWrite(led2, HIGH);delay(1);digitalWrite(led2, LOW); //green // digitalWrite(led3, HIGH);delay(1);digitalWrite(led3, LOW); //red // digitalWrite(led12, HIGH);delay(1);digitalWrite(led12, LOW);//shield red // digitalWrite(led13, HIGH);delay(1);digitalWrite(led13, LOW);//shield red // Serial.print("button press:"); Serial.print(temp00);Serial.print(temp01);Serial.print(temp02);Serial.print(temp03);Serial.print(temp04);Serial.print(temp05); // Serial.println(";"); // } //test // //for stepper chip L298---------------------------------- // if(temp01==0){ myStepper1.step(+1); Serial.println("temp01==0 button press myStepper1.step(+1)" ); digitalWrite(led13, HIGH);delay(1);digitalWrite(led13, LOW);}//shield red } //for stepper chip L298 // if(temp02==0){ myStepper1.step(-1); Serial.println("temp02==0 button press myStepper1.step(-1)" ); digitalWrite(led13, HIGH);delay(1);digitalWrite(led13, LOW);}//shield red } //for stepper chip L298 // if(temp03==0){ myStepper2.step(+1); Serial.println("temp03==0 button press myStepper2.step(+1)" ); digitalWrite(led13, HIGH);delay(1);digitalWrite(led13, LOW);}//shield red } //for stepper chip L298 // if(temp04==0){ myStepper2.step(-1); Serial.println("temp04==0 button press myStepper3.step(-1)" ); digitalWrite(led13, HIGH);delay(1);digitalWrite(led13, LOW);}//shield red } //for stepper chip L298 // //for stepper chip L298---------------------------------- //for stepper chip L298---------------------------------- if(temp01==0){ myStepper1.step(+1); Serial.println("table+" ); digitalWrite(led3, LOW);delay(1);digitalWrite(led3, HIGH);}//shield red } //for stepper chip L298 if(temp02==0){ myStepper1.step(-1); Serial.println("table-" ); digitalWrite(led3, LOW);delay(1);digitalWrite(led3, HIGH);}//shield red } //for stepper chip L298 if(temp03==0){ myStepper2.step(+1); Serial.println("laser+" ); digitalWrite(led3, LOW);delay(1);digitalWrite(led3, HIGH);}//shield red } //for stepper chip L298 if(temp04==0){ myStepper2.step(-1); Serial.println("laser-" ); digitalWrite(led3, LOW);delay(1);digitalWrite(led3, HIGH);}//shield red } //for stepper chip L298 //for stepper chip L298---------------------------------- //motor table motor laser ---------------------------------------------------------------- int n=0; int m=0; int o=0; if (Serial.available() > 0) { commandusb = Serial.read(); if (commandusb==76 ) {digitalWrite(led3, HIGH);} // Laser on if (commandusb==108) {digitalWrite(led3, LOW);} // laser off if (commandusb==47 ) {myStepper1.step(+1);} // laser down / if (commandusb==42 ) {myStepper1.step(-1);} // laser up * if (commandusb==45 ) {myStepper2.step(+1);} // laser down + if (commandusb==43 ) {myStepper2.step(-1);} // laser up - if (commandusb==79 ) {myStepper1.step(+200);} // laser up O // Serial.print("commanda usb received: "); Serial.println(commandusb); } if (commandusb==83 || temp05==LOW) { // S || button start // Serial.println("83"); // Start for aplication 3dscanner for (o=0; o<8; o++) { // 360 gradus table // for (o=0; o<stepsmotor1; o++) { // 360 gradus table for (m=0; m<step1Laser/8; m++) { // 200step/8=25step 25step*1.8gradus/step = 45 gradus scanning low digitalWrite(led3, HIGH); //laser on and down myStepper2.step(+1); // delay(100); //for computer tormoz 0,01 sek delay(500); //for computer tormoz 0,01 sek // delay(1000); //for computer tormoz 1 sek } //return on start for (m=0; m<step1Laser/8; m++) { // 200step/8=25step 25step*1.8gradus/step = 45 gradus return digitalWrite(led3, LOW); myStepper2.step(-1); // laser up myStepper1.step(+1); // table 45 gradus } delay(1000); //for computer tormoz 1 5 sek } //table Serial.println("T"); // 84 sTop for application 3dscanner digitalWrite(led3, HIGH); //laser to work befor start } //motor table motor laser ---------------------------------------------------------------- } //========================================== //------------------------------------------ //DEC Char D Ch D Ch D Ch //0 null 32 sp 64 @ 96 ` //1 33 ! 65 A 97 a //2 34 " 66 B 98 b //3 35 # 67 C 99 c //4 36 $ 68 D 100 d //5 37 % 69 E 101 e //6 38 & 70 F 102 f //7 39 ' 71 G 103 g //8 40 ( 72 H 104 h //9 tab 41 ) 73 I 105 i //10 line 42 * 74 J 106 j //11 43 + 75 K 107 k //12 44 , 76 L 108 l //13 retur 45 - 77 M 109 m //14 46 . 78 N 110 n //15 47 / 79 O 111 o //16 48 0 80 P 112 p //17 49 1 81 Q 113 q //18 50 2 82 R 114 r //19 51 3 83 S 115 s //20 52 4 84 T 116 t //21 53 5 85 U 117 u //22 54 6 86 V 118 v //23 55 7 87 W 119 w //24 56 8 88 X 120 x //25 57 9 89 Y 121 y //26 58 : 90 Z 122 z //27 59 ; 91 [ 123 { //28 60 < 92 \ 124 | //29 61 = 93 ] 125 } //30 62 > 94 ^ 126 ~ //31 63 ? 95 _ 127 //----------------------------------------первое что попалось в каталоге
проверил код рабочий
никакой дури все библиотеки стандартные
спрашивайте что-то вспомню в феврале все таки писано
упс тут достаточно извращенная последовательность движения моторами
можно прекрасного КотаБота сделать и поучиться пользованию моторами
можно дешевый motor shield на arduino uno с распаянными L293 с дешевыми биполярными моторами намутить пластилином лазерок на 5 волльт и вперед кота развлекат автоматически
кот будет счастлив
кнопки можно активирорвать
смотрю вроде ускорения нет
смотрю по проводу управление есть раз ASCII шпаргалка есть
дай кода человеку
так две скорости
быстрый прогон
и точная юстировка
все как в станках
холостой ход
рабочий ход
Всё совсем подругому, ни одной строчкой не угадал.
Станочек себе гравёр сделать собираюсь
код
Я снова здесь. Занят был. Я ланирую сделать хотя бы 2ух координатник, чтобы лазером выжигало.
Я снова здесь. Занят был. Я ланирую сделать хотя бы 2ух координатник, чтобы лазером выжигало.
писал не я
приложение под винду искать (оно у меня почему-то не пошло и я выкинул лень было думать)
или сам ya.ru помучаешь
насколько я понял автор команду парой байт передает (мне конкрентный g-код только подходит)
не вникал
но думаю вполне реализуемо
//arduino-DM420A-17HS3404N лазерная гравировка / выжигание //int motorPins[3][2] = {{8,9},{10,11},{12, 13}}; int motorPins[3][2] = {{2,3},{4,5},{6,7}}; int count; int count2[3] = {0,0,0}; int delayTime = 500; int val = 0; int rot=0; int incomingByte = 0; int sign=1; int s_p=40; //Процедура настройки прошивки---------------------------------------------------------------- void setup() { int i; Serial.begin(9600); pinMode(12, OUTPUT); //??? лазер for (i=0; i<3; i++) { for (count=0; count<4; count++) { pinMode(motorPins[i][count], OUTPUT); }//установка режима работы цифровых pin'ов Ардуино } delayTime=2; //задержка между шагами 3 мс (2 мс - время реакции ШД на подачу напряжения) } //Поворот двигателя с номерм sm на один шаг вперёд-------------------------------------------- void moveForward(int sm) { digitalWrite(motorPins[sm][1], HIGH); digitalWrite(motorPins[sm][0], HIGH); digitalWrite(motorPins[sm][0], LOW); } //Поворот двигателя с номерм sm на один шаг назад-------------------------------------------- void moveBackward(int sm) { digitalWrite(motorPins[sm][1], LOW); digitalWrite(motorPins[sm][0], HIGH); digitalWrite(motorPins[sm][0], LOW); } //Одновременный поворот двигателей 0, 1, 2 на x, y, z шагов соответственно-------------------------------------------- void MoveSM(long x, long y, long z) { long c[3], c2[3]; double c1[3], d[3]; long m, i; boolean flg; long ms; long d1, d2, t; c[0] = x; c[1] = y; c[2] = z; if (z<0) s_p=-z; //количество шагов на 1 пиксель m = 1; for(i=0;i<2;i++){ if (m < abs(c[i])) m = abs(c[i]); } for(i=0;i<2;i++){ c1[i] = 0; d[i] = 1.0 * c[i] / m; c2[i] = 0; } flg = false; for(i=0;i<2;i++){ if (abs(c1[i]) < abs(c[i])) flg=true; } t=m; if (z>0) { d1=s_p*z/255; d2=s_p/2-d1/2; d1=d2+d1; } while (flg) { flg=false; for (i=0; i<2; i++) { if (abs(c1[i]) < abs(c[i])) c1[i] += d[i]; if (abs(c1[i]) - abs(c2[i]) >= 0.5) { if (c[i]>0) { c2[i]++; moveForward(i); } else { c2[i]--; moveBackward(i); } } if (abs(c1[i]) < abs(c[i])) flg=true; } if (z>0 && t==d1) digitalWrite(2, HIGH); t--; delay(2); if (z>0 && t==d2) digitalWrite(2, LOW); } } //------------------------------------------------------------------------ //====================================================================================================== void loop() { if (Serial.available() > 0) { //Пришла команда long c[3]={0,0,0}; int i; sign=1; i=0; incomingByte = Serial.read(); while (incomingByte!=';') { //Читаем входящую строку, признак конца строки знак "точка с запятой" if (c[i]==0) { if (incomingByte=='-') sign=-1; } if (incomingByte==',') { c[i]*=sign; sign=1; i++; } else if (incomingByte>='0' && incomingByte<='9') { c[i]=c[i]*10+incomingByte-'0'; } while (Serial.available() == 0) { delay(2); } incomingByte = Serial.read(); } c[i]*=sign; MoveSM(c[0],c[1],c[2]); //Вращаем двигатели на заданное число шагов Serial.println("OK"); //Отправляем компьютеру сообщение "OK", значит можно высылать новую команду } else delay(2); //Если ничего не пришло, ждём 2 миллисекуды. } //======================================================================================================и не стесняйся пиши
удалось не удалсь
удачи
нашел програмку автора
на форум не знаю как залить
спасибо. попробуем.
поверь это самое простое что есть на просторах интернета
дальше уже парсеры g-code требует намного больше кода
дальше когда код парсера уже совсем не лезет в arduino uno резко перепрыгивают на arduino due
конечно никто не отменял прекрасно работающих программ на lpt порт напрямую в драйвера моторов
потом появляется контроллер
потом навешивается драйвера
и пошла судьбинушка по кочкам
обязательно опишись если в железе что-то собирается
у меня mega 2560. Так что насчёт памяти для кода проблем не должно быть