ЗИМНЯЯ ВСТРЕЧА 26
Форум самогонщиков Сайт Барахолка Магазин ЗИМНЯЯ ВСТРЕЧА 26

Перистальтический насос на 3D принтере

Форум самогонщиков Сделай сам
1 ... 46 47 48 49 49
Phisik Куратор Екатеринбург 736 1.5K
Отв.960  19 Нояб. 25, 21:43
invalid operands of types 'size_t {aka unsigned int}' and 'void' to binary 'operator-'Pavel_N, 19 Нояб. 25, 18:55
Это непонятное что-то, я вижу 2 варианта:
1) Либо какие-то символы или что-то неправильное. Скопируй строку сверху, где литры "L", а эту сотри, потом руками впишешь ml, если соберется.
2) В библиотеке print() не возвращает int. Надо библиотеку смотреть, что она там делает.
Pavel_N Новичок Московская обл 3
Отв.961  20 Нояб. 25, 22:25
Если закомментировать строки ( выделенные жирным). Компиляция проходит. Только скетч не работает. Не запоминает установки. Значит проблемы с библиотекой 1602 RUS. POS библиотека не понимает.

#if ENABLE_MODE_BOTTLING
   case MODE_BOTTLING:
      if (bottlingStepLimit == 0) {
         lcd.print(F("Bottling volume "));
         lcd.setCursor(0, 1);
         if(bottlingVolume>9999) {
     //pos += lcd.print(0.001*bottlingVolume);//****************
         //pos  += lcd.print(F(" L"));//*******************************
         //} else {//*******************************************
         //   pos += lcd.print(bottlingVolume);
         //   pos += lcd.print(F(" ml"));
         //}******************************************************
         while (pos++ < 16) lcd.write(32);
      }
      //else {
         const int progress = int(17.0*stepCounter / bottlingStepLimit);
         lcd.print(F("Pumping water "));
         (bottlingVolume > 0) ? lcd.print(F("+ ")) : lcd.print(F("- "));
         lcd.setCursor(0, 1);
         while (pos++ < progress) lcd.write(255);
         while (pos++ < 16) lcd.write(32);
         //DEBUG_PRINT("Target RPM = ");
         //DEBUG_PRINT(targetRpm);
         //DEBUG_PRINT(", current RPM = ");
         //DEBUG_PRINTLN(currentRpm);
      }
      return;
   #endif
   #if ENABLE_EXTERNAL_CONTROL
   case MODE_EXT_CONTROL:
      lcd.print(F("External control"));
      lcd.setCursor(0, 1);
      if (extControlDisabledFlag) {
         sprintf(buffer, "Stopped (%d%%)", int(extPwmDutyCycle * 100));
      } else {
         const int clph = round(currentRpm * revolution2millilitreCw * 0.6);  // 60 / 1000 * 10
         sprintf(buffer, "%d.%1d l/h (%d%%)", clph / 10, abs(clph % 10), int(extPwmDutyCycle * 100));
      }
 //  pos = lcd.print(buffer);       //  *************************************************************************************
      while (pos++ < 16) lcd.write(32);
Денис1309 Новичок Копейск 1
Отв.962  10 Дек. 25, 15:08
Добрый вечер, не подскажете размеры подшипников? По вашей схеме напечатал тоже насос, а про размер подшипников найти не могу
Phisik Куратор Екатеринбург 736 1.5K
Отв.963  12 Дек. 25, 12:16
размеры подшипниковДенис1309, 10 Дек. 25, 15:08
605ZZ 5x14x5
muxtair Бакалавр Мелеуз 92 17
Отв.964  24 Дек. 25, 14:11
гуру подскажите ,
по умолчанию 200 шагов за один оборот двигателя стоит в скетче ?
в этой строке написано количество шагов ?
const int8_t microStepping = 8;
dee Научный сотрудник Минск 9.9K 2.5K
Отв.965  24 Дек. 25, 15:39
200 импульсов надо что бы ШД сделал оборот в режиме полного шага, если на драйвере включен полушаг 1/2 то число импульсов будет 400, в режиме микрошага 1/8 - 1600, в режиме микрошага 1/32 - 6400. Уставка микрошага для драйвера ШД типа а4988 от 3д принтера сделана программно через пины pinMS1 pinMS2 pinMS3, для ТВ6600 это не работает, нужно тумблерами выставить, если цифры в скетче и на драйвере не будут совпадать то двигатель будет крутится быстрее или медленнее цифер на экране.

В программе вычисляется const int16_t stepsPerRevolution = 360 / degreePerStep * microStepping

по stepsPerRevolution вычисляется нужная частота
long freq = long(1.0 * abs(rpm) * stepsPerRevolution / 60.);

по частоте вычисляется значение счетчика в прерывания
OCR1A = uint16_t(8e6 / freq) - 1; // set compare match register

лишней математики много но с другой стороны контроллеру все равно нечем занятся.

Добавлено через 21ч. 2мин.:

кстати, формула справедлива только для процессора на 16МГц, если чип 20МГц то вместо 8e6 нужно подставить 10e6 или 1e7