Ик радар срабатывает только на быстро приближающиеся объекты, если препятствие поднести медленно никакой реакции!
МК вроде молотит свои 36КГц проверял осциллографом...
Подскажите может была у кого такая проблема.
roboforum.ruТехнический форум по робототехнике. |
|
|
Korbofos писал(а):Ик радар срабатывает только на быстро приближающиеся объекты, если препятствие поднести медленно никакой реакции!
МК вроде молотит свои 36КГц проверял осциллографом...
Подскажите может была у кого такая проблема.
Korbofos писал(а):Если просто разместить то не видит!
Radist писал(а):Было такое, и именно в ИК барьере. Это все программно лечится. Посылаете зондирующий импульс 1 мс, проверка ответа, затем пауза 8 мс (ноу-хау именно в этой паузе). Длительностью паузы можно поиграть, но вроде бы 8 - это минимум (у меня). Во время паузы чтоб никакого ИК не было! Мне кажется это связано с работой АРУ ТСОПа.
{
unsigned int i,u;
for (u=0;u<14;u++)
{
delay_us(165);
for(i=0; i<12; i++)
{
PORTB.3=1;
delay_us(3);
PORTB.3=0 ;
delay_us(3);
}
};
}
dccharacter писал(а):Мне вообще не нравится через делеи реализация
Radist писал(а):Я сишным кодом поделиться не могу - я ASMатик . У вас срабатывание тсопа как-то индицируется? Если на тсоп посветить пультом - он "видит препятствие"? Думаю да, раз быстрые перемещения он видит. Могу подкинуть алгоритм на задержках.
В даташите приведен тестовый сигнал: 600 мкс есть несущая, 600 мкс нет несущей. Паузу увеличиваем до 8000 мкс. 600 мкс несущей делаем так:
цикл на 21 импульс
выставили бит
пауза 13,9 мкс
убрали бит
пауза 13,9 мкс
декремент счетчика цикла
читаем тсоп, узнаем что он увидел, индицируем результат
пауза 8000 мкс
повторить сначала
ЗЫ. Тема не на месте. Я не считаю это граблями. Грабли - это когда в этом месте у всех ничего не получится. А если у одного не получилось - это не грабли, это электроника
#include <TINY2313.h>
#include <delay.h>
void flash_l()
{
unsigned int i;
for(i=0; i<21; i++)
{
PORTB.1=1;
delay_us(14);
PORTB.1=0 ;
delay_us(14);
}
};
void main()
{
DDRA = 0xff;
DDRD = 0x00;
DDRB = 0xff;
PORTB =0x00;
while (1)
{
flash_l();
if (PIND.6 == 0){PORTA.1 = 1;}
else {PORTA.1=0;}
delay_us(8000);
}
}
Вернуться в Новичкам или основы основ роботостроения.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2