реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Аппаратный ШИМ на ATtiny2313, А также несколько вопросов относительно него
777777
сообщение Mar 7 2011, 11:01
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(314 @ Mar 5 2011, 22:14) *
Инерция движков сама по себе отличный ФНЧ.

Только не забывайе про диод параллельно двигателю через который будет течь ток в те моменты когда транзистор закрыт.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 7 2011, 11:31
Сообщение #17


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



У товарища стоит готовый мост, даже два - L293D, никакого диода параллельно двигателю ставить не надо, при реверсе диод благополучно сгорит. В L293D стоят встроенные диоды параллельно каждому ключу.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bfrogg
сообщение Mar 8 2011, 14:44
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 5-03-11
Пользователь №: 63 417



Код
   #define F_CPU 8000000UL  // указываем частоту в герцах
  
   #include <avr/io.h>
   #include <util/delay.h>

int main(void) // начало основной программы
{
           while (1) {  // Бесконечный цикл

        // ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКА

        if (!(PIND & _BV(PD1))) // проверить "0" на линии 1 порта D
        {
            TCCR1A = (1<<COM1B1) | (1<<WGM10);
         TCCR1B = (1<<WGM12) | (1<<CS10);
         OCR1B = 100;
         DDRB |= (1<<PB4);
        }
        else
        {
         TCCR1A = (1<<COM1A1) | (1<<WGM10);
         TCCR1B = (1<<WGM12) | (1<<CS10);
         OCR1A = 100;
         DDRB |= (1<<PB3);
        }
        }

  
}



http://myrobot.ru/stepbystep/r_firstbot2.php - делаю на основе этой статьи

Сообщение отредактировал bfrogg - Mar 8 2011, 14:45
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 8 2011, 22:51
Сообщение #19


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Если аргумент оператора IF равен ДА, то вы включаете двигатель1, если НЕТ, то включаете двигатель2, но при этом двигатель1 надо бы выключить, разве нет?



--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
314
сообщение Mar 9 2011, 07:10
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 17-08-07
Пользователь №: 29 855



Лучше не выключать, а менять скорости, один двигатель быстрее, а второй медленнее. Разницу скоростей нужно подобрать по опыту.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 9 2011, 09:46
Сообщение #21


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Это уже детали, смысл моего сообщения был в том, что если в начале программы сработало одно условие, и включился один двигатель, то робот начнёт двигаться по кругу. Пусть в некий момент наступит другое условие, включится второй двигатель, но первый-то не выключится. И второй тоже, несмотря на смену условий. Вместо того, чтобы следить за линией робот поедет куда глаза глядят...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bfrogg
сообщение Mar 11 2011, 21:51
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 5-03-11
Пользователь №: 63 417



Код
/****************************************************************
ПРИМЕР 4 :: ПРОСТЕЙШИЙ АЛГОРИТМ СЛЕДОВАНИЯ ПО ЛИНИИ :: MYROBOT.RU
*****************************************************************/

#include <avr/io.h>

int main(void) // начало основной программы
{
  
   DDRB = 0xff; // все выводы порта B сконфигурировать как выходы
   DDRD = 0x00; // все выводы порта D сконфигурировать как входы


   PORTD = 0xff; // установить "1" на всех выводах порта D,
         // включаем подтягивающие резисторы

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

        // ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКА

        if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
        {
                    // ---- включаем левый мотор, останавливаем правый -----

                    TCCR1A = (1<<COM1B1) | (1<<WGM10);
                    TCCR1B = (1<<WGM12) | (1<<CS10);
                    OCR1B = 100;
                    DDRB |= (1<<PB4);
                    DDRB |= (0<<PB3);

                    // -----------------------------------------------------
        }
        else
        {
                        // ---- останавливаем левый мотор, включаем правый -----

                    TCCR1A = (1<<COM1A1) | (1<<WGM10);
                    TCCR1B = (1<<WGM12) | (1<<CS10);
                    OCR1A = 100;
                    DDRB |= (1<<PB3);
                    DDRB |= (0<<PB4);

                        // -----------------------------------------------------
        }


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

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


Вроде работает, однако есть 2 проблемы

1: алгоритм срабатывает, если я проводком ведущим к PD1 тыкаю на минус. Фотодатчики как то не управляют работой)
2: с момента начала робот работает нестабильно: сначала крутится одно колесо, когда условие выполняется, после того как проводком на минус тыкнул, МК как будто сходит с ума и условие работает наоборот
Go to the top of the page
 
+Quote Post
ae_
сообщение Mar 12 2011, 02:48
Сообщение #23


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(bfrogg @ Mar 12 2011, 05:51) *
...
2: с момента начала робот работает нестабильно: сначала крутится одно колесо, когда условие выполняется, после того как проводком на минус тыкнул, МК как будто сходит с ума и условие работает наоборот

Как можно узнать куда поворачивать, если сигнал с фотоэлемента только один?
Куда отклонилась машина, влево или вправо, если пропал сигнал?
Что бы следить за линией, нужно минимум 2 аналоговых фотоэлемента, один слева, другой справа.
Расположить их так, чтобы каждый видел 50% ширины линии.
Сигнал с фотоэлементов снимать аналоговый, к двигателям сигнал управления подавать пропорционально освещённости датчиков крест-накрест, т.е. чем ярче видит линию левый датчик, тем быстрее крутить правым двигателем.
Другой вариант - поставить 3 логических фотоэлемента (да/нет, есть линия/нет линии), один в центре, два по бокам от него.
Если едем ровно - сигнал есть только на центральном датчике. ушли в сторону - сигнал появится на боковом датчике и далее может совсем пропасть.
Запомнив, в какую сторону сбилась машина, управляем двигателями, что бы вернуть её на линию.
Go to the top of the page
 
+Quote Post
bfrogg
сообщение Mar 12 2011, 07:10
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 5-03-11
Пользователь №: 63 417



Цитата(ae_ @ Mar 12 2011, 05:48) *
...

http://myrobot.ru/stepbystep/el_simple_robot_for_line.php

Сообщение отредактировал IgorKossak - Mar 12 2011, 08:34
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
314
сообщение Mar 12 2011, 18:21
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 17-08-07
Пользователь №: 29 855



Цитата
алгоритм срабатывает, если я проводком ведущим к PD1 тыкаю на минус. Фотодатчики как то не управляют работой)

Возьмите вольтметр и померяйте напряжение на PIND,1 в момент, когда фотодатчик над полосой и когда в стороне от полосы и увидите, проблема в датчике или программе.

Цитата
с момента начала робот работает нестабильно: сначала крутится одно колесо, когда условие выполняется, после того как проводком на минус тыкнул, МК как будто сходит с ума и условие работает наоборот

А разве присваивание 0 биту не так пишется: DDRB &= (0<<PB4);
Цитата
Что бы следить за линией, нужно минимум 2 аналоговых фотоэлемента, один слева, другой справа.

Это просто детская игрушка, Вы еще видеокамеру предложите поставить, с распознованием образов, чтоб хозяина узнавал и за ним ездил sm.gif
Go to the top of the page
 
+Quote Post
ae_
сообщение Mar 12 2011, 19:15
Сообщение #26


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(bfrogg @ Mar 12 2011, 15:10) *

Если управлять роботом по такому алгоритму:
Прикрепленное изображение
то МК легко может "сойти с ума" при очередном манёвре, если робот проедет чуть дальше в сторону линии и пересечёт её уже с обратной стороны.
В этом случае условия движения поменяются на обратные.

Предлагаю реализовать такой алгоритм движения:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
bfrogg
сообщение Mar 13 2011, 06:22
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 5-03-11
Пользователь №: 63 417



ae, спасибо за идею!

Цитата(314 @ Mar 12 2011, 21:21) *
А разве присваивание 0 биту не так пишется: DDRB &= (0<<PB4);

Один из вариантов написания, присваивание работает
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 13 2011, 09:58
Сообщение #28


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(314 @ Mar 12 2011, 21:21) *
А разве присваивание 0 биту не так пишется: DDRB &= (0<<PB4);
Нет. Вот так правильно:
Код
DDRB &= ~(1<<PB4);


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
314
сообщение Mar 13 2011, 10:10
Сообщение #29


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 17-08-07
Пользователь №: 29 855



Цитата
Нет. Вот так правильно:

Ну пусть так (все равно sbi-cbi предпочитаю), а в варианте ТС работать-то будет?

Сообщение отредактировал 314 - Mar 13 2011, 10:11
Go to the top of the page
 
+Quote Post
bfrogg
сообщение Mar 20 2011, 20:19
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 5-03-11
Пользователь №: 63 417



Проблема в программе. В моей схеме МК работает на удивление нестабильно. Банальная программа по вращению моторами туда сюда без каких либо датчиков работает ужасно (то есть один мотор вращается от 4 до 10 секунд, потом другой вращается сколько хочет, когда оба должны поочередно работать 1 секунду). В схему поставил стабилизатор напряжения на 5 вольт. Питание 6 вольт. Может мне воспользоваться каким нибудь из этих советов? http://myrobot.ru/articles/mc_stab.php

Вообще схема без МК спаяна без ошибок - все проверил тестером, двигатели вращаются когда надо (L293D не подводит)

Еще ламерский вопрос. МК может испортиться от питани 6 вольт напрямую?

Сообщение отредактировал bfrogg - Mar 20 2011, 20:23
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 12:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016