Помогите переделать прошивку

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Runmy, 5 апр 2017.

  1. Runmy

    Runmy Нуб

    Все почти понятно, спасибо большое!!!:)
     
  2. sslobodyan

    sslobodyan Гик

    Да ладно, пользуйтесь, хотя можно было бы нажать "Мне нравится" - здесь так принято благодарить.
     
    Runmy нравится это.
  3. Runmy

    Runmy Нуб

    Еще раз спасибо, плюсов наставил. Но еще один вопрос, если Вы конечно в курсе, почему то происходит дребезг при вращении шагового двигателя. Думаю что дело в прошивке, так как при других работает он плавно.
     
  4. sslobodyan

    sslobodyan Гик

    Вероятно, вечером еще раз гляну код. Шаговиком управлять сложнее, чем дпт. У вас драйвера как настроены - шаг, полушаг или дробление?
     
  5. Runmy

    Runmy Нуб

    1/16 step. Вот я то же в этом направлении смотрю, пока не дома, вечером попробую поэкспериментировать с этим.
     
  6. sslobodyan

    sslobodyan Гик

    Судя по вашим настройкам, у вас там должно быть 1/32
    Код (C++):
    #define STEPS_PER_TURN (6400)  // 32x200 depends on your stepper motor.  most are 200.
    #define X_STEPS_PER_MM (56)   // (55.57)  //1/8  
    #define Y_STEPS_PER_MM (914) //(914.29)  //1/8
    #define MIN_STEP_DELAY (50.0)
     
    Двигатели стандартно 200 ш/оборот * 32 = 6400 ш/оборот. Шаги_на_мм считаются как 6400/(сколько мм за один оборот). Не знаю вашу механику, но например со шпилькой с шагом 1.25 (М8) получим 6400/1.25=5120, на трапеции 12х3 получим 6400/3=2133.33 . У вас там еще редуктор стоит? Если да, то делим еще на коефф редукции.
    Фидрейт подобрали правильно? Пропуска шагов нет?
    Посмотрел по коду - ничего смертельного, обычный ардуинский ногодрыг. Если заменить на прямое управление портами, получится быстрее и тише.
     
    Runmy нравится это.
  7. Runmy

    Runmy Нуб

    Минимальный микрошаг устанавливаемый перемычками на RAMPS 1.4 равен 1/16 step. При таком микрошаге на обоих двигателях картинка получается узкая.
    Фидрейд - это что?
    И как подключить на прямое управление портами?
    Оказывается склолько я еще не знаю :(
     
  8. sslobodyan

    sslobodyan Гик

    Опишите свою механику. Попробуем считать вместе.
     
  9. Runmy

    Runmy Нуб

    Давайте я немного еще потестирую, сделаю фото, может и видео, определюсь со всеми проблемами. Но в любом случае уже Вы хорошо помогли - спасибо. Вечером попобую выложить свои эксперименты :)
     
  10. Runmy

    Runmy Нуб

    С механикой вроде разобрался. Но при тестах решил попровать использовать вместо нагревателя от 3D принтера нихромовую проволоку, оказалось что в прошивке неработает регулировка температуры, ставлю всепо нулям, а нить накаляется.
     
  11. rkit

    rkit Гуру

    Либо ключ пробит.
     
  12. Runmy

    Runmy Нуб

    Вот код тестовый, в котором нагрев идет, насколько я понял, импульсами, то есть включается-выключается и чем их больше - тем температура больше.

    Код (C++):
    #define X_STEP_PIN         54
    #define X_DIR_PIN          55
    #define X_ENABLE_PIN       38
    #define X_MIN_PIN           3
    #define X_MAX_PIN           2

    #define Y_STEP_PIN         60
    #define Y_DIR_PIN          61
    #define Y_ENABLE_PIN       56
    #define Y_MIN_PIN          14
    #define Y_MAX_PIN          15

    #define Z_STEP_PIN         46
    #define Z_DIR_PIN          48
    #define Z_ENABLE_PIN       62
    #define Z_MIN_PIN          18
    #define Z_MAX_PIN          19

    #define E_STEP_PIN         26
    #define E_DIR_PIN          28
    #define E_ENABLE_PIN       24

    #define Q_STEP_PIN         36
    #define Q_DIR_PIN          34
    #define Q_ENABLE_PIN       30

    #define SDPOWER            -1
    #define SDSS               53
    #define LED_PIN            13

    #define FAN_PIN            9

    #define PS_ON_PIN          12
    #define KILL_PIN           -1

    #define HEATER_0_PIN       10
    #define HEATER_1_PIN       8
    #define TEMP_0_PIN          13   // ANALOG NUMBERING
    #define TEMP_1_PIN          14   // ANALOG NUMBERING

    void setup() {
      pinMode(FAN_PIN , OUTPUT);
      pinMode(HEATER_0_PIN , OUTPUT);
      pinMode(HEATER_1_PIN , OUTPUT);
      pinMode(LED_PIN  , OUTPUT);
     
      pinMode(X_STEP_PIN  , OUTPUT);
      pinMode(X_DIR_PIN    , OUTPUT);
      pinMode(X_ENABLE_PIN    , OUTPUT);
     
      pinMode(Y_STEP_PIN  , OUTPUT);
      pinMode(Y_DIR_PIN    , OUTPUT);
      pinMode(Y_ENABLE_PIN    , OUTPUT);
     
      pinMode(Z_STEP_PIN  , OUTPUT);
      pinMode(Z_DIR_PIN    , OUTPUT);
      pinMode(Z_ENABLE_PIN    , OUTPUT);
     
      pinMode(E_STEP_PIN  , OUTPUT);
      pinMode(E_DIR_PIN    , OUTPUT);
      pinMode(E_ENABLE_PIN    , OUTPUT);
     
      pinMode(Q_STEP_PIN  , OUTPUT);
      pinMode(Q_DIR_PIN    , OUTPUT);
      pinMode(Q_ENABLE_PIN    , OUTPUT);
     
       digitalWrite(X_ENABLE_PIN    , LOW);
       digitalWrite(Y_ENABLE_PIN    , LOW);
       digitalWrite(Z_ENABLE_PIN    , LOW);
       digitalWrite(E_ENABLE_PIN    , LOW);
       digitalWrite(Q_ENABLE_PIN    , LOW);
    }

    void loop () {
     
      if (millis() %1000 <500)
        digitalWrite(LED_PIN, HIGH);
      else
        digitalWrite(LED_PIN, LOW);
     
      if (millis() %1000 <100) {
        digitalWrite(HEATER_0_PIN, HIGH);
        digitalWrite(HEATER_1_PIN, LOW);
        digitalWrite(FAN_PIN, LOW);
      } else if (millis() %1000 <600) {
        digitalWrite(HEATER_0_PIN, LOW);
        digitalWrite(HEATER_1_PIN, HIGH);
        digitalWrite(FAN_PIN, LOW);
      } else  {
        digitalWrite(HEATER_0_PIN, LOW);
        digitalWrite(HEATER_1_PIN, LOW);
        digitalWrite(FAN_PIN, HIGH);
      }
      if (millis() %10000 <5000) {
        digitalWrite(X_DIR_PIN    , HIGH);
        digitalWrite(Y_DIR_PIN    , HIGH);
        digitalWrite(Z_DIR_PIN    , HIGH);
        digitalWrite(E_DIR_PIN    , HIGH);
        digitalWrite(Q_DIR_PIN    , HIGH);
      }
      else {
        digitalWrite(X_DIR_PIN    , LOW);
        digitalWrite(Y_DIR_PIN    , LOW);
        digitalWrite(Z_DIR_PIN    , LOW);
        digitalWrite(E_DIR_PIN    , LOW);
        digitalWrite(Q_DIR_PIN    , LOW);
      }
      digitalWrite(X_STEP_PIN    , HIGH);
      digitalWrite(Y_STEP_PIN    , HIGH);
      digitalWrite(Z_STEP_PIN    , HIGH);
      digitalWrite(E_STEP_PIN    , HIGH);
      digitalWrite(Q_STEP_PIN    , HIGH);
      delay(1);
     
      digitalWrite(X_STEP_PIN    , LOW);
      digitalWrite(Y_STEP_PIN    , LOW);
      digitalWrite(Z_STEP_PIN    , LOW);
      digitalWrite(E_STEP_PIN    , LOW);
      digitalWrite(Q_STEP_PIN    , LOW);
    }
     
  13. Runmy

    Runmy Нуб

    Надежда только на Вас )).
    Как писал реннее, в прошивке так и не работает регулирование температуры нагревателя. Я уже что только не делал, ничего не получается. Может мне уже напрямую от блока питаня запустить нагреватель через резистор?
     
  14. sslobodyan

    sslobodyan Гик

    Резистор потребуется мощностью повыше нагревателя. Иначе резистор разогреется раньше:)
    Я уже объяснял, что в прошивке регулирования температуры нет, потому что для регулирования нужен датчик температуры. Но есть регулирование мощности и если правильно подобрать подводимую мощность, то не будет перегрева, поскольку вся подводимая мощность уйдет в работу. Но как только нагреватель перестанет работать (выжигать? я не забыл?), так сразу начнет перегреваться. Контактный датчик температуры вам не подойдет (высокие температуры плюс маленький нагреватель), поэтому возможен вариант с косвенным замером через измерение тока. Есть определенная зависимость тока через нагреватель от его температуры. Предположу, что с помощью ACS712 возможно померить ток с нужной точностью. Платки на этом чипе дешевый и доставабельные, есть на разные токи (5,20,30 ампер). Думаю, что у вас не более 5 ампер, но лучше замерьте. Так вот эта платка выдает напряжение пропорциональное току через датчик. И вам придется только поддерживать ток в нужном диапазоне. А если управлять током (температурой) можно отдельным модулем, то посмотрите в сторону dc-dc преобразователей с ограничением по току (в описании будет cc - current constant). Они тоже есть на разные токи и не сильно дорогие.
     
    Runmy нравится это.