Умные люди доскажите правильно ли собираю станок...

sergkr1983
Offline
Зарегистрирован: 09.12.2015

В общем собираю ЧПУ станочек. Но так как в электронике не так силён решил узнать у умных людей правильно ли я делаю. Схема такая:

Вопрос вот в чём. Правильно ли я вообще всё делаю? Нужна ли разводка на M1 (это обычный куллер) после ULN2003? 

P.S. Блок питания от компьютера. Для его включения использую реле (K1) которое просто замыкает контакты включения (сейчас на вскидку - зелёный и коричневый, но не факт).

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Совсем забыл про сам двигатель для фрезы. Вот новая схема и новый вопрос: нкжна ли обвязка?

inspiritus
Offline
Зарегистрирован: 17.12.2012

не разгляжу я... у Вас реле прямо с ноги заведено ?

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Да. Оно замыкает зелёный и чёрный провода от БП для его включения. Нужна ли на нём "обвязка"?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Не знаю, что Вы подразумеваете под обвязкон, но напрямую на выход мк реле сажать нельзя! 

Обязательно умощните, например той же ULN и не забудьте в обратку реле поставить диод, аналогично тому, как подключен мотор справа внизу.

Или например вот еще как можно подключать реле

и еще ... откуда у реле на исполнительной катушке третий провод?

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Реле вот такое:

Вот и три провода.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Это не реле это сборка с реле.

как нарисовал, так и подключай. Только GND и VCC бери не с процессора а с бп , поближе к клеммам. И поставь параллельно питанию на сборке с реле электролит на 47-100 мкф и керамику 0.1 мкф

sergkr1983
Offline
Зарегистрирован: 09.12.2015

В том то и дело, что не могу брать с блока питания, т.к. это реле и включает блок питания (дабы он не постоянно включенным был).

inspiritus
Offline
Зарегистрирован: 17.12.2012

А от чего же питается процессор пока бп выключен?

там обозначения не видны, но похоже, что нижний провод от релейной сборки заведен не на землю.

кстати на верхний моторчик тоже надо диод навесить.

а моторы нереверсивные?

и еще... нижняя земля , которая от эмиттера биполярного транзистора похоже связана с минусом питания сквозь плату ардуины . Это очень плохо. Все силовые ( моторов , лазера и реле) земли и питания должны быть разведены лучами достаточного сечения прямо от бп. Сечение подбирается в зависимости  от тока нагрузки.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Прошу прощния, что долго не отвечал. Работа. 

Сама Ардуина питается от USB.

От релейной сборки один провод на землю, один на +5, один на пид ардуино.

А вот с верхним моторчиком пролетел. Сначала (для проверки) стоял обычный куллер и работало как надо (ШИМ). Поставил вот такой https://ru.aliexpress.com/item/DC-12V-Electric-Motor-Smaill-PCB-Drill-Press-Drilling-Compact-Set-10PC-0-5-3mm-Twist/32418721887.html?spm=a2g0s.9042311.0.0.jXZGtX Один раз включил и всё! Теперь вообще ШИМа нет. Просто включен всё время мосфет. Вот сюда (как я понимаю) какую-то разводку доделать надо. А что именно?

Сейчас тот мотор реверсивный, но как сделать реверс на IRF520 Mosfet не знаю.

А вот с землёй не совсем понял. Разве не надо их объединить (ардуино и блок питания)?

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Сейчас подключение двигателя выглядит так:

sergkr1983
Offline
Зарегистрирован: 09.12.2015

И если диод навешивать на него - то куда?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

бабахнет, твой диод !!!

sergkr1983
Offline
Зарегистрирован: 09.12.2015

А что тогда нужно? Я именно из-за этого сюда и обратился.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Перевернуть его нужно, чтоб не бабахнул!

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Т.е. вот такая схема правильная? Или нужно ещё чего добавить, чтоб опять мосфет не спалить?

