Показать сообщение отдельно
Старый 24.03.2010, 08:53   #19
Except
Пользователь
 
Аватар для Except
 
Регистрация: 08.12.2008
Возраст: 39
Город: Челябинск
Регион: 74
Машина: Nissan Sunny 2001
Сообщений: 72
Except is on a distinguished road
По умолчанию

День добрый!

Вчера подрубил шаговый двиг и энкодер к ардуине. Двиг работает без нареканий. Через драйвер. Добится нужно в идеале - одна ступенька энкодера : один шаг ШД. Поигрался с задержками, но как хотел так и не получается.

С энкодером маюсь. Вообщем, если его быстро крутить, то он пропускает шаги. Если случайно или при медленном вращении, ручку энкодера остановить между фиксированными положениями (ступеньками) - врубается обратный шаг.

Т.е. крутим направо - шаговый шагает направо, если случайно между ступеньками остановим - шаговый влево, потом вправо. Итог - шаговик вращается рвано.

Управление энкодером сделал по образу: http://www.compcar.ru/forum/showthre...EA%EE%E4%E5%F0

т.е. без кондеров, как в этом посте: http://www.compcar.ru/forum/showthre...EA%EE%E4%E5%F0
может это как то влиять?


****

Еще вопросец. Когда ничего не происходит(т.е. ШД не вертится), то его даже рукой очень трудно вращать. Ротор стоит намертво . Как я понимаю это из-за того, что он шагнул к текущей обмотке и она его там удерживает. Вообщем при этом двиг нормально так греется. Надо убрать питание с обмоток? Если да, то для этого достаточно подать на драйвер все LOW (не успел вчера проверить)?

Цитата:
int encoder_left = 3;
int enc_pos = 0;
byte pos[4];

void setup()
{
pos[0] = HIGH;
pos[1] = LOW;
pos[2] = LOW;
pos[3] = LOW;
enc_pos = 0;
...
}

void loop_forward(int time, int pause)
{
for (int i = 0; i<=time; i++)
{
pos[enc_pos] = LOW;
enc_pos++;
if (enc_pos>3) enc_pos = 0;
if (enc_pos<0) enc_pos = 3;
pos[enc_pos] = HIGH;

digitalWrite(motorPin1, pos[0]);
digitalWrite(motorPin2, pos[1]);
digitalWrite(motorPin3, pos[2]);
digitalWrite(motorPin4, pos[3]);

delay(pause);
}
}

void loop()
{
...
//Encoder rotate left
if(digitalRead(encoder_left) == LOW)
{
delay(4);
if(digitalRead(encoder_left) == LOW)
{
loop_forward(2,22);
}
}
...
}
Спасибо.
__________________
Nissan Sunny FB15 SS 01'
pccar на odroid c2
Except вне форума   Ответить с цитированием