Одноступенчатый редуктор с приводом от Шагового Двигателя +29


В этом посте я хочу рассказать про изготовление при помощи ранее изготовленного мной станка с ЧПУ одноступенчатой прямозубой передачи.



Не так давно мной был спроектирован портальный станок с ЧПУ, про его разработку и постройку на этом ресурсе расположена моя предыдущая статья.

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

Так как на изготовленном станке планировалось обрабатывать не только дерево и пластики, а еще и дюраль, то интересно было сделать зубчатую пару как раз из этого материала.

По наличию у меня были обрезки дюралевого листа толщиной 6мм. В качестве привода я решил использовать Шаговый Двигатель (ШД) 23HS8430, он тоже у меня был в наличие и валялся без дела.

Проектирование началось с моделирования всего механизма в среде Компас 3Д, сразу же возникло несколько ограничений, ввиду малого размера дюралевой заготовки, а это соответственно повлияло на габариты ведомой шестерни, а так же на количество и размер зубьев, так как наименьший диаметр фрезы которая у меня была, составлял всего 2мм, а это значит что наименьший радиус которым я могу описать контур в процессе изготовления 1мм.

Учтя все ограничения, я перевел двигатель в 3Д модель и дальше стал сопрягать с ним остальные детали…

Теперь что касается построения зубчатой пары: в машиностроительной конфигурации Компас 3Д (v13) есть такая утилита как «Расчеты цилиндрической зубчатой передачи внешнего зацепления», в ней производим геометрический расчет, вводя требуемые параметры: число зубьев, модуль и т.д. Углубляться в это не буду, достаточно будет прочитать главу про построение зубчатых передач из курса механики: детали машин.



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



Для большего интереса я решил сделать шестерни с разным количеством зубьев и передаточным отношением 2:1.



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



После окончания 3Д проектирования, все детали перевел в 2Д вид и сохранил их в векторном формате *.dxf.

Для того чтобы вырезать все детали на станке, я преобразовал векторный формат в G-code через постпроцессор в программе ArtCam. Полученный файл загрузил в станок и после обнуления координат, вырезал все детали.


В ведомую шестерню запрессовал подшипник, он достаточно плотно вошел, так как я занизил отверстие на несколько соток.

Отдельно на токарном станке выточили ось, на которую устанавливается ведомая шестерня.

Дальше все достаточно просто, собрал узел в едино, и осталось только его закрутить.
Но пришлось подождать месяц, так как драйвера для ШД у меня не оказалось, и я заказал драйвер DM542 на Али.

Для того чтобы ШД закрутился на вход драйвера требуется подать частотный сигнал, для этого я на ардуино уно собрал генератор частоты с изменяемой частотой с помощью внешне подключенного энкодера на 24 импульса.



Сразу хочу оговориться, что код для прошивки ардуино нашел на просторах Интернета.

Генератор частоты может: — генерировать меандр на 16 битном таймере. Диапазон частот 1Гц — 8МГц. Регулировка частоты производится энкодером. До частоты 2,8 кГц разрешение 1 герц, на частотах выше таймер аппаратно уже не может поддерживать это разрешение, поэтому более высокие частоты синтезируются, задавая параметром не требуемую частоту, а просто инкременируя регистр сравнения. Получается чем выше частота — тем больше шаг между щелчками энкодера. Вращая энкодер, с не нажатой кнопкой частота меняется на 1Гц; с нажатой кнопкой один шаг — 100Гц. Выше 2,8кГц. вращение энкодера с нажатой кнопкой так — же ускоряет счёт. Программного подавления дребезга контактов энкодера нет, поэтому нужно повесить конденсаторы 0,01..0,1 мкф. относительно земли. На кнопке конденсатор не обязателен. Рассчитанная математически частота выводится в сериал.

/* Генератор 1 Hz..8 MHz. Энкодер подключен к пинам A0 и A1, кнопка 
энкодера подключена к A2. Требуется использовать конденсаторы  0,01..0,1uf 
относительно земли на каждый из 2х выводов энкодера.
Скетч для ардуино на мк atmega328 (UNO,Nano, MiniPro)
*/

float freq; 
void setup() {
pinMode (9,OUTPUT); // выход генератора
pinMode(A0,INPUT); // с рассчетом, что  энкодере внешняя подтяжка-   
pinMode(A1,INPUT); // -к шине питания. Если нету, то подтянуть программно. 
pinMode(A2,INPUT_PULLUP); //кнопка энкодера 

Serial.begin(9600);
PCICR=1<<PCIE1; //разрешить прерывание PCINT
PCMSK1=(1<<PCINT9);// По сигналу на А1 создавать прерывание
TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера
TCCR1B=0;//
}

