роботы робототехника микроконтроллеры


 Страниц (8): [1] 2 3 4 5 6 7 8 »   

> Описание: Вращения мотора в одну сторону к концнвику,когда концевик сработал то он врашается в другую стороно к концевику
Demckiy Post Id


Полковник


Сообщений всего: 79
Дата рег-ции: Май 2010  



Вращения мотора в одну сторону к концнвику,когда концевик сработал то он врашается в другую стороно к концевику,И так от концевика до концевика .

Помогите с программой и схемой .
Заранее спасибо.
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



Demckiy, вы хотите схему на лиг. микросхемах или микроконтроллере?
Можно и просто на реле.

какой драйвер используется для мотора?
расскажите побольше про вашу задачу.
 
 Top
Demckiy Post Id


Полковник


Сообщений всего: 79
Дата рег-ции: Май 2010  



nest пишет:
Demckiy, вы хотите схему на лиг. микросхемах или микроконтроллере?
Можно и просто на реле.

какой драйвер используется для мотора?
расскажите побольше про вашу задачу.


Буду использовать микроконтроллере ATmega8 и драйвер L293DNE. И программу буду писать на Си.

Думаю использовать такую схему (см.рис). Исправте если что-то не правильно.


(Добавление)
Немного изменилась задача.
нужно сделать так, моторчик крутится влево но когда сработал концевик моторчик остановился на 10сек и потом начал вращаться вправо до концевика,концевик сработал моторчик остановился на 10 сек .
(Добавление)
Немного изменилась задача
моторчик крутится влево до концевика когда концевик сработал моторчик остановился на 10 сек и начал крутится вправо до концевика, когда концевик сработал он остановился на 10сек.

(Отредактировано автором: 17 Июля, 2010 - 14:46:05)

 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



CODE:

/*********************************
программа для компилятора WinAVR
*********************************/

#include <avr/io.h>
#include <util/delay.h>

int main(void) /* начало основной программы */
{

DDRB &= (~(1<<0)); /* PB0 сконфигурировать как вход, концевик 1 */
DDRB &= (~(1<<1)); /* PB1 сконфигурировать как вход, концевик 2 */

PORTB |= (1<<0); /* PB0 установить "1", включаем подтягивающий резистор */
PORTB |= (1<<1); /* PB1 установить "1", включаем подтягивающий резистор */

DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя 2 */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя 2 */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя 1 */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя 1 */

/* мотор 2 остановлен */
PORTC |= (1<<1); /* PC1 установить "1" */
PORTC |= (1<<2); /* PC2 установить "1" */
/* мотор 1 включен */
PORTC |= (1<<3); /* PC3 установить "1" */
PORTC &= (~(1<<4)); /* PC4 установить "0" */

while(1) /* бесконечный цикл */
{

/* проверка концевика 1 */
if( !(PINB & (1<<0)) ) /* проверить "0" на PB0 */
{
/* остановить мотор*/
PORTC |= (1<<3); /* PC3 установить "1" */
PORTC |= (1<<4); /* PC4 установить "1" */
_delay_ms(10000); /* временная задержка */
/* включить мотор в одну сторону */
PORTC |= (1<<3); /* PC3 установить "1" */
PORTC &= (~(1<<4)); /* PC4 установить "0" */
_delay_ms(100); /* временная задержка */
}

/* проверка концевика 2 */
if( !(PINB & (1<<1)) ) /* проверить "0" на PB1 */
{
/* остановить мотор */
PORTC |= (1<<3); /* PC3 установить "1" */
PORTC |= (1<<4); /* PC4 установить "1" */
_delay_ms(10000); /* временная задержка */
/* включить мотор в другую сторону */
PORTC &= (~(1<<3)); /* PC3 установить "0" */
PORTC |= (1<<4); /* PC4 установить "1" */
_delay_ms(100); /* временная задержка */
}

} /* закрывающая скобка бесконечного цикла */

} /* закрывающая скобка основной программы */


Если схему рассмотрел правильно, то должно работать Голливудская улыбка

(Отредактировано автором: 18 Июля, 2010 - 17:08:57)

 
 Top
Azzoo Post Id


Лейтенант


Сообщений всего: 24
Дата рег-ции: Июль 2010  



А не лучше ли "Аналогом" ? Как выше было предложено на Реле или транзюках и RC цепях.
 
 Top
Demckiy Post Id


Полковник


Сообщений всего: 79
Дата рег-ции: Май 2010  



Azzoo пишет:
А не лучше ли "Аналогом" ? Как выше было предложено на Реле или транзюках и RC цепях.
У меня на мега8 написана программа таймера и я решил ее дописать немного.

Когда время таймера вышло то моторчик вращается влево до концевика и останавливается и время начинает заново считать, время вышло то вращать моторчик впрово до концевика и остановится. и так по истечению времени моторчик крутится то влево до концевика и останавливается то вправо до концевика и останавливается .


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

