Easyelectronics.ru

Электроника для всех
Текущее время: 16 окт 2018, 08:57

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • 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 Кб | Просмотров: 1242 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в управлении моторами
СообщениеДобавлено: 18 авг 2016, 20:53 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 576
Откуда: 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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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