цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Управляем двигателями через последовательный порт, не используя микроконтроллер

Управляем двигателями через последовательный порт, не используя микроконтроллер

Автор: Mike(admin) от 21-03-2014, 07:58

Для того, чтобы сделать робота вам не нужны Arduino, PIC или другие микроконтроллеры, поскольку свой проект вы можете подсоединить к USB-порту компьютера или ноутбука через адаптер «USB-последовательный порт». Можно и напрямую, если компьютер оснащен последовательным портом. Это позволит управлять шасси непосредственно с ноутбука, не используя дополнительных плат вроде Arduino.


Управляем двигателями через последовательный порт

Адаптер можно приобрести за небольшие деньги, поэтому он может стать хорошей альтернативой платам с микроконтроллерами.


Что потребуется:


  • Адаптер последовательного порта

  • Драйвер двигателя (TA7291P или подобный)

  • Один или два коллекторных двигателя (в этом проекте используются 3-вольтовые движки)

  • Два резистора 1 КОм

  • Ноутбук. Не знаете какой выбрать ноутбук? В данном случае подойдет самый обычный, лишь бы был хотя бы один порт USB.

Если у вас не 5-вольтовый двигатель, то также понадобится либо резистор 5 Ом 2 Вт, либо 100 или 50-омные резисторы 0,25 Вт.


Шаг 1: разбираемся с разъемом последовательного порта


Стандартный разъем порта RS-232 имеет 9 выводов, но нам нужны только три. В общем случае последовательный порт посылает 5-вольтовые сигналы, сообщающие о готовности передачи сообщения, и эти самые сообщения. Вместо отправки сообщений мы просто воспользуемся 5-вольтовым логическим уровнем. Вывод передачи данных TD можно использовать, но это потребует микросхемы-декодера (например, регистра сдвига) или транзистора для усиления слабого тока. При этом логическим нулем будет высокий уровень напряжения, а логической единицей – низкий.


Разъем RS-232

Если не использовать TD (вывод передачи данных), то, в принципе, нам потребуются выводы DTR, RTS и GND (земля).


Шаг 2: схема


Теперь нам нужно «обвязать» драйвер двигателя. Если у вас 3-вольтовые двигатели, то есть одна проблема – TA7291P для работы нужно 4.5 В. Можно взять другие двигатели или задействовать резистор для ограничения тока. Резистор должен быть номиналом от 2 до 5 В и мощностью 2 Вт. Можно также соединить параллельно резисторы 0,25 Вт (20 резисторов 100 Ом или 10 резисторов 50 Ом). В итоге всё нужно соединить так, как показано на схеме (первая для двух двигателей, вторая для одного).


Управляем двигателями через последовательный порт

Управляем двигателем через последовательный порт

Шаг 3: базовая (проверочная) программа


Теперь осталось написать только программу. В данном случае используется Python, но ее можно написать на любом удобном для вас языке. Проследите за тем, чтобы название порта совпадало с используемым портом (в данном случае COM6).



import time
import serial

###инициализация последовательного порта
#для windows (измените COM6 на ваш вариант)
#ser = serial.Serial("COM6", 2400)

#для linux (измените /dev/ttyUSB0 на ваш вариант)
ser = serial.Serial("/dev/ttyUSB0", 2400)

ser.open() #открываем соединение

#пока RTS и DTR сбрасываем
ser.setRTS(False)
ser.setDTR(False)
print("initialization finished")

###основной цикл
c = 1
while c:
   ser.setRTS(False)
   ser.setDTR(True)
   time.sleep(2)
   ser.setRTS(True)
   ser.setDTR(False)
   time.sleep(2)

Шаг 4: простая программа


Если к одному мосту вы подключили два двигателя, то с помощью приведенной ниже программы вы сможете вращать их в определенном направлении.



import time
import serial

###инициализация последовательного порта
#для windows (измените COM6 на ваш вариант)
#ser = serial.Serial("COM6", 2400)

#для linux (измените /dev/ttyUSB0 на ваш вариант)
ser = serial.Serial("/dev/ttyUSB0", 2400)

ser.open() #открываем соединение

#пока RTS и DTR сбрасываем
ser.setRTS(False)
ser.setDTR(False)
print("initialization finished")

### функция для вращения вперед (для одного моста с двумя моторами)
def move_forward(times):
   while times > 0:
      ser.setRTS(True)
      ser.setDTR(False)
      time.sleep(0.2)
      ser.setRTS(False)
      ser.setDTR(True)
      time.sleep(0.2)
      times -= 1

###основной цикл
c = 1
while c:
   move_forward(6)
   time.sleep(2)



© digitrode.ru


<Источник>



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий