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



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

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

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

По наличию у меня были обрезки дюралевого листа толщиной 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
    24.09.2018 20:05
    +1

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


    1. CybSys Автор
      24.09.2018 20:49

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


      1. u-235
        24.09.2018 21:51

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


        1. CybSys Автор
          25.09.2018 17:34

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


      1. Delsian
        25.09.2018 16:28

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


  1. IronHead
    24.09.2018 20:34
    +1

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


  1. mphys
    24.09.2018 22:01

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


    1. CybSys Автор
      25.09.2018 17:31

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


  1. achekalin
    25.09.2018 00:33

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


    1. tvr
      25.09.2018 11:00

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


      1. achekalin
        25.09.2018 11:05

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


  1. xcore78
    25.09.2018 00:37

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


    1. vanxant
      25.09.2018 07:50

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


      1. CybSys Автор
        25.09.2018 17:30

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


        1. bypeso
          25.09.2018 18:02

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


          1. CybSys Автор
            25.09.2018 18:03

            спасибо, учту ))


    1. CybSys Автор
      25.09.2018 17:30

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


  1. AntonSazonov
    25.09.2018 08:14

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


    1. CybSys Автор
      25.09.2018 17:29

      спасибо


  1. Vbeerby
    25.09.2018 08:23

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


    1. CybSys Автор
      25.09.2018 17:29

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


      1. Vbeerby
        25.09.2018 17:59

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


        1. CybSys Автор
          25.09.2018 18:05

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


  1. semen-pro
    25.09.2018 08:27

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


    1. CybSys Автор
      25.09.2018 17:24

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


  1. MikeVC
    25.09.2018 12:08

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


    1. CybSys Автор
      25.09.2018 17:23

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


  1. infrapro
    25.09.2018 16:45

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

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


    1. CybSys Автор
      25.09.2018 17:22

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


      1. vershinin
        26.09.2018 20:01

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


        1. CybSys Автор
          26.09.2018 20:08

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


  1. guineaping
    25.09.2018 17:19

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


    1. CybSys Автор
      25.09.2018 17:19

      В моем случае вечно)))


  1. 99pesoblr
    25.09.2018 17:19

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


    1. CybSys Автор
      25.09.2018 17:21

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


    1. xcore78
      25.09.2018 18:33

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

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


      1. bypeso
        25.09.2018 19:18
        +1

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


  1. petrvden
    25.09.2018 22:12

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


  1. RuK
    26.09.2018 04:59

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