Синхронизация швейной машинки и конвеера

xam777
Offline
Зарегистрирован: 23.02.2017

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

Исходные данные: я считываю квадратурные импульсы с двигателя машинки. Энкодер выдает 720 импульсов на полный оборот двигателя с передвижением материала 4 мм. Минимальная частота выходного сигнала с энкодера 1Кгц Максимальная 15Кгц. Максимальная скорость движения материала 10м в минуту.

На конвеер поставил двигатель с редуктром 24В , 3000 об.мин (200 – 250Вт). Понизил вращение до 45 об в минуту. С помощью ардуины считываю длинну импульсов от датчика энкодера со швейной машинки. На осонвании этих импульсов формирую PWM сигнал, который потом выдаю на драйвер двигателя.

В принципе система рабочая, только проблема в том что движение конвеера трудно синхронизовать со скоростью машинки. При разных скоростях конвеер то отстает то убегает. К примеру удается синхронизировать на первых 20% скокрости уходит остальная часть. Либо наоборот.

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

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

Может быть у кого есть в этом опыт буду рад услышать коментарии. 

xam777
Offline
Зарегистрирован: 23.02.2017
Вот исходный код, довольно простой.
 
01int pinRead = 7;        // reading pin of pulse lenth
02unsigned long duration; // reading pulse lenths from qudrature encoder
03int pwm1;               // pwm duty cycle from 0 to 100
04int pwm2;
05 
06void setup()
07{
08  Serial.begin(9600);
09  pinMode(pinRead, INPUT);
10 
11  pinMode(9, OUTPUT);           // output of PWM
12  pinMode(10, OUTPUT);          // output of PWM
13  TCCR1A = _BV(COM1A1) | _BV(COM1B1) ; // phase and frequency correct mode. NON-inverted mode
14  // TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(COM1A0) | _BV(COM1B0) ;
15  //phase/frequency correct mode. SELECT THIS FOR INVERTED OUTPUTS.
16  TCCR1B = _BV(WGM13) | _BV(CS11);
17// Select mode 8 and select divide by 8 on main clock.
18 
19}
20void loop()
21{
22  ICR1 = 100;    // 10kHz mode
23  duration = pulseIn(pinRead, HIGH);  // read lenths of pulses usualyy duration from 600ms to 32ms
24                                      // than shorte duration than faster moving machine is feeding
25  Serial.println(duration);           // print value from pin 7 pulse lenths
26   
27    if (duration>500 or duration == 0 )    // if reading to long no signal out    
28    {
29        pwm1 =0;
30     }
31    if (duration<=500 and duration >=370)
32    {
33        pwm1 = 90 - duration/5.01;
34    }
35    if (duration<370 and duration >=100)
36    {
37        pwm1 = 80 - duration/5.01;
38    }
39    else
40    {
41        pwm1 = 70 - duration/10;
42    }
43 
44 
45  Serial.print("pwm:");
46  Serial.println(pwm1);
47 
48  OCR1B = int(pwm1);    // output pin 9 pulese
49  OCR1A = int(pwm1);    // output pin 10 pulses
50 
51}

 

 

xam777
Offline
Зарегистрирован: 23.02.2017

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

Theodor Schabalin
Offline
Зарегистрирован: 13.01.2022

Здравствуйте могу я с вами связаться.?

xam777
Offline
Зарегистрирован: 23.02.2017

Да можете, напишите ваш емэйл, я вам скину сообщение