CDK 400-CAD/CAM

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

Управление на мощни стъпкови двигатели

Мнение от christovantceti » пон дек 21, 2020 21:58

Управлението на мощни стъпкови двигатели не се отличава особено от това на маломощните им събратя. Основната разлика тук е нуждата от по-сериозен драйвер и захранване. За целите на моя проект се спрях на двуфазни стъпкови мотори Nema23 - дълга версия https://exallto.com/motori/288-stpkov-m ... ma-23.html. Работният ток на тези двигатели е 4А на намотка и за управлението им избрах стъпкови драйвери DM556, които могат да осигурят спокойно до 5,6А на намоткаhttps://www.banggood.com/5_6A-DC-24-50V ... rkQAvD_BwE .

Захранването е импулсно с напрежение 24V при 20A. Управлението се поема от любимото ни Ардуино Уно, за което написах проста програмка за управление на 2 стъпкови мотора с 4 бутона. Бутоните са микроключета, които запоих на пробна платка с резистори по 10 КилоОма. Свързването стана по следните принципни схеми:
TB6600-stepper-motor-driver-with-Arduino-UNO-wiring-diagram-schematic.jpg
button_schem.png
конфигурация.jpg
DM556 е индустриален драйвер, който може да работи в микростъпков режим до 1/128, като размера на стъпката се определя посредством DIP ключета. Разполага с голям радиатор за охлаждане, който не усетих да се нагрява дори минимално при първите опити. Двигателят от своя страна се нагрява леко, но само ако стои включен, докато е в покой. За отстраняването на този минимален проблем съм предвидил изключване на мотора, когато няма натиснат бутон. Това става с enable входа на драйвера, който командвам софтуерно. При тези зъбно-червячни редуктори не е нужно двигателя да задържа позицията.
Ето как изглежда на живо:

Тук тествам само едната ос, защото не ми остана време да инсталирам и втория мотор.
Първите впечатления са, че монтировката се движи много плавно при 1/16 микростъпка и не се установяват доловими вибрации, нетипични звуци или звукови осцилации от двигателите. Моторите са изключително мощни - невъзможно е да се задържи с пръсти ремъчната шайба. Засега експериментирам с бавни обороти, но по-натам ще модифицирам програмката за бързи и бавни скорости, както и за часово водене с допълнителни бутони. Изглежда, че както повечето детайли по тази монтировка така и моторите са преоразмерени, което ще е в полза на първоначалната ми концепция за електронна редукция (1/128 микростъпка ще е напълно постижима). За генерацията на импулси с такава честота обаче вероятно ще трябва да почакам да пристигне Ардуино Дуе.
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

Потребителски аватар
tonygl
Мнения: 1228
Регистриран: ср сеп 14, 2011 21:50
Репутация: 363
Местоположение: София
Контакти:

Re: CDK 400-CAD/CAM

Мнение от tonygl » съб дек 26, 2020 23:08

"За генерацията на импулси с такава честота обаче вероятно ще трябва да почакам да пристигне Ардуино Дуе."
Ще правиш проектa за контролер на нашия приятел Десо - rDUINOScope li ?
http://www.rduinoscope.tk/

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

Re: CDK 400-CAD/CAM

Мнение от christovantceti » нед дек 27, 2020 12:19

tonygl написа:
съб дек 26, 2020 23:08
"
Ще правиш проектa за контролер на нашия приятел Десо - rDUINOScope li ?
http://www.rduinoscope.tk/
Да, още преди няколко месеца се чухме по този въпрос и той изрази интерес да пробваме неговата система за управление на този телескоп.
В по-далечна перспектива имам амбицията да създадем изцяло българска платформа за астрофотография като това включва проектирането на оптиката (Иван Кръстев), на механиката (моя милост) и изработката и асемблирането на телескопа и монтировката, на които станахте свидетели.
Настоящата стъпка включва управлението на монтировката, за което също има прекрасно българско решение. Тук отварям една скоба: едно от нещата, които ми остана да проуча е програмирането на контролери. Разбира се нямам нито времето нито знанията да разработя толкова комплицирана програма, но все пак едни най-основни познания по програмиране никак не са излишни. С програмката, която написах много успешно тествам електрониката и механиката. Вероятно обаче първо ще опитам друга любителска програма - https://onstep.groups.io/g/main/wiki/7150 ,тъй като вече разполагам с Ардуино Мега. Ако всичко това работи и покаже приемливи резултати вече може да се мисли и за последната стъпка, а тя е обработката на получените снимки, за което също има българска програма.
Всичко това не е някаква псевдопатриотична амбиция, но все пак ми се струва забавно в една толкова малка страна като нашата да се разработи и направи една относително комплицирана с-ма и то изцяло на любителски начала.
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

Управление на мощни стъпкови двигатели- Софтуер

Мнение от christovantceti » съб яну 16, 2021 22:50

Както вече стана въпрос в крайна сметка управлението на телескопа ще стане с някое от готовите любителски програмни решения. Все пак липсата ми на основни познания в тази област е доста дразнещ факт и затова въоръжен с няколко ръководства за Ардуино реших да се образовам и седнах на свой ред да пиша програма за ръчен контрол на телескопа.

Изискванията към тази програма са както следва:
1. Управление на два стъпкови мотора и в двете посоки с четири бутона.
2. Двата мотора трябва да могат да работят както по отделно така и едновременно.
3. В покой драйверите трябва да са изключени, за да се намали консумацията и да се избегне греенето на моторите.
4. Трябва да се реши проблема с bouncing ефекта на механичните бутони.

Разбира се първата мисъл беше да намеря някоя готова програмка, която да използвам или адаптирам за тези цели. За мое учудване търсенето ми по мрежата не се увенча с успех и не намерих нищо, което да изпълни зададените критерии, поради което се наложи да започна от начало. Оказа се, че наглед простата програмка всъщност става доста дълъг код ако се започне от нулата. Първоначалните неуспехи бързо ме отегчиха и смених подхода като вместо да откривам колелото и топлата вода за пореден път реших да приложа готови библиотеки в моята програма. За управлението на стъпковите мотори се спрях на библиотеката Accelsteper http://www.airspayce.com/mikem/arduino/AccelStepper/, която решава лесно проблема със синхронното управление на няколко мотора. Използвайки само най-основните функции на библиотеката бързо реших проблема с управлението на моторите с помощта на бутони. След първоначалната радост от успеха обаче забелязах изключително дразнещ страничен ефект характерен за механичните превключватели т.нар. "bouncing" ефект. Той се дължи на искренето между контактите при превключване на бутона, което обърква процесора, тъй като го приема не за единично, а за многократно превключване на състоянието.
Switch_Debounce_2.jpg

Това се изразява в неприятно подритване на двигателите, когато се натискат бутоните.
Тук е мястото да спомена, че за този проблем има както софтуерно така и хардуерно решение. Хардуерното решение може да бъде един прост RC филтър, тригер на Шмид и др. По-елегантния debouncing обаче е софтуерния, тъй като не изисква усложняване на схемата. Това първоначално се оказа сложна задача за мен поради факта, че е нужно да се осъществява едновременно на 4 бутона. Достъпните примерни програми ми изглеждаха много дълги и не особено понятни. Поради тази причина се спрях на друга библиотека ezButton https://arduinogetstarted.com/library/a ... ll-example, чрез която изключително просто и бързо реших този досаден проблем. Функциите ѝ са неблокиращи по характер и затова добре се разбраха с тези на Acclestepper. Крайният резултат се вижда по-долу:




P.S. Тази програмка е универсална и може лесно да се модифицира, както и да се използува за различни цели, поради което я прилагам за свободно ползуване.

Код: Избери всички

#include <AccelStepper.h>//Необходими библиотеки
#include <MultiStepper.h>
#include <ezButton.h>

ezButton button1(13);  // създаване на  4 бр. (ezButton обекти) бутони към съответните пинове
ezButton button2(11);
ezButton button3(10);  
ezButton button4(12);
//пинове за посока и стъпка
//за stepper1
const int dirPin1 =  3;   //пин за посока на въртене   
const int stepPin1 = 2; //пин за стъпка
const int enablepin1= 4 ;//пин за вкл/изкл.на драйвера
//за stepper2
const int dirPin2 =  6;   //пин за посока на въртене   
const int stepPin2 =  5; //пин за стъпка
const int enablepin2= 7 ;//пин за вкл/изкл.на драйвера

AccelStepper stepper1(1, stepPin1, dirPin1);//създаване на обекти на 2бр. стъпкови мотори
AccelStepper stepper2(1, stepPin2, dirPin2);

void setup() {
  button1.setDebounceTime(50);//време за debounce на бутоните
  button2.setDebounceTime(50);
  button3.setDebounceTime(50);
  button4.setDebounceTime(50);
  
 stepper1.setMaxSpeed(10000);
 stepper2.setMaxSpeed(10000);
  
  pinMode (enablepin1, OUTPUT);//пин за вкл/изкл на драйвера
  digitalWrite (enablepin1, HIGH);//изключва драйвера
  
  pinMode (enablepin2, OUTPUT);//пин за вкл/изкл на драйвера
  digitalWrite (enablepin2, HIGH);//изключва драйвера
}

void loop() {
  button1.loop(); // опреснява статуса на бутоните
  button2.loop();
  button3.loop(); 
  button4.loop();
  int buttonState1 = button1.getState(); //дефиниране на статуса на бутоните
  int buttonState2 = button2.getState();
  int buttonState3 = button3.getState();
  int buttonState4 = button4.getState();
  
  //проверка статуса на бутоните за вкл/изкл. на драйвера
  //STEPPER1
  if (buttonState1 == LOW||buttonState2 == LOW){ //някой от двата бутона е натиснат 
    digitalWrite (enablepin1, LOW); // включва драйвера
  }
  if (buttonState1 == HIGH&&buttonState2 == HIGH){//ако и двата бутона не са натиснати
    digitalWrite (enablepin1, HIGH); // изключва драйвера
    button1.loop();
    button2.loop();}
    
  if (buttonState1 == HIGH&&buttonState2==LOW) 
  {
        stepper1.setSpeed(3000); 
        stepper1.runSpeed();
        button1.loop();
         button2.loop();
   } 
 if (buttonState1 == LOW&&buttonState2==HIGH) {
   stepper1.setSpeed(-3000);
    stepper1.runSpeed();
    button1.loop();
     button2.loop();
  }  
  
      //STEPPER2
    //проверка статуса на бутоните за вкл/изкл. на драйвера
if (buttonState3 == LOW||buttonState4 == LOW){ //някой от двата бутона е натиснат 
    digitalWrite (enablepin2, LOW); // включва драйвера
  }
  if (buttonState3 == HIGH&&buttonState4 == HIGH){//и двата бутона не са натиснати
    digitalWrite (enablepin2, HIGH); // изключва драйвера
     } 
  //ако единият бутон е натиснат се указва посоката и скоростта на stepper2
 // проверка на състоянието на бутоните HIGH=изключен драйвер,LOW=включен
       
      if (buttonState3 == HIGH&&buttonState4 == LOW) {
        stepper2.setSpeed(3000); 
        stepper2.runSpeed();
        button3.loop();
        button4.loop();
      
 }  if (buttonState3 == LOW&&buttonState4 == HIGH) {
   stepper2.setSpeed(-3000);
    stepper2.runSpeed();
    button3.loop();
    button4.loop();
  }  
     }
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

ranev
Мнения: 107
Регистриран: ср май 15, 2019 09:40
Репутация: 70
Местоположение: София

Re: CDK 400-CAD/CAM

Мнение от ranev » пет яну 22, 2021 19:30

Очарован съм от Проекта. Следя го с интерес и бих бил радостен да дам и аз някоя идея.
Преди време си сглобих GoTo на базата на Arduino Mega. Конфигурацията включва блутут, двускоростно ръчно управление и комуникация с ASCOM. Използват се модулни драйвери за стъпкови мотори, които (драйвери) се командват със step, dir, М0-2(кратност на стъпката) и, мисля Enable. Тези, които имате спокойно могат да се използват.
Далеч е от елегантния rDUINOscope, но е прост, лесен за оживяване и (учудващо) работи прилично.
Ако ви интересува, пишете, че в момента ми е трудно да търся линка за проекта.
Поздрави

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

Re: CDK 400-CAD/CAM

Мнение от christovantceti » нед яну 24, 2021 11:59

Следя развитието на любителските разработки за управление на телескопи от доста време. Една от първите, на която попаднах навремето беше на Mel Bartels (още от зората на достъпния интернет.....може би от преди 20г.). Това беше комплициран софтуер, който ако си спомням добре работеше под DOS. Използваше драйверните схеми ULN 2003 за командване на стъпковите мотори. Контролер беше самият персонален компютър чрез паралелния порт. Тази схема я направихме тогава с баща ми, но никога не я изпробвах на практика https://www.bbastrodesigns.com/StepperSystem.html.
Революция в разработките на тези системи настъпи в последните 5-6 г. благодарение на появата на Ардуино и свободният достъп към програмния код, библиотеки и възможността всяка следваща разработка да ползува опита на предходните. Друга причина за това бързо развитие е изключително ниската цена на нужните електронни компоненти. Всичко това прави рационално създаването на любителско управление на фона на цените на готовите комерсиални решения.
Програмирането на микроконтролери според мен е изключително полезно оръжие в арсенала на телескопостроителя и то не само от гледна точка на управлението на телескопа, а за много други аспекти на това хоби.
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

Ръчно управление с джойстик

