Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: nightmare, Aleks_Crow, Huntswarrior  
Помехи от электродвигателей.
Отправлено 02.09.2012 - 22:211
Участник
79 сообщений
Мужчина
Всем привет. Столкнулся с проблемой элетродвигателей и Ардуино. Имеется Ардуино Уно, два двигателя, подключенные через драйвер моторов, фототранзистор на ПИН 2. При засветке фототранзистора происходит прерывание. ПИН 2 подтянут к GND резистором на 5,1 кОм. При прерывании происходит увеличение переменной на 1и данные выводятся в serial monitor.

void loop()

{ Forward(); // Движение вперед
}
void Encoder(){
encoder += 1;
Serial.println(encoder);
}

Без включения моторов все работает. При подаче питания на двигатели происходит самопроизвольное увеличение значения переменной. Пробовал с другим двигателем, менее мощным все работает. То есть проблема в помехах с двигателя. Пробовал ставить керамику 0,1 мкФ между выводами двигателя, а также от каждого вывода на корпус двигателя. Не помогло. Что делать? движки менять не хочу.


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 02.09.2012 - 22:452
Администраторы
3417 сообщений
Мужчина
после

Quote
encoder += 1; Serial.println(encoder);  


выстави задержку на 10-20мс


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 02.09.2012 - 22:523
Участник
79 сообщений
Мужчина
S-T-A-L-K-E-R(А), Выставил не помогло. unhappy


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 02.09.2012 - 22:564
Администраторы
3417 сообщений
Мужчина
Попробуй отключать(выключать) моторы во время прерывания...


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 02.09.2012 - 23:055
Участник
79 сообщений
Мужчина
Дело в том, что прерывания происходят при включенных моторах произвольно. Засветки фототранзистора в этот момент не происходит. Если с ФТ убрать питание, то помехи исчезают. Может на ФТ подать отдельное питание, не от ардуины?


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 04.09.2012 - 21:456
Модераторы
211 сообщений
Мужчина
Нарисуйте электрическую схему подключения фототранзистора, подпишите порты микроконтроллера, приведите более полный кусок кода обработчика. Инициализации прерываний я по крайней мере не видел в программе. Возможно вы приводите ситуацию не полностью, так как с ваших слов и скудных данных сделать правильный вывод затруднительно.


Профиль Личное сообщение Дом. страница icq Skype
50
Отправлено 04.09.2012 - 22:047
Участник
79 сообщений
Мужчина
Вот полный код

Code

float encoder = 0;

void setup() {
{   
   pinMode(2,INPUT);//вход 2
   attachInterrupt(0, Encoder, RISING);
   Serial.begin(115200);
   
}
pinMode(3,OUTPUT); // Motor A скорость
pinMode(7,OUTPUT); // Motor A направление
pinMode(11,OUTPUT); // Motor B скорость
pinMode(8,OUTPUT); // Motor B направление
}
void Forward() { // Подпрограмма движения робота вперед
digitalWrite(3,HIGH);
digitalWrite(7,LOW);
digitalWrite(11,HIGH);
digitalWrite(8,LOW);
}

void loop()
   
{ Forward();
}
   
void Encoder(){
         encoder += 1;
  Serial.println(encoder);
    
}


Профиль Личное сообщение Дом. страница icq Skype
14
  • Страница 1 из 1
  • 1
Поиск: