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

в 16:31, , рубрики: arduino, cad, CAD/CAM, cam, cnc, diy или сделай сам, nano, uno, компас 3d, Разработка под Arduino, сделай сам, станки с чпу, чпу, шестерня

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Генератор частоты может: — генерировать меандр на 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 имп/об. выставленное на драйвере. При этой частоте двигатель еще не уходил в ступор, а это значит, что можно было дать частоту и больше.

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

Автор: CybSys

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js