И подскажите какой диод взять...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sergkr1983, поскольку у вас будет два разных БП, то необходимо соединить их "земли" до того момента, как будете втыкать USB в ардуину. Иначе может сдохнуть. Диод любой , но помощнее.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Когда я подключаю ардуино в USB блок питания не включен. Ардуинка его включает. 

P.S. Если я правильно понимаю из схемы, то через сборку мосфета земли объединяются.

PSS. Сборка такая:

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sergkr1983, да без разницы кто кого включает. Смысл в том, что б земли разных БП не объединялись через плату контроллера. Их нужно соединять отдельным толстым проводом. Иначе можете получить что-то типа такого.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Т.е. нужно сделать так?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sergkr1983, нет не так. Вы не нарисуете на данной схеме нужное соединение, т.к. не нарисован второй источник питания, от которого запитана плата.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Плата запитана от USB.

Squb
Offline
Зарегистрирован: 12.09.2016

Поделитесь потом результатом, только положительным)))

Успехов Вам!

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Сейчас на работе завал. Да и шаговики пока не приехали. Через неделю начну дальше делать, а пока сделал подключение к компьютеру (условное) и запуск самой фрезы (через ШИМ). Строку разбираю (с компьютера). Всё работает. Вот что пока получилось:

Код программы:



#include <string.h>

int brightness = 0;     // яркость светодиода
int fadeAmount = 1;     // шаг изменения яркости

int Relay = 23;  //Реле на включение блока питания
int Mosfet = 7; //Mosfet на фрезу
int ULN1 = 25; //ULS2003A
//const int koncevikx = 27;
int r = 11;
int g = 12;
int b = 13;
int enterprog = 0; //Переменная для подключения программы (0 - не подключена, 1 - подключилась)
int enterscreen = 0; //Переменная для главного экрана программы (0 - другой экран, 1 - главный экран)
int shimfreza = 255; //Переменная для ШИМ фрезы %
int freza = 0; //Включена ли фреза

// buttonState = 0;

char buffer[50];
long s1, s2, s3, s4, s5;