ISR (PCINT1_vect){
static boolean gen_mode=0; //флаг режима управления
static uint32_t enc=1; //переменная счёта энкодера
uint32_t ocr=OCR1A;
uint32_t divider=1; //переменная коэфф. деления прескалера

byte n=PINC&3; //считать значение энкодера
boolean knopka = PINC&(1<<2); // 0-кнопка нажата, 1-кнопка НЕ нажата.
if (freq<2848) gen_mode=0; //переключение режима управления по частоте
if (freq>=2848) gen_mode=1; //переключение режима управления по OCR

// Если  увеличение частоты
if (n==3||n==0){ 
 if (gen_mode){if (knopka){ if(ocr>0) {ocr--; } } else {  if(ocr>9)ocr-=10; }   }
 else knopka?  enc++ : enc+=100; // в нч режиме
 } //end GetUP

// Если уменьшение частоты
if (n==2||n==1){ 
 if (gen_mode){ if (knopka){ if(ocr<65535) {ocr++; } } else {  if(ocr<=65525)ocr+=10; }   }
 else {if (knopka) { if (enc>=2)enc--;  } else { if (enc>100) enc-=100; }  }
 } //end GetDown

if(gen_mode){ OCR1A=ocr;  freq= (float)F_CPU/2 / (OCR1A+1);  } 
else { //расчёт прескалера и OCR по нужной частоте
divider=1; ocr = (F_CPU / enc /2 /divider) -1;
if (ocr >65536) { divider=8; ocr = F_CPU / enc /2 /divider;
    if (ocr >65536) { divider=64; ocr = F_CPU / enc /2 /divider;
        if (ocr >65536)  {divider=256; ocr = F_CPU / enc /2 /divider;
            if (ocr >65536) { divider=1024; ocr = F_CPU / enc /2 /divider;
                if (ocr >65536){ocr=65536; }}}}} OCR1A=ocr-1; 
//запись в регистр прескалера            
switch (divider) {
  case 1: TCCR1B=1|(1<<WGM12); break;
   case 8: TCCR1B=2|(1<<WGM12); break;
    case 64: TCCR1B=3|(1<<WGM12); break;
     case 256: TCCR1B=4|(1<<WGM12); break;
      case 1024: TCCR1B=5|(1<<WGM12); break;  }

    freq= (float) F_CPU/2 / (OCR1A+1) /divider;
  } //end if !gen_mode
}
void loop() {
  
if (freq <10000) { Serial.print(freq,1);Serial.println(" Hz "); }
if (freq >10000) { Serial.print(freq/1000,3);Serial.println(" kHz");}

delay(100);
}

После того как все собрал, подсоединил и залил в Arduino скетч, можно приступать к включению:


Теперь про работу сего механизма: вращение и работа передачи вполне не плохое хоть и при звоне шестерен. В итоге получилось разогнать до 12,5 оборотов в секунду ведущую шестерню, а на ведомой соответственно в два раза меньше. Сгенерированная частота при этом составила порядка 5кГц при 400 имп/об. выставленное на драйвере. При этой частоте двигатель еще не уходил в ступор, а это значит, что можно было дать частоту и больше.

