Easyelectronics.ru

Электроника для всех
Текущее время: 20 янв 2018, 23:39

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Нужна помощь в управлении моторами
СообщениеДобавлено: 18 авг 2016, 17:25 
Здравствуйте!

Зарегистрирован: 21 окт 2015, 11:17
Сообщения: 3
Здравствуйте, хотел бы спросить кое-что:
1. Пишу программу для энкодеров (фотопрерывателя) и DC-моторов. Суть следующая: энкодер (фото 3) принимает данные 1 и 0. Ему необходимо достичь значения 1000 и делаю я это через различные математические выражения и цикл While(), энкодер доходит до значения 1000 и должен остановить мотор, но я не знаю как это сделать. Работа осуществляется через драйвер двигателей l293d.
P.S. Прошу не критиковать за такой простой вопрос разбирающихся и людей. И еще, если вы знаете более удобный или альтернативный вариант для управления энкодерами, буду очень рад. За первый вопрос заранее спасибо. Вот мой программный код:[*
Код:
include <AFMotor.h>
AF_DCMotor motor3(3);
#define LENC  42
//выход энкодера двигателя подключаем ко второму пину - прерывание 0
unsigned int encoder0Pos = 0;
//сумма импульсов инкрементального энкодера левого двигателя
void setup() {
motor3.setSpeed(255);
motor3.run(RELEASE);
//подключаем энкодеры
   pinMode(LENC, INPUT);   //42 пин отвечает за 0 прерывание
   digitalWrite(LENC, HIGH);
   attachInterrupt(0, doEncoderLW, CHANGE); // функция doEncoderLW это обработчик 0 прерывания
   Serial.begin(9700);
}

void loop() {
 
   Serial.println(encoder0Pos);//и выводим в консоль текущее состояние счетчика энкодера
if (encoder0Pos=50) //вот здесь и есть проблема ставил и  = и ==
{
  motor3.run(BACKWARD);
}
else motor3.run(FORWARD);
  }


/*
*  Работа с энкодерами моторов
*  подсчитываем пройденное расстояние
*/
//функция вызываемая прерыванием для подсчета оборотов левого колеса
void doEncoderLW() {
   if (digitalRead(LENC) == HIGH)
   {//если уровень сигнала высокий, тогда инкрементируем счетчик
         encoder0Pos++;
}
}


Вложения:
фото 3.jpg
фото 3.jpg [ 44.41 Кб | Просмотров: 1065 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в управлении моторами
СообщениеДобавлено: 18 авг 2016, 20:53 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 480
Откуда: GMT+6
Код:
//if (encoder0Pos=50) //вот здесь и есть проблема ставил и  = и ==
//{
//  motor3.run(BACKWARD);
//}
//else motor3.run(FORWARD);
//  }

if (encoder0Pos<50)
{
   motor3.run(FORWARD);
}
else if(encoder0Pos>50)
{
   motor3.run(BACKWARD);
}
else
{
   motor3.run(RELEASE);
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB