Всем привет. Вот надумал сделать какого нибудь робота, пока еще не знаю какого, но наткнулся вот на эту http://myrobot.ru/stepbystep/el_...bot_for_line.php статью и задумал использовать в своём роботе. Идея такая: одной ножкой МК с помощью логических элементов "НЕ" управлять мотором. Но что бы я не делал у меня на ножке МК всегда получалось 1 или 0, а что бы мотор не крутился нужно вообще отключить ножку. Вот я и не знаю как это сделать потому что в программировании совсем новичек. Надеюсь мне кто нибудь поможет.
(Добавление)
Ой забыл написать. МК-ATtiny2313, компилятор CVAVR
1. zatmenie - 09 Января, 2010 - 23:56:38 - перейти к сообщению
2. nest - 10 Января, 2010 - 00:44:35 - перейти к сообщению
zatmenie пишет:
ну... давайте либо с помощью МК, либо с помощью лог. элементов : )одной ножкой МК с помощью логических элементов "НЕ" управлять мотором
zatmenie пишет:
покажите, какой код использовали.
Но что бы я не делал у меня на ножке МК всегда получалось 1 или 0, а что бы мотор не крутился нужно вообще отключить ножку
3. lamakazzz - 10 Января, 2010 - 00:46:00 - перейти к сообщению
Возможно, Вам есть смысл собрать робота без МК (микроконтроллера), а только на драйвере двигателя L293D, почитать и разобраться, как оно работает.
Когда в Вашей программе вы указываете 1 на выходе (ножке) МК, то, соответственно, передается сигнал высокого уровня на драйвер двигателя, в цепи идет ток и мотор крутится. Когда на выходе 0 - сигнал низкого уровня - мотор не крутится.
Для простоты можно представить, что это водопровод: когда подаётся 1 - это равносильно, что Вы открутили кран и идёт вода; когда подаётся 0 - Вы закрутили кран и вода не идёт. Т.е. всего два положения: 0 и 1 (закрыто и открыто). Соответственно, если Вы ставите лог.элемент "НЕ", то моторы будут крутиться, когда установлен "0".
Поправьте, если я что-то напутал.
Когда в Вашей программе вы указываете 1 на выходе (ножке) МК, то, соответственно, передается сигнал высокого уровня на драйвер двигателя, в цепи идет ток и мотор крутится. Когда на выходе 0 - сигнал низкого уровня - мотор не крутится.
Для простоты можно представить, что это водопровод: когда подаётся 1 - это равносильно, что Вы открутили кран и идёт вода; когда подаётся 0 - Вы закрутили кран и вода не идёт. Т.е. всего два положения: 0 и 1 (закрыто и открыто). Соответственно, если Вы ставите лог.элемент "НЕ", то моторы будут крутиться, когда установлен "0".
Поправьте, если я что-то напутал.
4. zatmenie - 10 Января, 2010 - 10:50:00 - перейти к сообщению
nest пишет:
покажите, какой код использовали.
так я в генераторе кода менял настройки ножек, а так я не знаю какой код мне нужно сделать.
lamakazzz пишет:
Возможно, Вам есть смысл собрать робота без МК (микроконтроллера), а только на драйвере двигателя L293D, почитать и разобраться, как оно работает.
в принципе я разобрался как все это работает, смоделировал в протеусе.
lamakazzz пишет:
Т.е. всего два положения: 0 и 1 (закрыто и открыто). Соответственно, если Вы ставите лог.элемент "НЕ", то моторы будут крутиться, когда установлен "0".
Да на выходе всего 2 положения, но я читал в какой то книге что у avr 3 положения: вход, выход и отключено. Если ставить лог.элемент то из 0 он делает 1, а из 1 делает 0. Т.е. мотор всегда будет крутится. Вот а мне надо что бы она была отключена, но так что бы программа смогла менять её положение, т.е. сейчас она отключена, датчик сработал она стала 0 и мотор крутится в одну сторону, затем другой датчик сработал она стала 1 и омотор крутится в другую сторону, если ничего не сработало ножка становится отключена и мотор не крутится.
5. nest - 10 Января, 2010 - 12:37:06 - перейти к сообщению
zatmenie, что бы мотор не крутился, нужно:
1) ИЛИ: подавать на входы IN1 и IN2 (L293) одинаковые лог. сигналы, т.е. либо оба "1", либо оба "0".
2) ИЛИ: подавать "0" на вход ENABLE, тогда мотор окажется как бы "отключённым" от L293. В этом случае он будет некоторое время крутиться по инерции (возможно, очень коротко, в зависимости от нагрузки на его валу). Такое отключение произойдёт независимо от сигналов на IN1 или IN2.
Если используется вариант 1 - то мотор будет гарантированно заторможен. Т.к. его выводы будут как бы "замкнуты" через микросхему L293.
При варианте 2 - мотор будет останавливаться сам по инерции. Т.к. его выводы будут электрически никуда не подключены, "висеть в воздухе".
Тут ещё можно провести простой эксперимент: возмите моторчик в руки и крутните пальцами его вал. Заметте как он будет вращаться по инерции. А потом замкните проводком выводы мотора, и крутните вал ещё раз...
Но в любом случае вам требуется задействовать минимум две ноги микроконтроллера.
Логический элемент у вас в схеме, zatmenie, вообще то не нужен. Подавайте на IN1 и IN2 прямо с двух ножек микроконтроллера. И управляйте ими програмно как вам хочется.
По-мне лучше всё соединить так: IN1 - PB0, IN2 - PB1 , ENABLE - PB2. В таком варианте управление мотора будет наиболее гибким. Даже ШИМ можно будет потом использовать и регулировать скорость вращения мотора програмно.
1) ИЛИ: подавать на входы IN1 и IN2 (L293) одинаковые лог. сигналы, т.е. либо оба "1", либо оба "0".
2) ИЛИ: подавать "0" на вход ENABLE, тогда мотор окажется как бы "отключённым" от L293. В этом случае он будет некоторое время крутиться по инерции (возможно, очень коротко, в зависимости от нагрузки на его валу). Такое отключение произойдёт независимо от сигналов на IN1 или IN2.
Если используется вариант 1 - то мотор будет гарантированно заторможен. Т.к. его выводы будут как бы "замкнуты" через микросхему L293.
При варианте 2 - мотор будет останавливаться сам по инерции. Т.к. его выводы будут электрически никуда не подключены, "висеть в воздухе".
Тут ещё можно провести простой эксперимент: возмите моторчик в руки и крутните пальцами его вал. Заметте как он будет вращаться по инерции. А потом замкните проводком выводы мотора, и крутните вал ещё раз...
Но в любом случае вам требуется задействовать минимум две ноги микроконтроллера.
Логический элемент у вас в схеме, zatmenie, вообще то не нужен. Подавайте на IN1 и IN2 прямо с двух ножек микроконтроллера. И управляйте ими програмно как вам хочется.
По-мне лучше всё соединить так: IN1 - PB0, IN2 - PB1 , ENABLE - PB2. В таком варианте управление мотора будет наиболее гибким. Даже ШИМ можно будет потом использовать и регулировать скорость вращения мотора програмно.
zatmenie пишет:
вот и покажите код, который есть.
я в генераторе кода менял настройки ножек, а так я не знаю какой код мне нужно сделать.
6. zatmenie - 10 Января, 2010 - 13:46:13 - перейти к сообщению
nest пишет:
вот и покажите код, который есть.
/*****************************************************
Project :
Version :
Date : 09.01.2010
Author : Valera
Company : Home
Comments:
Chip type : ATtiny2313
Clock frequency : 4.000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h>
#include <delay.h>
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0
PORTB=0x00;
DDRB=0x01;
// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
while (1)
{
PORTB.0=~PIND.0;
};
}
А разве нельзя программно сделать что бы ножка МК "висела в воздухе"? Просто я задумал сделать с лог.элементами для экономии ножек (что бы на tiny13(25) можно было сделать более менее сложного робота, и для освоения электроники и программировании.
(Добавление)
Насчет моторчика: замкнул контакты между собой и почти не крутится по инерции.
7. nest - 10 Января, 2010 - 14:08:13 - перейти к сообщению
zatmenie пишет:
можно. нужно её включить как Input.разве нельзя программно сделать что бы ножка МК "висела в воздухе"?
а для чего это вам ? повесить в воздухе ножку вам ничего не даст, т.к. драйвер двигателя L293 управляется "1" или "0", и никак больше. Прочитайте ещё раз, какие варианты "отключения"/останова мотора я описал.
Почему вам хочется именно на "малоногом" МК собрать робота ?
С точки зрения программинга - малое количество ног не имеет никаких достоинств. Зато значительно повышает требования к хитрым схематическим решениям. Да и дополнительный корпус микросхемы логики повышает потребление схемы и вероятность ошибок.
Тини2313 (20 ног, 8+7 из них свободно конфигурируемы) - наиболее оптимальный вариант для более-менее простого робота. Можно взять Мега8.
Если вас привлекает лишь малый размер корпуса - то можно взять многоногий и в SMD варианте. Но паять будет немного сложнее.
8. zatmenie - 10 Января, 2010 - 16:03:02 - перейти к сообщению
nest пишет:
можно. нужно её включить как Input.
а для чего это вам ? повесить в воздухе ножку вам ничего не даст, т.к. драйвер двигателя L293 управляется "1" или "0", и никак больше. Прочитайте ещё раз, какие варианты "отключения"/останова мотора я описал.
а для чего это вам ? повесить в воздухе ножку вам ничего не даст, т.к. драйвер двигателя L293 управляется "1" или "0", и никак больше. Прочитайте ещё раз, какие варианты "отключения"/останова мотора я описал.
В том то и дело если я повешу ножку в воздухе - значит она будет и не 0 и не 1, а это значит мотор работать не будет. потом программа меняет её на 0 или 1 и мотор крутится туда или сюда! Вот в этом весь прикол, что бы одной ножкой управлял мотором через логические элементы.
nest пишет:
Почему вам хочется именно на "малоногом" МК собрать робота ?
Потому что мне так интересней.
nest пишет:
Зато значительно повышает требования к хитрым схематическим решениям.
мне это как таз и нужно!
nest пишет:
Если вас привлекает лишь малый размер корпуса - то можно взять многоногий и в SMD варианте. Но паять будет немного сложнее.
Дело не в размере.
А как программно ножку менять из OUTPUT в INPUT?
9. zatmenie - 10 Января, 2010 - 16:14:15 - перейти к сообщению
Щас попробовал в протеусе подключить лог.элемент ко входу. Сконфигурировал ПД1 с подтягивающим резистором и без него, но в обоих случаях мотор работает.
10. nest - 10 Января, 2010 - 16:46:32 - перейти к сообщению
zatmenie пишет:
почитать в даташите раздел про регистры DDRx или ещё где вам понятнее.как программно ножку менять из OUTPUT в INPUT?
хм...
можно сделать так как вы хотите, но это как то ... некрасиво всё, когда есть микроконтроллер.
Поищите информацию про "диодное-ИЛИ" и "диодное-И". Есть такие схемы для сборки логических функций.
А потом давайте так: Покажите мне, как бы вы построили "диодное-И" и покажите в протеусе как это работает (картинкой). Тогда я покажу вам как сделать вашу схему : )
11. zatmenie - 10 Января, 2010 - 20:11:58 - перейти к сообщению
nest пишет:
Поищите информацию про "диодное-ИЛИ" и "диодное-И". Есть такие схемы для сборки логических функций.
Диодное И/ИЛИ это диодно-транзисторная логика верно?
12. zatmenie - 10 Января, 2010 - 20:43:51 - перейти к сообщению
Чето ничего не могу найти про диодно-транзисторную логику кроме этой картинки
13. nest - 10 Января, 2010 - 20:53:27 - перейти к сообщению
zatmenie, подойдёт. Просимулируйте это в протеусе. Или в реальной схеме.
14. lamakazzz - 10 Января, 2010 - 20:58:17 - перейти к сообщению
Можете обратить внимание на
http://window.edu.ru/window_cata...68&p_page=13 - тут в виде html, а PDF версию смотрите выше, либо
http://window.edu.ru/window_cata...file=stup081.pdf
http://window.edu.ru/window_cata...68&p_page=13 - тут в виде html, а PDF версию смотрите выше, либо
http://window.edu.ru/window_cata...file=stup081.pdf
15. zatmenie - 10 Января, 2010 - 21:18:45 - перейти к сообщению
nest пишет:
подойдёт. Просимулируйте это в протеусе. Или в реальной схеме.
А какие детали для протеуса?