Спасибо за прочтение! :)

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (39):

  1. u-235
    /#19152843 / +1

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

    • CybSys
      /#19152977

      код не мой, писал его не я, и даже его не изменял…

      • u-235
        /#19153201

        Ну хотя бы отформатировать можно же было, например, прогнать через AStyle.

        • CybSys
          /#19156307

          Я уже давно не программист, о таком и не слышал (((

      • Delsian
        /#19155943

        «Мопед не мой, я просто разместил объяву» (с)

  2. IronHead
    /#19152933 / +1

    Больше IF-ов богу IF-ов

  3. mphys
    /#19153237

    Все хорошо пока нет нагрузки :)

    • CybSys
      /#19156303

      ее там и не планировалось, но момент там не плохой особенно при малых оборотах

  4. achekalin
    /#19153519

    А почему в заголовке «Шаговый» — с большой буквы?

    • tvr
      /#19154375

      Потому, что «Двигатель», а не какой-нибудь «двигатель».

      • achekalin
        /#19154395

        Спасибо, теперь понятно, почему глаза кровоточат.

  5. xcore78
    /#19153523

    Не пробовали выяснить источник неприятного звука при вращении? Эксцентриситет, наклон относительно оси или несоосность (непараллельность)?

    • vanxant
      /#19153821

      На ведущей шестерне явно эксцентриситет (геометрическая ось самой шестерни не совпадает с осью двигателя)

      • CybSys
        /#19156291

        это точно… есть люфты…

        • bypeso
          /#19156519

          Помимо люфтов зацепления, подумайте над вторым подшипником для оси большей шестерни. Там сложного в доработке ничего нет, просто дополнительная площадка чуть ниже. Сейчас ось гуляет и сильно.
          Мне кажется скрип может быть из-за этого. Обработка шла по параллельным осям вращения, при смещении угла — скрип. Даже интересно как шестерни поведут себя со смазкой.
          Но в целом — если бы я сделал фрезер, я бы был тааааак доволен, так что поздравляю с шестернями.

    • CybSys
      /#19156295

      особого смысла в этом нет

  6. AntonSazonov
    /#19153843

    В коде есть нодочёт.
    При условии "freq == 10000" вывода не происходит.

  7. Vbeerby
    /#19153857

    А какой смысл в генераторе на Ардуине, если готовый на Али стоит от 35р.? (С энкодером от 220р.) Раз уж драйвер все равно заказывали.

    • CybSys
      /#19156281

      Спасибо за подсказку…
      А случаем не знаете, там Н-образного инвертора не продают вольт на 500 и ток ампер на 5+-?
      а то найти не могу, а у самого не стабильно оно работает…

      • Vbeerby
        /#19156501

        Не знаю, к сожалению. А генератор просто сам недавно заказывал.
        Про ардуину спросил так как подумалось что планируется какое-то расширение функционала, а не просто генератор импульсов.

        • CybSys
          /#19156539

          вообще да, расширение функционала планирую, но для другого проекта и тоже на ШД.
          а простой и дешевый генератор мне нужен для проекта высоковольтного БП, собственно и инвертор тоже к нему )))

  8. semen-pro
    /#19153859

    А зачем нужен ЦАП на резисторах?

    • CybSys
      /#19156245

      Точно ответить не могу, схему рисовал не я. у меня и без этих резисторов работает…

  9. MikeVC
    /#19154615

    Ага пилилось из листа по этому зубья такие здоровые пришлось делать.
    Я вот на 4х осевом фрезере пилю мелкие шестеренки. Можно косозубые делать.

    • CybSys
      /#19156237

      это понятно, тоже хочу 4-ю ось приделать)

  10. infrapro
    /#19156017

    так как наименьший диаметр фрезы которая у меня была, составлял всего 2мм

    А можете показать какими фрезами вы пользуетесь?

    • CybSys
      /#19156227

      В этом проекте их все поломал, было пару фрез диаметром 6мм, осталась одна концевая фреза 6мм ))
      заказал еще, жду когда приедут…

      • vershinin
        /#19162017

        Посоветуйте хорошие фрезы по алюминию…

        • CybSys
          /#19162041

          Опыта пока должного не имею, чтобы советовать. (

  11. guineaping
    /#19156203

    Как долго проживет редуктор с алюминиевыми шестернями?

  12. 99pesoblr
    /#19156211

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

    • CybSys
      /#19156223

      да, слегка отличен, но его рисовала программа, хотя может я какие то параметры не так ввел… постараюсь проверить

    • xcore78
      /#19156703

      Если вы про геометрическую разницу в основании, то это нормально — зацеп тот же, а радиус меньше. Главное, чтобы совпадала эвольвента (что, очевидно, выполняется — передачу не клинит).

      (добавлено) А чтобы зубья не держались на слишком тонких ножках, существуют расчёты, ограничивающие число зубьев в зависимости от радиуса и передаваемой нагрузки. Число зубьев также ограничивается и снизу, чтобы обеспечить минимальный непрерывный зацеп (передачу «мальтийский крест» никто не отменял, но это экзотика).

      • bypeso
        /#19156901 / +1

        Не клинит — это не показатель, т.к. отсутствуют 2 параллельные оси — одна из осей гуляет в угоду другой. При таких условиях зубья можно сделать весьма разных форм.
        Если будут цепляться лишь кончиками, их тоже сложно заклинить.
        И я не про разницу в основании, я про «подрезку» зуба. На сколько я помню, подрезка создана для уменьшения износа основания встречной шестерни. По видео, у шестерен разный «подрез» зуба.

  13. petrvden
    /#19157441

    На самом деле компас рисует не истинный профиль зуба, это тоже может добавлять посторонних звуков при работе. Но приложение нагрузки, время и алюминий — в будущем увеличат фазу полета от зуба к зубу и начнется характерный хруст )

  14. RuK
    /#19158121

    Зубья А / В = передаточное число.
    Шестерни с крупным шагом в приводах зло — Люфт.
    (как считать размер зубов (сечение шестерни) в зависимости от шага/оборота (усилия) есть в справочниках)