• Объявления

    • softm

      Аварийная Facebook-страница для chipmaker.com.ua   15.01.2018

      Дорогие друзья! Обратите внимание, что в целях (также и аварийного) информирования участников форума chipmaker.com.ua создана фейсбук-страница https://www.facebook.com/pg/chipmakercomua/posts/?ref=page_internal. Присоединяйтесь. Чем больше нас, тем меньше их!
    • Одессит

      Новички и правила "Барахолки"   19.01.2018

      Уважаемы новые пользователи "Барахолки"!
      Т.к. Правила, похоже, из вас никто не читает, то, уведомляю, что ваши лоты размещённые с грубыми нарушениями таковых (отсутствие обязательного "ника" на фото товара, в частности) будут просто удаляться администрацией без предупреждения и попыток что-либо вам пояснить.

Gnevko

Пользователи
  • Продаж/оценка Барахолки

    0/0 (полученные отзывы)
  • Публикации

    89
  • Зарегистрирован

  • Посещение

Репутация

12 Нулевая

О Gnevko

Персональная информация

  • Пол
    Мужчина
  • Страна
  • Город
    Австрия
  • Имя Пользователя
    Алексей

Настройки Барахолки

  • По-умолчанию только новые товары
    Нет
  • Скрыть "параметры" товара из списка товаров
    Нет
  • Скрыть статусы товаров (новый, бу, поломан/на запчасти)
    Нет
  • Не показывать среди товаров - Техлитературу
    Нет

Настройки Форума

  • Добавить темы в блоке новые посты/темы/блоги?
    5
  1. Решил все же проверить, сколько расчетных шагов делает двигатель за один оборот шпинделя при шаге 1.5 мм на синхронной подаче, благо сделать это оказалось достаточно просто. Результат: при 200 шагах получил значение от 149 до 151, что в принципе ок, все же прерывания не предназначены на вывод информации через Serial (но для тестирования пойдет). При 800 шагах, вместо ожидаемых 600 шагов было уже 593-594, то есть на одном обороте шпинделя терялось где то 7-6 шагов (а это почти 2 сотки), и это при том, что расчет интервала шага был уже исправлен. Более того, картина становилась тем грустнее, чем выше была скорость вращения шпинделя. Пришлось признать, что алгоритм исполнения шагов, описанный в этом посте, оказался мягко говоря не идеальным. Ну бывает ... В итоге применил другой подход, которые оказался намного эффективнее как с точки зрения кол-ва выполняемых операций внутри прерывания пот таймеру, так и с точки зрения загрузки "процессора" в целом. Теперь таймер вместо 20 микросекунд, срабатывает с интервалом, который соответсвует вычисленным паузам между шагами. Как только скорость меняется, таймеру присваевается новое значение интервала. В итоге стабильные +-600 шагов на скорости до 750 оборотов (дальше не смотрел, нужно было перебрасывать ремни).
  2. Итак, результат при 200 шагах на оборот шаговика: однако 200 - это уж совсем грустно, давайте ка попробуем на 800 ...
  3. Между делом добавил описание расположения элементов на дисплее: Пару примеров:
  4. Из альбома Paulimot Project

  5. Из альбома Paulimot Project

  6. Вы конечно же правы ... и тут вспомнил я, что где то бы у меня набор для нарезание резьб разных и к нему прикладовались шаблончики для определения шага резьбы, тоже конечно не идеал, но все же. В общем, после всех танцев с бубнами, после коих результат был уже более или менее вменяемый, решил я все же попробовать 200 шагов на оборот шагового двигателя: Завтра попробую нарезать уже полноценную резьбу, потом попробую все же на 400 микрошагах. Строймаговский болт, кстати, садиться в этот шаблон просто как влитой.
  7. Из альбома Paulimot Project

  8. Перед тем как уменьшать кол-во микрошагов, решил проверить формулы расчета от и до, сравнивая промежуточные результаты с Exel, на преобразованиях типов нашлись еще 300 микросекунды на один шаг. После возврата на тип переменных float, разнице между результатами в Exel и Ардуино составила всего лишь 2 микросекунды, вместо 350 ранее. Результат не идеален, но намного лучше чем был раньше.
  9. Из альбома Paulimot Project

  10. Спасибо, дельный совет! Точность более 0.01мм тут не поймать никогда, не того уровня станок, тут вы совершенно правы.
  11. Проблема с потерей микросекунд пролечилась заменой формулы _deltaTimeForNextStep = 1000000 / ((speed * 100) / 625); на _deltaTimeForNextStep = 1000000.0 / ((speed * 100.0) / 625.0); Сейчас посмотрим, как это повлияло на конечный результат
  12. делал, точность до сотки ... но кажется я нашел проблему (см комментарий выше), только не понятно пока как её решить.
  13. Давайте ка я опишу весь алгоритм расчета и выполнения шагов для шагового двигателя в случае синхронной подачи, возможно это так же поможет мне увидеть проблему. Итак 1) Первый этап - вычисление скорости вращения шпинделя: - при срабатывании прерывания измеряем текущее время в микросекундах; - вычитаем полученный результат из предыдущего, получая тем самым разницу между срабатываниями прерываний - вычисляем скорость вращения шпинделя в секунду: 1000000 * 100 / spindleDeltaPhase. Умножение на 100 необходимо, что бы избавиться от чисел с плавающей точкой. Результат, для примера, 146 (то есть 1.46 оборотов шпинделя в секунду) или 87.6 оборотов в минуту. - далее идет вычисление миллиметров, которые должен сделать суппорт за одну секунду: _spindleRevolutionsPerSecond * zAutoFeedSyncSpeed, то есть наши 146 (не забываем про умножение ранее на 100) умножаем на заданную скорость, так же умноженную на 100: 146 * 8 (или 1.46 * 0.08) и получаем, 1168, с учетом умножений на 100 двух множителей - реальное значение 0.1168 мм на оборот. 2) Второй этап - вычисление промежутков между шагами двигателя - Вначале мы делим расстояние, которое необходимо пройти суппорту в секунду на расстояние которое проходит суппорт за один шаг: speed / 0.000625 тем самым получая количество шагов в секунду времени. - Затем делим секунду на это количество шагов: 1000000 / (speed / 0.000625), но помня о том, что переменная speed у нас увеличена в 10000 раз, и желая здесь так же избавиться от плавающей точки в итоги получаем формулу: _deltaTimeForNextStep = 1000000 / (speed * 100 / 625). На нашем примере это должно было бы быть 1000000 / (1168 * 100 / 625) = 5351, а ардуино говорит там, что 5376, что на 25 микросекунды больше чем нужно ... хм ... если резать резьбу на 30мм, то это займет 48000 шагов двигателя, если на каждом шаге терять по 25 микросекунд, то общие потери составят 1,2 секунды ... вот тебе и раз. Теперь бы понять, с какого испугу теряются здесь по 25 микросекунд! 3) Третий этап - собственно алгоритм выполнения шагов выполняется таймером, который тикает каждые 20 микросекунды. - запоминаем последнее время, когда был сделан шаг - если при очередном срабатывании таймера прошло больше времени, чем было вычислено на втором этапе - делаем еще один шаг. - поскольку скорее всего промежуток между шагами на 20 ровно делиться не будет, то вычисляем дельту - на сколько микросекунд шаг был задержан, и делаем следующий шаг с поправкой на эту дельту - то есть быстрее. Задача - найти куда теряются 25 микросекунды на шаг!
  14. Вооружившись измерителем оборотов (пришлось съездить к товарищу за прибором), выяснил следующее: 1) на низких оборотах - показания прибора 168.3 - 168.4 (здесь и далее оборотов в минуту), показания с ардуино - 168.0 - 168.6 2) на "высоких" оборотах - показания прибора 723,1, показания с ардуино - 772.2 - 724.6 3) на сверх низких оборотах - показания прибора 65.4, показания с ардуино 65.4 Таким образом можно сделать осторожное утверждение, что скорость вращения шпинделя вычисляется более или менее точно, и не может повлечь за собой вышеописанное безобразие (во всяком случае в полном объеме оного).