String inString = "";
void setup() {
  // put your setup code here, to run once:
       pinMode(Relay, OUTPUT);
       digitalWrite(Relay, HIGH);
       pinMode(Mosfet, OUTPUT);
       pinMode(ULN1, OUTPUT);
       pinMode(r, OUTPUT);
       pinMode(g, OUTPUT);
       pinMode(b, OUTPUT); 
       //pinMode(koncevikx, INPUT); 
       //digitalWrite(Relay, LOW);  // реле ключено
       Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
    unsigned long currentMillis = millis();
if (enterprog == 0) {
  analogWrite(r, brightness);
  analogWrite(g, brightness);
  analogWrite(b, brightness);
  brightness = brightness + fadeAmount;   // прибавляем шаг изменения яркости, которая установится в следующем цикле
    if (brightness == 0|| brightness == 255) { // Условие
      fadeAmount = -fadeAmount ; // Меняем знак
    }
    delay(1);
}
if (enterscreen == 1) {
  digitalWrite(g, HIGH);
}


if(digitalRead(27)==HIGH)//если кнопка нажата ... 
 { 
 digitalWrite(ULN1, LOW);
 } 
 //else//если не нажата... 
 //{ 
 //digitalWrite(13,LOW);//выключаем 
 //} 


    while (Serial.available() > 0) {
      int inChar = Serial.read();
        inString += (char)inChar;
      if (inChar == ';') {
        //Serial.print("String: ");
        //Serial.println(inString);
          

          if (inString == "r1;") {
            digitalWrite(r, HIGH);
            enterscreen = 0;
          }
          if (inString == "r0;") {
            digitalWrite(r, LOW);
            enterscreen = 0;
          }
          if (inString == "g1;") {
            digitalWrite(g, HIGH);
            enterscreen = 0;
          }
          if (inString == "g0;") {
            digitalWrite(g, LOW);
            enterscreen = 0;
          }
          if (inString == "b1;") {
            digitalWrite(b, HIGH);
            enterscreen = 0;
          }
          if (inString == "b0;") {
            digitalWrite(b, LOW);
            enterscreen = 0;
          }
          if (inString == "rel1;") {
            digitalWrite(Relay, LOW);
            enterscreen = 0;
          }
          if (inString == "rel0;") {
            digitalWrite(Relay, HIGH);
            enterscreen = 0;
          }
          if (inString == "mos1;") {
            analogWrite(Mosfet, shimfreza); //Включаем фрезу
            freza = 1;
            digitalWrite(r, HIGH);
            digitalWrite(g, LOW);
            digitalWrite(b, LOW);
          }
          if (inString == "mos0;") {
            analogWrite(Mosfet, 0); //Выключаем фрезу
            freza = 0;
            digitalWrite(r, LOW);
            digitalWrite(g, HIGH);
            digitalWrite(b, LOW);
          }

          if (inString == "uln1;") {
            digitalWrite(ULN1, HIGH);
          }
          if (inString == "uln0;") {
            digitalWrite(ULN1, LOW);
          }
          if (inString == "enterprog;") { //Программа подключена
            digitalWrite(r, LOW);
            digitalWrite(g, LOW);
            digitalWrite(b, LOW);
            enterprog = 1;
            enterscreen = 1;
            Serial.println("SsPUSK A4-2 ENTER");
          }
          if (inString == "exitprog;") { //Выход из программы
            digitalWrite(r, LOW);
            digitalWrite(g, LOW);
            digitalWrite(b, LOW);
            enterprog = 0;
            enterscreen = 0;
            Serial.println("SsPUSK A4-2 EXIT");
          }
          inString.toCharArray(buffer,50);
          s1=atol(strtok(buffer," "));
          s2=atol(strtok(NULL," "));
          s3=atol(strtok(NULL," "));
          s4=atol(strtok(NULL," "));
          s5=atol(strtok(NULL," "));
          //Serial.println(s1);
          //Serial.println(s2);
          //Serial.println(s3);
          //Serial.println(s4);
          //Serial.println(s5);
          
          if (s4 == 45) { //Установка ШИМ для фрезы
            shimfreza = map(s5, 0, 100, 0, 255); //На входе 0-100% на выходе от 0 до 255
            //shimfreza = s5;
            if (freza == 1) {
              analogWrite(Mosfet, shimfreza); //Если фреза включена, то меняем скорость
            }
          }
          if (s4 == 55) { //Установка ШИМ для фрезы
            s5 = 100;
            shimfreza = map(s5, 0, 100, 0, 255); //На входе 0-100% на выходе от 0 до 255
            freza == 1;
            analogWrite(Mosfet, shimfreza); //Если фреза включена, то меняем скорость
            delay(500);
            s5 = 15;
            shimfreza = map(s5, 0, 100, 0, 255); //На входе 0-100% на выходе от 0 до 255
            freza == 1;
            analogWrite(Mosfet, shimfreza); //Если фреза включена, то меняем скорость
          }
          inString = ""; 
        }
    }

}

Это пока отладка идёт. Шаговики появятся - будут ещё концевики и всё остальное.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Правда если движок (фрезу) включаю меньше 50 % мощности то мосфет свистит.... 

nevkon
Offline
Зарегистрирован: 20.01.2015

Вы не указали какой двигатель планируется в качестве шпинделя. В любом случае IRF520 мне кажется слабоват будет - у него постоянный ток 9-6А в зависимости от температуры, а шпиндели обычно потребляют до 10А под нагрузкой, хотя типовое и будет порядка 1А в большинстве случаев. И 1N серия диода тоже не особо подходит - они могут не успевать полностью закрываться. Лучше брать быстродействующие.

Драйвера ШД если я правильно разглядел имеют прямое управление обмотками - будете делать свою систему управления с разделкой g-code? Не проще было взять драйвера с управлением step-dir которые еще и микрошаг и настройку тока дают?

