Страница 1 из 1
Искажение импульса на проводе
Добавлено: Вс май 06, 2012 05:12:30
Mytilus G.
Привет!
Продолжаю играться с фотоприемниками. Ситуация такая:
VD0 освещает оба фотоприемника. ШИМ микрухи обеспечивает нужную частоту мерцания светодиода VD0. Двигаем некий барьер вдоль приемников. Барьер перекрывает свет VD0 сначала одному приемнику, потом - второму. Таким образом, МК определяет направление движения этого барьера. При одном направлении МК включает VD1, при обратном направлении - выключает. Решение о включении/выключении принимается, когда оба приемника облучены, на основании сохраненных данных о их предыдущем состоянии.
Код:
Код: Выделить всё
.def CUR_VALUE = R16 ; текущее значение PIND
.def OLD_VALUE = R17 ; предыдущее значение PIND
.def TMP_VALUE = R18 ; вспомогательный регистр
ser TMP_VALUE
out DDRB, TMP_VALUE ; порты B - на вывод, D - на ввод
out PORTB, TMP_VALUE
out PORTD, TMP_VALUE
ldi TMP_VALUE, 0b01110011 ; настраиваем ШИМ
out TCCR0A, TMP_VALUE
ldi TMP_VALUE, 0b00001001
out TCCR0B, TMP_VALUE
ldi TMP_VALUE, 7
out OCR0A, TMP_VALUE
clr OLD_VALUE
LOOP:
in CUR_VALUE, PIND ; считываем данные с приемников
andi CUR_VALUE, 3 ; обнуляем биты старше второго
cp OLD_VALUE, CUR_VALUE ; если данные те же, что и в пред. витке цикла, ...
breq LOOP ; ... продолжаем цикл
mov TMP_VALUE, OLD_VALUE ; запоминаем старые данные с приемников
mov OLD_VALUE, CUR_VALUE ; замещаем старые данные новыми
cpi CUR_VALUE, 0 ; если хотя бы один приемник не облучен, ...
brne LOOP ; ... продолжаем цикл
; оба приемника облучены
cpi TMP_VALUE, 1 ; если только первый приемник в пред. витке цикла не был облучен, ...
breq LIGHT_ON ; ... включаем VD1
cpi TMP_VALUE, 2 ; если же только второй приемник в пред. витке цикла не был облучен, ...
breq LIGHT_OFF ; ... выключаем VD1
rjmp LOOP ; иначе продолжаем цикл
LIGHT_OFF:
sbi PORTB, 0
rjmp LOOP
LIGHT_ON:
cbi PORTB, 0
rjmp LOOP
Собрал это на макетке, все работает. После повесил VD0 на кабель и началось черт-те что. VD1 горит постоянно, если оба приемника облучены. В противном случае - гаснет.
Кабель - телефонный, около метра длиной. Падение напряжения на нем - 150 мВ. Расстояние от VD0 до приемников роли не играет. Как так?
Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 09:37:06
PETRO
Замените кабель.
Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 13:22:17
Mytilus G.
В смысле, на кабель другого сечения/длины?
Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 14:43:29
mickbell
Прежде всего, надо бы не гадать, а проверить осциллографом форму импульсов на выходах TSOP-ов. А там видно будет, что делать.
Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 15:15:02
Mytilus G.
Взял более короткий кабель с сечением 2,5. Все работает. Получается, проблема была в сопротивлении, только вот не пойму, каким образом сопротивление выдало такой результат.
К сожалению, осциллографа нету. Если проблема в искажении частоты импульса, то из-за чего это вообще может происходить? Из-за сопротивления, опять же?
Как я понимаю, импульс превращается в синусоиду, да? И может ли это влиять таким образом?
Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 16:25:56
mickbell
Например, может влиять индуктивность длинного тонкого провода. Жалко, что нет осциллографа, было бы любопытно увидеть, как сравнительно короткий провод заваливает импульсы.
Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 16:32:02
Mytilus G.
Мне самому интересно. Только вот не могу сейчас себе позволить приобретение осциллографа. Из-за ремонта в квартире каждая копейка на счету.

Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 17:32:12
Леонид Иванович
Скорее всего, помешала емкость кабеля. Попробуйте поставить подтягивающие резисторы 4.7 кОм с PD0, PD1 на VCC.
Re: Искажение импульса на проводе
Добавлено: Вс май 06, 2012 17:38:34
Mytilus G.
Ок, спасибо! Прикуплюсь резисторами - буду экспериментировать.
Re: Искажение импульса на проводе
Добавлено: Пн май 07, 2012 16:04:30
Mytilus G.
Увы, но не помогло. Как я понимаю, ТСОП при облучении замыкает вывод OUT на землю, а при отсутствии облучения - на "плюс". Так что подтягивающие резисторы тут не обязательны. Проверил мультиметром, при использовании и телефонного, и толстого проводов облученный приемник выдает 5,5 мВ на OUT. Мне остается предположить, что телефонный провод искажает импульс на светодиод, из-за чего ТСОП при постоянном облучении кратковременно изменяет сигнал OUT, запутывая этим микруху.
Как уже писал, импульсы на выходе телефонного провода тестить нечем. Но если следовать предположению, что индукция поганит импульсы - что посоветуете? Ведь мне нужно будет посадить VD0 на кабель в несколько метров длиной. Тут и толстый провод может нарожать помех.
Re: Искажение импульса на проводе
Добавлено: Пн май 07, 2012 16:22:38
Enman
поставь последовательно в сигнальный провод возле фотоприёмника 75-100 Ом...да и питание на фоториёмники через RC-фильтры(47 Ом 47 мкФ).
Re: Искажение импульса на проводе
Добавлено: Пн май 07, 2012 16:29:42
Mytilus G.
Фильтры стоят. Сопротивление тоже ставил - толку нет.

Re: Искажение импульса на проводе
Добавлено: Пн май 07, 2012 21:48:23
Леонид Иванович
Mytilus G. писал(а):ТСОП при облучении замыкает вывод OUT на землю, а при отсутствии облучения - на "плюс". Так что подтягивающие резисторы тут не обязательны
На "плюс" он не замыкает. Внутри стоит транзистор с открытым коллектором, и слабый подтягивающий резистор на 100 кОм.
Если фотоприемники висят на длинном кабеле, прямо на их ножках нужны конденсаторы с земли на питание. Хотя бы 0.1 мкФ.
Re: Искажение импульса на проводе
Добавлено: Пн май 07, 2012 22:46:47
Mytilus G.
В моем случае, на длинном кабеле висит светодиод. А на светодиод конденсатор не поставишь. Иначе импульс совсем изуродуется. Но в будущем приемники тоже должны быть на кабеле.
Re: Искажение импульса на проводе
Добавлено: Вт май 08, 2012 04:07:53
Enman
Mytilus G, тебе написали про практичекси открытый коллектор на выходе фотоприёмника, который "валит" положительный фронт импульса, если в фотоприёмнике 100 кОм на выходе. И никто не предлагает в эту цепь ставить конденсаторы. Есть обычные варианты буферов, например, на серии 74НСхх, или двухтактный повторитель на пнп-нпн транзисторах. И лучше бы ты уж приводил реальную схему со своими фильтрами и светодиодами (которые без резисторов ???!!!), а не картинку общего вида.
Re: Искажение импульса на проводе
Добавлено: Вт май 08, 2012 15:19:37
Mytilus G.
О'кей! То, что на схеме светодиоды без резисторов - согласен, мой косяк. Остальные отличия приведенной схемы от реальной появлялись после создания этой темы, в процессе поиска решения проблемы. Поэтому в схеме они не отображены.
Но давайте по порядку. Не догадался я на принципиальной схеме обозвать ТСОПы, поэтому буду называть их PD0 и PD1, по названию ног МК, к которым их привязал. Двигаем барьер между парой ТСОПов и светодиодом в направлении PD0-PD1 (то есть "справа налево" на схеме). Когда барьер прошел, и оба приемника облучились (на портах D0 и D1 логический ноль), МК "смотрит", какой приемник облучился последним - PD1. Это значит, что надо зажечь VD1.
Пускаем барьер обратно. После его прохождения последним облучился ТСОП PD0, и VD1 погас. Так получается, если VD0 непосредственно на макетке или на толстом кабеле.
А теперь возьмем тонкий кабель. При подаче питания на схему VD1 загорается сразу. То есть МК принял на порты D0 и D1 логические ноль и единицу соответственно, а следом за этим - два логических нуля. И это без всякого барьера.
Едем дальше. Закрываем приемник PD0 от облучения (на портах D должно быть 0b00000001). При этом VD1 гаснет. Получается, МК сначала прочитал PIND как 0b00000001, а потом - как 0b00000000. Снова облучаем оба ТСОПа (на портах D должно быть 0b00000000). Но вместо этого МК читает PIND как 0b00000010, а потом - 0b00000000. И VD1 снова горит. Получается такая таблица:
Код: Выделить всё
┌─────────────────────────────┬──────────────────────┐
│Подаваемые поочередно сигналы│Как их воспринимает МК│
╞═════════════════════════════╪══════════════════════╡
│0b00000000, 0b00000001 │0b00000001, 0b00000000│
├─────────────────────────────┼──────────────────────┤
│0b00000000, 0b00000010 │0b00000001, 0b00000000│
├─────────────────────────────┼──────────────────────┤
│0b00000001, 0b00000000 │0b00000010, 0b00000000│
├─────────────────────────────┼──────────────────────┤
│0b00000010, 0b00000000 │0b00000010, 0b00000000│
└─────────────────────────────┴──────────────────────┘
"Либо что-то случилось, либо одно из двух" (© "Следствие ведут колобки")
ИМХО, если определить причину такого поведения, решение проблемы придет само собой.
Re: Искажение импульса на проводе
Добавлено: Вт май 08, 2012 16:02:45
mickbell
Mytilus G. писал(а):Мне самому интересно. Только вот не могу сейчас себе позволить приобретение осциллографа. Из-за ремонта в квартире каждая копейка на счету.

А занять у кого, или сходить к осциллографу в гости?

Тут наверняка тащить немного придётся. Потому что не очень весело искать чёрную кошку в тёмной комнате, точно не зная, а не собака ли там на самом деле.
Re: Искажение импульса на проводе
Добавлено: Вт май 08, 2012 18:34:52
Mytilus G.
Увы, но владельцы осциллографов в кругу моих знакомых отсутствуют.

Re: Искажение импульса на проводе
Добавлено: Вт май 08, 2012 19:37:02
Enman
а ты что подаёшь на светодиоды? надо несущую 36 кГц, а не потенциал...Для схемы барьера на основе простой подсветки надо к фотодиодам подключить компараторы, а с них - на мк...
Re: Искажение импульса на проводе
Добавлено: Вт май 08, 2012 19:47:41
Mytilus G.
Безусловно, подаю несущую, только в моем случае, это 38 кГц (TSOP1738). Решил компараторы не использовать в целях удешевления конструкции. Тем более, что при засветке приемника его сигнал со стабильных 5 В падает практически до 0 В. Это МК прекрасно фиксирует без компаратора, используя собственные подтягивающие резисторы.
Более того, проблема решилась заменой МК. То ли потому что новая микруха имеет более шустрый RC-генератор, то ли после пересчета параметров ШИМа под новую тактовую частоту импульсы стали больше нравиться ТСОПам... Одним словом - получилось.