Мнение от christovantceti » чет мар 25, 2021 14:57

Друга възможност за по-удобно ръчно управление на стъпковите мотори е с джойстик. Поставих си за цел написването на програмка, която да удовлетвори следните основни изисквания:

1. Да осигури плавно регулиране на скоростта на моторите
2. Да позволи едновременна работа и на двата мотора
3. Драйверите да са изключени при неутрално положение на джойстика

Към вече описаната конфигурация добавих джойстик-модул от този тип:
JoyStick-DESKTOP-JC9S5KE-1.jpg
Свързването към Ардуино стана по следната схема:
Joystick-cir1-1.jpg
Самата програмка е опростена максимално и отново ползува познатата библиотека за стъпкови мотори.

Код: Избери всички

//Необходими библиотеки
#include <AccelStepper.h>
#include <MultiStepper.h>

//Свързване на стъпковите мотори
//Степер 1      
const int stepPin1 = 2;//пин за стъпка
const int dirPin1 =  3;//пин за посока
const int enablepin1= 4 ;//пин за вкл/изкл.на драйвера
//Степер 2
const int dirPin2 =  6;   //пин за посока на въртене   
const int stepPin2 =  5; //пин за стъпка
const int enablepin2= 7 ;//пин за вкл/изкл.на драйвера

//създаване на обекти на 2бр. стъпкови мотори
AccelStepper stepper1(1, stepPin1, dirPin1);
AccelStepper stepper2(1, stepPin2, dirPin2);
//Джойстик
int VRx = A0;
int VRy = A1;
int xPosition = 0;
int yPosition = 0;
int mapX = 0;
int mapY = 0;
int spd=10000;//скорост на въртене на моторите

void setup() {
  
  Serial.begin(9600);
  //Драйвери 
  pinMode (enablepin1, OUTPUT);//пин за вкл/изкл на драйвера
  digitalWrite (enablepin1, HIGH);//изключва драйвера
  pinMode (enablepin2, OUTPUT);//пин за вкл/изкл на драйвера
  digitalWrite (enablepin2, HIGH);//изключва драйвера
//Джойстик
  pinMode(VRx, INPUT);
  pinMode(VRy, INPUT);
 
 // Стъпкови мотори
 stepper1.setMaxSpeed(10000);
 stepper2.setMaxSpeed(10000);
  
}

void loop() {
 //дефиниране на максимални и минимални стойности
  xPosition = analogRead(VRx);
  yPosition = analogRead(VRy);
  mapX = map(xPosition, 0, 1023, -spd, spd);
  mapY = map(yPosition, 0, 1023, -spd, spd);
  
  //Serial.print("X: ");
  //Serial.print(mapX);
  //Serial.print(" | Y: ");
  //Serial.print(mapY);
  
 //Контрол на драйверите
if ((mapX<300)&&(mapX>-300)){ //неутрално положение на джостика по X
    digitalWrite (enablepin1, HIGH); // изключва драйвера
  }
  else{
    digitalWrite (enablepin1, LOW); //  включва драйвера
  }
  if ((mapY<300)&&(mapY>-300)){ //неутрално положение на джостика по Y
    digitalWrite (enablepin2, HIGH); //  изключва драйвера
  }
  else{
    digitalWrite (enablepin2, LOW); //  включва драйвера
  }
  
  //Управление на двигателите
 if (mapX>=300){
  stepper1.setSpeed(mapX); 
   stepper1.runSpeed();     
 }
  else if (mapX<-300){
  stepper1.setSpeed(mapX); 
        stepper1.runSpeed();
 }
 if (mapY>=300){
  stepper2.setSpeed(mapY); 
   stepper2.runSpeed();     
 }
  else if (mapY<-300){
  stepper2.setSpeed(mapY); 
        stepper2.runSpeed();
         }  }
Тук може да се види крайният резултат:
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

CNC рутер

Мнение от christovantceti » вт май 18, 2021 12:51

С напредването на настоящия проект все повече се сблъсквам с нуждата от точна изработка на малки детайли за второстепенните системи на телескопа. От доста време разглеждам развитието на настолните CNC рутери и ползата от тях за различни хобита в това число и телескопостроенето. Всичко това ме кара периодично да се връщам на идеята за собствен рутер (стр.1) хвърляйки се от един дизайн на друг. В крайна сметка се спрях на конструкция с фиксиран портал. Причината за това е, че тази конструкция се отличава с най-голяма степен на ригидност, което разширява възможностите на машината значително що касае обработката на меки метали каквито са алуминиевите сплави.

