L-Motor Shield.Проблема с LMS_BACKWARD

использование и разработка плат расширения

L-Motor Shield.Проблема с LMS_BACKWARD

Сообщение mnik » 05 июн 2015, 21:59

Здравствуйте.
Приобрел год назад данную вещицу. Вот только решил собрать станочек из DVD привода DVD видеомагнитофона, моторы, тобишь, коллекторные! (по намотке минипружин — microcoiler). Только, почему-то, при команде LMS_BACKWARD моторы не сразу начинают крутиться назад, а крутятся еще несколько секунд вперед, а потом медленно переключаются и крутятся назад! При смене направления движения с LMS_BACKWARD на LMS_FORWARD (кнопкой) они резко меняют направление. Заметил что при направлении вперед горят красные диоды, а назад и красные и зеленые, причем зеленые медленно (плавно) загораются через несколько секунд! Подскажите как исправить! Стоит 74HC240! В электронике дилетант!

Код:
#include <Servo.h>
#include <LMotorShield.h>
int knop =14;//14-му пину присваиваю имя knop(если помению пин,
//то только здесь цифру сменить далее не надо,т.к. там имя)
int knopi=15;
int led =13;
int ledi =12;
int flag = 0; // флаг состояния
int regim = 0; // Переключалка
LMotorShield lms;

void setup()
{
pinMode(knop, INPUT);
pinMode(knopi, INPUT);
pinMode(led, OUTPUT);
pinMode(ledi, OUTPUT);
}

void loop()
{
if(digitalRead(knop)==HIGH && flag==0)//если кнопка нажата
// и перемення flag равна 0 , то ...
{
regim ++;
flag=1;

if(regim > 2) // Если номер режима превышает требуемого
{
regim = 0;// то отсчет начинается с нуля
}
}
if(digitalRead(knop) == LOW && flag == 1)
{
flag = 0;
}

// ======= Вполняем задачу при выборе режима =======
// РЕЖИМ 0: ON
if(regim == 0)
{
digitalWrite(led, HIGH);
digitalWrite(ledi, LOW);

lms.motorSpeed(2, 22);///каретка (мотор2) скорость
lms.motorDirection(2, LMS_FORWARD); //каретка (мотор2) едет вперед

lms.motorSpeed(2, 99);///каретка (мотор2) скорость
lms.motorDirection(2, LMS_FORWARD); //каретка (мотор2) едет вперед

lms.motorRun(1);
lms.motorSpeed(1, 99);
lms.motorDirection(1, LMS_FORWARD);

}

// РЕЖИМ 1: Off
if(regim == 1)
{
lms.multipleMotorStop(LMS_MOTORS);
lms.multipleMotorBreak(LMS_MOTORS,1);

digitalWrite(led, LOW);
digitalWrite(ledi, HIGH);
}
// РЕЖИМ 2: Возврат каретки
if(regim == 2)
{
digitalWrite(led, HIGH);
digitalWrite(ledi, HIGH);

lms.motorRun(1);
lms.motorRun(2);
lms.motorDirection(2, LMS_BACKWARD);
lms.motorSpeed(2, 99);
lms.motorDirection(1, LMS_BACKWARD);
lms.motorSpeed(1, 99);

}

Фотка 3го состояния (первые секунды),на ней видно, что горят красные светодиоды:
3 состояние (1).jpg
3 состояние. Горят красные светодиоды на шилде
3 состояние (1).jpg (3.27 МБ) Просмотров: 13371

Через несколько секунд медленно(плавно) загарются зеленые и моторы меняют направление!
Stanok_bb.jpg
Сверху Ардуины L-Motor Shield
Stanok_bb.jpg (757.37 КБ) Просмотров: 13371


Пробовал просто код на вращение назад (LMS_BACKWARD) - тож както не так работает!

Также пробовал в выложенном коде менять местами направления в состояниях, т.е. в первом состоянии было BACKWARD, а в третьем FORWARD и всё-равно BACKWARD тупит!
mnik
 
Сообщения: 3
Зарегистрирован: 05 июн 2015, 20:37

Re: L-Motor Shield.Проблема с LMS_BACKWARD

Сообщение mnik » 07 июн 2015, 23:34

Вроде разобрался. После долгих экспериментов заметил, что, когда хочу промерить напряжение на 7 и 8 пинах (направления по схеме шилда), то каретка сразу ехала назад, если был режим "назад". Вообщем вывел с 7 и 8 пинов проводки и через резисторы 1 МОм (подбирал, хотел 100кОм поставить, как в схеме шилда на BRK и PMW, но у меня ничего не нашлось) подключил к земле (GND) - подтянул к земле. Может это не правильно - не знаю. Кажется шилд не доработан!
mnik
 
Сообщения: 3
Зарегистрирован: 05 июн 2015, 20:37

Re: L-Motor Shield.Проблема с LMS_BACKWARD

Сообщение Zoltberg » 09 июн 2015, 15:02

привода DVD видеомагнитофона, моторы, тобишь, коллекторные!
ну вот, а в комменте написали что бесколлекторные породив массу вопросов :ni_zia:
Заметил что при направлении вперед горят красные диоды, а назад и красные и зеленые, причем зеленые медленно (плавно) загораются через несколько секунд!
одновременное горение светодиодов связано с самоиндукцией обмоток двигателя - это норма.
А по сути вашей проблемы, короткий ответ:
Код: Выделить всё
 lms.begin(LMS_MOTORS );

Длинно:
Вы не инициализируете библиотеку - т.е. не настраиваете пины (DIR, PWM, BRK) на режим выхода pinMode(dir_pin, OUTPUT); - в этом режиме пин находится в высокоимпендансном состоянии и не формирует по digitalWrite адекватных уровней.
Добавив резистор вы обеспечиваете наличие ноуля, в то время когда пин находится в состоянии Hi-Z, когда пин работает как выход в этом нет необходимости - он всегда находится либо в HIGH либо в LOW.
По поводу не доработанности моторшилда - резисторы по входам PWM и BRK не требуются для нормальной работы, они обеспечивают безопасное начальное(аварийное) состояние - при наличии силового питания и при отсутствии сигналов на входе (даже если шилд будет вынут из ардуины) двигатели не начнут вращаться и резко не затормозятся т.е. не случится ничего потенциально опасного. Короче на DIR - резистор не нужен.
сон разума рождает чудовищ
Аватара пользователя
Zoltberg
Администратор
 
Сообщения: 290
Зарегистрирован: 05 май 2011, 20:36
Откуда: Калининград

Re: L-Motor Shield.Проблема с LMS_BACKWARD

Сообщение mnik » 09 июн 2015, 17:04

Спасибо. Отпаял резисторы от шилда, инициализировал библиотеку LMS_MOTOR и всё работает как надо.
mnik
 
Сообщения: 3
Зарегистрирован: 05 июн 2015, 20:37


Вернуться в Шилды (Shields)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

© 2009-2021 |  Top.Mail.Ru О проекте  |  Политика Конфиденциальности  |