Свистит не мосфет, а обмотки двигателя. Увеличьте частоту ШИМ, тогда выйдете за звуковой диапазон.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Двигатель собираюсь взять такой https://ru.aliexpress.com/item/DC-5-12-pcb/32676035729.html?spm=a2g0s.13010208.99999999.375.a6Idtd

По поводу 1N серии. А какой посоветуете диод? В наличии есть: 

1N4148 1N4007 1N5819 1N5399 1N5408 1N5822 FR107 FR207

Буду писать "свой g-code". И для компа сам писать программу буду. 

А свист есть если и двигатель включен или куллер. Свистит сборка мосфета. Но если даю 40-50 % мощности и выше - свист пропадает.

nevkon
Offline
Зарегистрирован: 20.01.2015

Берите FR107 или FR207. Они как раз из быстрых и напряжение хорошее держат.

Учтите что указанный вами двигатель только для сверления отверстий, но не для фрезерования - у него нет подшипников (по крайней мере более-менее нормальных) для обеспечения боковой нагрузки. Да и для радиальной нагрузки он так себе будет.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Спасибо. Обязательно учту. А какой двигатель посоветуете?

nevkon
Offline
Зарегистрирован: 20.01.2015

Хотя бы такой: https://ru.aliexpress.com/store/product/cnc-spindle-300w-Spindle-motor-air-cooling-300w-spindle-DC-motor-Engraving-Machine-ER11-collets-E240/908764_1930598522.html

Или если бюджет совсем поджимает, то такой: https://ru.aliexpress.com/store/product/spindle-200w-motor-air-cooling-cnc-spindle-dc-motor-CNC-Engraving-Machine-ER11-3-175mm-collets/330447_32736257334.html только не у этого продавца (или требуйте проверить биение перед отправкой - мне он прислал с биением в 0.2мм ! ).

И хотя эти экземпляры тоже не очень, но они будут в разы лучше латунной втулки вместо подшипников качения.

sergkr1983
Offline
Зарегистрирован: 09.12.2015

А 12000 оборотов хватает на фрейзеровку? По дереву вроде как фрезеровать на 18000 надо.

nevkon
Offline
Зарегистрирован: 20.01.2015

Мне пока хватает (и 6мм фрезой резал и 1мм, мельче нету), но уже поглядываю в сторону водянки на 2.2кВт. Только ценник уже не 2-4тр, а 20-30тр. Чем дороже тем лучше (подшипники стоят другие).

Серьезный шпиндель есть смысл вешать только на серьезный станок. Я его буду делать (это будет третья версия если не считать станка для сверловки/гравировки плат на 300Вт шпинделе что тоже в задумках, но уже с готовым проектом).

Кстати вот если правильно помню 12мм фреза на второй версии с 400Вт шпинделем этой же серии: https://www.youtube.com/watch?v=7sRpCQFKfS8

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Приехали шаговые двигатели и уже спалил один L298N. Подключал с компьютерного блока питания. Работало не долго (но всё работало) и мосфет сгорел. На блоке питания написано +12V 13А, -12V 0.5A. Я-то думал что L298N возьмёт сколько надо и всё, а оказывается все 13 ампер берёт? И где найти в БП эти -12V с половиной ампера? Или как ограничить ампераж? Резистором? На сколько тогда взять?

nevkon
Offline
Зарегистрирован: 20.01.2015

Эта микросхема имеет довольно посредственный контроль тока и не является полноценным драйвером, хотя управлять ШД действительно может. Что-то я не вижу на блок-схеме куда идут sense для определения текущего тока обмотки. Действительно, посмотрел это выходы для L297 - вот эта микросхема уже как раз сам контроллер ШД, а L298 является силовыми ключами к ней. Но вот у L297 нет микрошага, максимум сможете выжать полушаг.

Как вариант можно попробовать atmega8a прикрутить для управления L298 и будет еще и микрошаг. Но прошивку писать уже самому...