Страница 5 от 5

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

Публикувано: пон дек 21, 2020 21:58
от christovantceti
Управлението на мощни стъпкови двигатели не се отличава особено от това на маломощните им събратя. Основната разлика тук е нуждата от по-сериозен драйвер и захранване. За целите на моя проект се спрях на двуфазни стъпкови мотори 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 микростъпка ще е напълно постижима). За генерацията на импулси с такава честота обаче вероятно ще трябва да почакам да пристигне Ардуино Дуе.

Re: CDK 400-CAD/CAM

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

Re: CDK 400-CAD/CAM

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

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

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

Изискванията към тази програма са както следва:
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();
  }  
     }

Re: CDK 400-CAD/CAM

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

Re: CDK 400-CAD/CAM

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