И така основните изисквания към този рутер са:
1. Възможност за фрезоване на меки метали и сплави като алуминий и месинг
2. Размер на обработваната площ от поне 600Х500мм
3. Ниска цена
4. Мобилност

CNC фрезите с фиксиран портал изпитват и някои недостатъци. Основният е значително по-малката обработваема площ в сравнение с тези с мобилен портал при еднакви габарити. Все пак чисто в конструктивен аспект фиксираният портал дава много по-голяма устойчивост на вибрации и деформации, а също така може да бъде проектиран доста по-солидно без притеснения за крайното му тегло. Поради тази причина се спрях на стоманата като материал за изработване на носещата конструкция. За тази цел ще използвам правоъгълни стоманени профили с дебелина на стената 3-4мм. Те са значително по-евтини и по-здрави от по-широко използваните конструктивни алуминиеви профили в любителските разработки. За разлика от екструдираните алуминиеви профили, стоманените се отличават с ниска точност на повърхността. Това ще наложи допълнителна обработка на техните повърхности като фрезоване и шлайфане по начин позволяващ точното монтиране на линейните водещи и винтово-сачмените двойки.
Машината ще бъде три осева като задвижването ще стане със същите Nema 23, които въртят телескопа. Към Z-оста ще бъде фиксиран високо оборотен двигател - 20 000об/мин с мощност 1,5 kW и водно охлаждане.
Вече разполагам с всички части за механиката и електрониката и остава да се направи носещата структура, която ще бъде нещо от този сорт:
X+Z +Y оси 1.JPG
X+Z +Y оси 2.JPG
X+Z +Y оси 3.JPG
X+Z +Y оси 4.JPG
Все още не съм решил как да стане куплирането на стъпковите мотори към X и Y осите, тъй като има различни варианти и засега съм ги оставил да висят волно в пространството. Носещата детайла плоча ще бъде от дуралуминий с дебелина 15мм, поради съображения за по-ниско тегло. Z -оста също ще бъде изработена от плоскости от дуралуминий, но с дебелина 25мм, защото тук ригидността и устойчивостта на деформации е критична.
Габаритите на машината са 1055мм дължина по 415мм ширина като порталът ще бъде с височина 550мм и ширина 815мм. Предполагаемото тегло според Solidworks е около 95-100 кг. Предвиждам възможност порталът да се разглобява и отделя от хоризонталната част на рутера. Това от една страна ще улесни транспорта на цялото съоръжение, а от друга ще даде и възможност за реглаж.
Остават още някои въпроси за уточняване, но общо взето това е основната идея.
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

Re: CDK 400-CAD/CAM CNC машина

Мнение от christovantceti » вт юни 15, 2021 22:06

Машината очаквано претърпя известна промяна в дизайна си. Освен фиксацията на портала към основата се доуточниха и някои други подробности като напр. фиксацията на стъпковите мотори.
X+Z +Y оси VER 2.JPG
фиксация на моторите.JPG

Оказва се, че поръчката и намирането на тези стоманени профили не е толкова лесно колкото си мислех първоначално. Повечето фирми не предлагат профили под 6м дължина, което се оказва все по-голям проблем. Ето защо нищо не е окончателно и всичко зависи от това какъв материал ще успея да намеря.
Прикачени файлове
фиксация на моторите2.JPG
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

christovantceti
Мнения: 160
Регистриран: вт дек 27, 2011 18:51
Репутация: 327
Контакти:

CNC машина- размисли по конструкцията

Мнение от christovantceti » ср юни 16, 2021 20:59

За съжаление ударих на камък и с последната фирма в опита си да поръчам нужните дължини от различните профили. Това ме накара да помисля върху идеята дали не е възможно цялата конструкция да се реализира само с един вид профил, така че общата дължина да е близка до заветните 6м. За целта избрах най-големия профил предвиден първоначално за портала, а именно 200х100х4мм. Ето как би изглеждал този вариант:
X+Z +Y оси VER 3-2.JPG
X+Z +Y оси VER 3-1.JPG
Общата дължина на нужния профил излиза 4,6м, т.е. при поръчка на 6м ще остане 1,4м материал, което не е голяма загуба. В резултат ще има леко увеличеното тегло на конструкцията (около 10-на кг) и съответно цена (20-30 лв). Предимство обаче е повишената стабилност и ригидност. Като цяло целият дизайн се опрости доста и проблемът с поръчката на материала изглежда преодолян.
Никога не се страхувай да правиш това, което не умееш.Помни, че ноевият ковчег е построен от любители.Професионалистите са построили ,,Титаник"!

Отговори
  • Подобни теми
    Отговори
    Преглеждания
    Последно мнение