CDK 400-CAD/CAM

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

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

Мнение от 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
Мнения: 1188
Регистриран: ср сеп 14, 2011 21:50
Репутация: 274
Местоположение: София
Контакти:

Re: CDK 400-CAD/CAM

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

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

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

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
Мнения: 155
Регистриран: вт дек 27, 2011 18:51
Репутация: 315
Контакти:

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

Мнение от 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
Мнения: 69
Регистриран: ср май 15, 2019 09:40
Репутация: 25
Местоположение: София

Re: CDK 400-CAD/CAM

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

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

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

Re: CDK 400-CAD/CAM

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

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

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