Программа для CodeVisionAVR
CODE:
if (second == 0)
{
if (poz == 1)
{
poz = 0;
second = 5;

/* проверка концевика 1 */
if (PINB.1 == 0 ) /* проверить "0" на PB1 */
{
PORTC.4 = 1; // установить "1" на линии 4 порта C
PORTC.3 = 1; // установить "1" на линии 3 порта C

}
else
{
PORTC.4 = 1; // установить "1" на линии 4 порта C
PORTC.3 = 0; // установить "0" на линии 3 порта C
}
}

else
{
poz = 1;
second = 5;

/* проверка концевика 2 */
if (PINB.0 == 0 ) /* проверить "0" на PB0 */
{
PORTC.4 = 1; // установить "1" на линии 4 порта C
PORTC.3 = 1; // установить "1" на линии 3 порта C

}
else
{
PORTC.4 = 0; // установить "0" на линии 4 порта C
PORTC.3 = 1; // установить "1" на линии 3 порта C

}
}

(Отредактировано автором: 18 Июля, 2010 - 01:57:47)

 
 Top
Azzoo Post Id


Лейтенант


Сообщений всего: 24
Дата рег-ции: Июль 2010  



Ну с точки зрения банальной оптимизации

CODE:


if (second == 0)
{
second = 5; //все равно он в любом случае в 5 устанавливается
poz = !poz;
/* проверка концевиков вся логика "упакована" в булеву алгебру */
PORTC.4 = !PINB.0 | !poz;
PORTC.3 = !PINB.1 | poz;
}

(Отредактировано автором: 18 Июля, 2010 - 03:15:21)

 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Не видя весь код и имея весьма туманное представление о том как все работает модифицировать что либо очень непросто Жуть

CODE:

if (second == 0)
{

switch (poz)
{

case 0:
/* включить мотор в одну сторону */
PORTC.3 = 0; // установить "0" на линии 3 порта C
PORTC.4 = 1; // установить "1" на линии 4 порта C
break;

case 1:
/* включить мотор в другую сторону */
PORTC.3 = 1; // установить "1" на линии 3 порта C
PORTC.4 = 0; // установить "0" на линии 4 порта C
break;

}

}


/* проверка концевика 1 */
if ( poz == 1 &&
PINB.1 == 0 ) /* проверить "0" на PB1 */
{
poz = 0;
second = 5;
/* остановить мотор*/
PORTC.4 = 1; // установить "1" на линии 4 порта C
PORTC.3 = 1; // установить "1" на линии 3 порта C
}

/* проверка концевика 2 */
if ( poz == 0 &&
PINB.0 == 0 ) /* проверить "0" на PB0 */
{
poz = 1;
second = 5;
/* остановить мотор*/
PORTC.4 = 1; // установить "1" на линии 4 порта C
PORTC.3 = 1; // установить "1" на линии 3 порта C
}


Работа программы зависит от начального значения переменной poz. И далее, по ходу программы, от нее многое зависит. Короче, отладка этой программы видится занятием веселым Голливудская улыбка

(Отредактировано автором: 18 Июля, 2010 - 04:13:44)

 
 Top
Demckiy Post Id


Полковник


Сообщений всего: 79
Дата рег-ции: Май 2010  



mihail Спасибо большое за программный код, то что нужно.

Я использую драйвер L293DNE, значит у меня управляющий ноль?
 
 Top
Azzoo Post Id


Лейтенант


Сообщений всего: 24
Дата рег-ции: Июль 2010  



Вроде бы да (насчет DNE)

To Mihail вы совершенно правы насчет модификации части чего-то

Произведу оптимизацию одного кусочка... Улыбка))

CODE:


if (second == 0)
{
/* включить мотор в сторону зависящую от переменной poz*/
PORTC.3 = poz;
PORTC.4 = ~poz;
}

 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



Azzoo, не нужно этих оптимизаций. я вот не понимаю их. или свой код целиком выкладывай. (я уж не говорю про сомнительность оптимизации, в машкодах - одинаково будет)(плюс время компиляции)
(Добавление)
(плюс- минус в дебагинге)
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



cjA пишет:
я уж не говорю про сомнительность оптимизации, в машкодах - одинаково будет
если оптимизировать сам алгоритм - то это вообще первое, что нужно сделать.
 
 Top
Demckiy Post Id


Полковник


Сообщений всего: 79
Дата рег-ции: Май 2010  



а можно подключить активатор на 12 вольт к л293дне ???
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



Demckiy, зависит от потребляемого активатором тока.
 
 Top
Demckiy Post Id


Полковник


Сообщений всего: 79
Дата рег-ции: Май 2010  



nest пишет:
Demckiy, зависит от потребляемого активатором тока.


а как узнать какой ток потребляемого активатора ??? просто инфы нету.
 
 Top
Страниц (8): [1] 2 3 4 5 6 7 8 »
« Делаем роботов »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru