Технический форум по робототехнике.
cudi » 27 окт 2011, 21:06
Собрал я ДД:
http://robozone.su/2008/04/16/modul-upr ... ljami.htmlИ стал подключать к МК... Стал читать теорию ШИМ, но не как он мне не даётся и так и сяк делаю, но не как, прямо мистика какая то ...
Вроде всё подключаю правильно, посмотрите пожалуйста :
- Код: Выделить всё • Развернуть
$regfile = "m16def.dat" ' файл спецификации Меги8
$crystal = 16000000 ' указываем на какой частоте будем работать
'----------------------------------------------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Pind.3 = Output : Dr1 Alias Portd.3 'ногу сконфигурировали как выход и обозвали Dr1
Config Pind.6 = Output : Dr2 Alias Portd.6 'ногу сконфигурировали как выход и обозвали Dr2
Config Pind.5 = Output 'ногу ШИМа 1-ого движка сконфигурировали как выход
Config Pind.4 = Output 'ногу ШИМа 2-ого движка сконфигурировали как выход
'----------------------------------------------------------------------------
Dim Speed As Byte
Speed = 255 ' указываем скорость робота
Config Rc5 = Pinc.6
Enable Interrupts
Dim Address As Byte , Command As Byte
Print "Start" ' выводим в терминал отладочное сообщение
Do
Gosub Прием_rc5
If Command = 255 Then
Gosub Стоп
Waitms 0
Elseif Command = 32 Then
Gosub Прямо
Waitms 0
Elseif Command = 33 Then
Gosub Назад
Waitms 0
Elseif Command = 17 Then
Gosub Влево
Waitms 0
Elseif Command = 16 Then
Gosub Вправо
Waitms 0
End If
Loop
Прием_rc5:
Getrc5(address , Command)
If Address <> 255 And Command <> 255 Then
Command = Command And &B01111111
'Print Chr(12); ' выводим в терминал символ
'Print "Address - " ; Address; ' выводим в терминал адрес
'Print "Command - " ; Command; ' выводим в терминал номер команды
End If
Return
Стоп: ' стоим на месте
Dr1 = 0 : Dr2 = 0 : Pwm1a = 0 : Pwm1b = 0
Return
Прямо:
' едим вперёд на заданной скорости
Dr1 = 0 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed
Return
Назад: ' едим назад на заданной скорости
Dr1 = 1 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed
Return
Вправо: ' делаем Разворот_вправо на заданной скорости
Dr1 = 0 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed
Return
Влево: ' делаем Разворот_влево на заданной скорости
Dr1 = 1 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed
Return
Добавлено спустя 6 минут 8 секунд:И вот ещё что:
Что означает
Передаточное отношение, Скорость без нагрузки, Ток без нагрузки, Ток под нагрузкой?
Если сказано что ток под нагр. 2.1А, то ДД L293D тут точно не подойдет т.к. у него 1А ток нагрузки?
Добавлено спустя 1 час 16 минут 35 секунд:Помогите пожалуйста, очень сильо нужна помощь, уже второй ДД делаю и та же фигня...
Почему он не работает?(((
RootAdmin » 27 окт 2011, 21:30
А напряжения я на входах ДД какие? Если без МК - работает?
cudi » 28 окт 2011, 10:37
ШИМ1 и ШИМ2 по 4.5В.
Только что запустил но работает на 1 порт, в чём мож быть проблема?
Добавлено спустя 5 минут 27 секунд:
Я ещё обвязку не ставил, я только поставил резистор от портов, 74hc00, l298n и кондер на 1000мкф. Но питание везде есть и +, и -
cudi » 29 окт 2011, 22:30
с Шим разобрался, но тут огромный вопрос настал
(
как подключить вот такую штучку ?
http://robotshop.su/e-store/catalog/202/700/Мне Dead сказал что у некоторых таких устро-в есть время заряда кондеров, для этого делают программ. задержку, а потом запускают устро-во, есть ли у этого устро-ва время заряда кондера и какое ?
Кто подключал такое или подобное устройство, подскажите пожалуйста.
boez » 30 окт 2011, 11:37
А ты по ссылке пдф прочитал? Там все написано. С кондерами - это аналоговый датчик, а это - цифровой, он просто выдает 0 если есть предметы ближе 10 см и 1 если их нет. Если я не ошибаюсь конечно.
cudi » 30 окт 2011, 17:58
Я пробывал, не пашет:(
=DeaD= » 31 окт 2011, 07:28
cudi писал(а):Мне Dead сказал что у некоторых таких устро-в есть время заряда кондеров, для этого делают программ. задержку, а потом запускают устро-во
Блин, не у некоторых, а у конкретных цифровых датчиков на базе KTIR.
cudi » 02 ноя 2011, 13:36
Аааааа ребята помогите, вообще какая то мистика, всё верно перепроверил раз 100 но всё не так!
Написал программу ШИМ двигателей, но вроде как всё верно! Перечитал теорию раз 20, но всё ни как...
Нет, двигатели работают, но не так как надо, просто у меня большеватый робот и мне нужно, например, что
при повороте робот крутил не одним мотором, а двумя в разные стороны, иначе он не сдвинется с место.
Взял программу от сюда:
http://robotsspace.ucoz.ru/forum/3-443- ... 1255777610Работает как надо, но мне нужно чтобы на Си, т.к. каркас программы написан на WinAVR.
Смотрите что я пишу:
- Код: Выделить всё • Развернуть
#define F_CPU 16000000UL
#include <avr/io.h>//библиотека ввода/вывода
#include <util/delay.h>//библиотека ввода/вывода
int main (void)
{
int speed = 255;
TCCR1A = 0b11110011; //fast pwm 10 bit
TCCR1B = 0b01001001; // fast pwm 10 bit
TIMSK = 0x00;
TCNT1 = 0x03ff;
OCR1A = speed;
OCR1B = speed;
DDRC = 0x00; // мини шарп
PORTC = 0x80; // мини шарп
DDRD = 0xff; // ДД
//PORTD = 0x00;
for (;;)
{
if (!(PINC & (1<<PINC7))) // Если лог "0", заначит пришли изменения
{
// Едим влево
PORTD |= _BV(PD3); // установить "1" на линии 1 порта C
PORTD &=~ _BV(PD6); // установить "0" на линии 2 порта C
OCR1A = speed; // скорость ШИМ
OCR1B = speed; // скорость ШИМ
}
else {
//ехать прямо
PORTD |= (1<<3)|(1<<6);
OCR1A = 255;
OCR1B = 255;
}
if (!(PINC & (1<<PINC6))) // Если лог "0", заначит пришли изменения
{
//Едим Вправо
PORTD &=~ _BV(PD3); // установить "1" на линии 1 порта C
PORTD |=_BV(PD6); // установить "0" на линии 2 порта C
OCR1A = speed; // скорость ШИМ
OCR1B = speed; // скорость ШИМ
}
else {
PORTD |= (1<<3)|(1<<6);
OCR1A = 255;
OCR1B = 255;
}
}
}
Программа на таймер1 расчитана, fast pwm 10 бит (только с ним работает). Что не так? Почему она крутит одним мотором при повороте
Подскажите что пересмотреть?
cudi » 02 ноя 2011, 18:52
Люди пожалуйста помогите, я не могу найти свою ошибку, их нету... Но почему на бейсике (я с него всё сдирал), при повороте работают 2 мотора, один вперед тянет, другой назад.. А на си никак...
Сравните:
- Код: Выделить всё • Развернуть
PORTD |= _BV(PD3); // установить "1" на линии 1 порта C
PORTD &=~ (1<<6); // установить "0" на линии 2 порта C
OCR1A = speed; // скорость ШИМ
OCR1B = speed; // скорость ШИМ
и Бейсик:
- Код: Выделить всё • Развернуть
Разворот_влево: ' делаем Разворот_влево на заданной скорости
Dr1 = 1 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed
Return
Предилители одинаковые (по одному), только в бейсике работает 8 битный ШИМ от таймера 1, а у меня 10битный ШИМ!
Блин люди у кого есть примерчики для двигателей ШИМ и для Си, просто я не где не могу найти пример, и гугли, и рамблер.. и на робофоруме искал, везде одна теория(((
boez » 02 ноя 2011, 19:38
Ты для начала сделай одинаковые значения скорости в сишной проге и в бейсиковой, а то ты в бейсике даешь шим 100%, а в си - 25%. А потом сравнивай. Может 25% просто мало, чтоб раскрутить один из моторов при развороте?
cudi » 02 ноя 2011, 20:15
А можешь ткнуть носом на этот участок. где нужно выбирать шим в 100% ? а то я не понял что то...
dccharacter » 02 ноя 2011, 23:35
boez » 03 ноя 2011, 13:09
cudi писал(а):А можешь ткнуть носом на этот участок. где нужно выбирать шим в 100% ? а то я не понял что то...
Могу. Но не хочу. Извини.
cudi » 04 ноя 2011, 10:31
boez писал(а):cudi писал(а):А можешь ткнуть носом на этот участок. где нужно выбирать шим в 100% ? а то я не понял что то...
Могу. Но не хочу. Извини.
Да ладно )) ты не знаешь)) сказал что то про проценты ШИМ и всё)
Добавлено спустя 29 минут 32 секунды:Пожскажите пожалуйста в теории, если ставить прерывания от оптопары с робофорума, то какие регистры надо программировать и какой вектор брать ?
HarryStar » 04 ноя 2011, 12:01
Мне кажется вам надо все забыть и стереть и начать изучать программирование заново. Вы давно перепрыгнули через свои знания и теперь не понимаете уже ничего. Помогать вам бесполезно. Изучайте основы, мигайте светодиодом.