Синхронизация швейной машинки и конвеера
- Войдите на сайт для отправки комментариев
Добрый день. Собираю конвеер который подключается с швейной машинке. Чем быстрее швейная машинка шьет тем быстрее должен двигаться конвеер с материалом. Делаем пошив больших кусков материи.
Исходные данные: я считываю квадратурные импульсы с двигателя машинки. Энкодер выдает 720 импульсов на полный оборот двигателя с передвижением материала 4 мм. Минимальная частота выходного сигнала с энкодера 1Кгц Максимальная 15Кгц. Максимальная скорость движения материала 10м в минуту.
На конвеер поставил двигатель с редуктром 24В , 3000 об.мин (200 – 250Вт). Понизил вращение до 45 об в минуту. С помощью ардуины считываю длинну импульсов от датчика энкодера со швейной машинки. На осонвании этих импульсов формирую PWM сигнал, который потом выдаю на драйвер двигателя.
В принципе система рабочая, только проблема в том что движение конвеера трудно синхронизовать со скоростью машинки. При разных скоростях конвеер то отстает то убегает. К примеру удается синхронизировать на первых 20% скокрости уходит остальная часть. Либо наоборот.
На ардуине стал делать выборку по входным сигналам на каждом определенном отрезке применяю отдельную формулу для расчета PWM.
Более менее работает, но чувствую как то коряво все исполнено. Установил энкодер на двигатель конвеера, но что то затык произошел как синхронизировать теперь.
Может быть у кого есть в этом опыт буду рад услышать коментарии.
01
int
pinRead = 7;
// reading pin of pulse lenth
02
unsigned
long
duration;
// reading pulse lenths from qudrature encoder
03
int
pwm1;
// pwm duty cycle from 0 to 100
04
int
pwm2;
05
06
void
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
}
20
void
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
}
Решил задачу, установил самопальный энкодер, добавил обратную связь в код, добавил свою развязку на энкодер на тригере шмита. Все работает как часы точность 1мм, время отклика на изменения положения основного вала 200мс.
Здравствуйте могу я с вами связаться.?
Да можете, напишите ваш емэйл, я вам скину сообщение