roboforum.ru

Технический форум по робототехнике.

Датчик касания дифференциальный ИК

Ответить

Re: Датчик касания дифференциальный ИК

Dmitry__ » 12 окт 2015, 03:02

Поковырял прошивку на выходных. Фильтр данных ацп присутствует. Фильтр скользящего среднего, ширина фильтра задается "cyclesAveragedIR", который "must be a power of 2, max 64" и равен 8. Т.е. наши 2кгц. делим на 8 = 250 герц :cry: . Ну, можно учесть более ранний отклик фильтра (фчх такого фильтра линейная), имеем около 500 герц.

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

Угадайте что это?
Код: Выделить всёРазвернуть
   // Readings have been collected into all three of nearData, farData, and offData.
   // We are looking for a pullup resistor of no more than 75K on the output to indicate that we should use a digital output.
   digitalOutput = offData_sum + nearData_sum + farData_sum >= (3600UL * cyclesAveragedIR * 1024UL * 3)/(75000UL + 3600UL);


Да, это тест пина, есть подтяжка или нет :D
Т.е. подключены 3 (ТРИ) фильтра скользящего среднего для определения резистора на входе пина, при этом в прерываниях делается постоянный опрос бита разрешения (только ради этого прикола). Потом данные сравниваются с эпичным числом "(3600UL * cyclesAveragedIR * 1024UL * 3)/(75000UL + 3600UL)" и после этого принимается решение - а есть ли резистор на входе пина?
Само прерывание - в лучших традициях c++ со структурами и методами, что приводит вот к такому сохранению контекста:
Код: Выделить всёРазвернуть
  40:   1f 92          push   r1
  42:   0f 92          push   r0
  44:   0f b6          in   r0, 0x3f   ; 63
  46:   0f 92          push   r0
  48:   11 24          eor   r1, r1
  4a:   2f 93          push   r18
  4c:   3f 93          push   r19
  4e:   4f 93          push   r20
  50:   5f 93          push   r21
  52:   6f 93          push   r22
  54:   7f 93          push   r23
  56:   8f 93          push   r24
  58:   9f 93          push   r25
  5a:   af 93          push   r26
  5c:   bf 93          push   r27
  5e:   ef 93          push   r30
  60:   ff 93          push   r31

И соотв. к такому же восстановлению контекста. Т.е. если в таком прерывании больше ничего не делать то это 117кгц. А еще в прерывании есть ожидалка :shock:
Код: Выделить всёРазвернуть
   while (TCNT0 < 3 * 8) {}  // delay a little until the ADC s/h has taken effect. 3 ADC clocks should be enough, and 1 ADC clock is 8 timer 0 clocks.


Которая, кста, не делает того что подумал автор.
А еще, и еще, а потом, и к этому, а после, и в конце :)
Все, я спать...

Re: Датчик касания дифференциальный ИК

barakuda62 » 13 окт 2015, 02:18

Диман... Это всяко ловчее чем брушелесики, пусть даже и код не фонтан, ну признайся ! чё уж там. 8)
Вот замер по 9 точкам без загонов, и печать слоем 100 микрон в 1 слой, фактически он его вмазал в ABS покрытие стола, что бы там ни было а оно работает, и работает нормально даже на самосборе.
P1010021.JPG

P1010022.JPG

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

Re: Датчик касания дифференциальный ИК

Dmitry__ » 13 окт 2015, 05:56

barakuda62 писал(а):и печать слоем 100 микрон в 1 слой, фактически он его вмазал в ABS покрытие стола, что бы там ни было а оно работает

ППЦ, 13 страниц доказательств, что с этим можно печатать :)
Я просил сделать тест, пока один игнор. Я не против этого датчика, если бы вы привели результаты теста, и он обеспечил точность да хоть в 3 сотки, я бы успокоился. В 0.1мм точность не интересует совсем.
Наклеить скотч, сделать несколько G30 с разным рисунком маркером на скотче. Это так трудно? На фига мне эти примеры с замерами по тцать точек? Это не тест датчика касания.

barakuda62 писал(а):ну признайся ! чё уж там.

Признаюсь, как увижу результат теста на скотче :P

Добавлено спустя 1 час 32 минуты 44 секунды:
Ну шо? Проверил, пичалька :)

Код: Выделить всёРазвернуть
03:07:11.501 : Bed X: 7.90 Y: 14.00 Z: 2.96
03:07:11.800 : ok
03:07:11.802 : echo:endstops hit:  Z:2.97
03:07:53.895 : N334 G30 *62
03:07:56.022 : Bed X: 7.90 Y: 14.00 Z: 2.57
03:07:56.323 : ok
03:07:56.323 : echo:endstops hit:  Z:2.57

2.96 - чистый белый участок скотча. 2.57 - черточка синим маркером. О.4мм. толщины, кажись много для такой черточки. Скотч - удачной покупки :ROFL:
IMG_3792.JPG


Добавлено спустя 1 час 32 минуты 14 секунд:
И еще один тестик. Давно хотел проверить этот датчик на горящей спичке. :) Спичек не нашел, взял галогенку 40ватт. Поверхность не менял, просто вкл/выкл лампа:
Код: Выделить всёРазвернуть
04:40:43.554 : N104 G30 *63
04:40:46.409 : Bed X: 0.00 Y: -3.00 Z: -10.49
04:40:50.778 : N108 G30 *51
04:40:53.613 : Bed X: 0.00 Y: -3.00 Z: -10.48
04:40:59.219 : N111 G30 *59
04:41:02.419 : Bed X: 0.00 Y: -3.00 Z: -10.76
04:41:06.594 : N115 G30 *63
04:41:09.880 : Bed X: 0.00 Y: -3.00 Z: -10.75

Да и по морганию светодиода все понятно, без движения по "Z". Выставляем уровень так, чтоб светодиод мигал. Включаем лампу накаливания и направляем на датчик. Светодиод полностью зажигается, показывая что он все видит :D
Кста, barakuda62, а картинка-то у тебя не очень. Буква "A" - хлам. Надеюсь это просирающаяся голова, а не результат датчика :)

Re: Датчик касания дифференциальный ИК

setar » 13 окт 2015, 12:49

куда дальше двигаемся ?
держу в руках оптическую голову от cdrom, думаю может ее попробуем прикрутить ?

Re: Датчик касания дифференциальный ИК

barakuda62 » 13 окт 2015, 14:31

setar писал(а):куда дальше двигаемся ?
держу в руках оптическую голову от cdrom, думаю может ее попробуем прикрутить ?

Если делать тесты как Диман, на разных да к тому же разноцветных столах, то любая оптика тут не пойдёт, ведь ясно же что разная поверхность даст разное отражение.
Тут надо пояснить, работаем с одной поверхностью.

Re: Датчик касания дифференциальный ИК

setar » 13 окт 2015, 15:21

не согласен: лазерный дальномер на принципе триангуляции работать будет на любой поверхности.
лазер \ _поверхность_ / фотодатчик
или еще круче
лазер \ _поверхность_ / линейная матрица ПЗС

Добавлено спустя 2 минуты 23 секунды:
у меня вообще мысль крамольная :
хочу чтобы датчик от повехности воды работал - для построения матрицы коррекции базовой оси (той но которой X бегает)
как показывают мои замеры она чато тоже не идеальна, до 0.1 прогибы бывают

Добавлено спустя 34 секунды:
ставим на стол емкость плоскую, заливаем водой и калибруем базовую ось.

Re: Датчик касания дифференциальный ИК

Dmitry__ » 13 окт 2015, 15:37

barakuda62 писал(а):ведь ясно же что разная поверхность даст разное отражение.
Тут надо пояснить, работаем с одной поверхностью.

Ты думаешь, что твой алюминиевый стол с чистой поверхностью, а рядом сопля abs - это не разная поверхность? Ню-ню. Да это будет круче чем синий маркер на скотче. Ты себе представляешь контраст: отражающая способность чистого алюминия и пластика? А тест с лампочкой - это одна поверхность, только разная тень в разных местах, на солнце это вообще будет жесть :wink:
setar писал(а):держу в руках оптическую голову от cdrom, думаю может ее попробуем прикрутить ?

Это готовый датчик уровня, но пипец какой сложный, лучше реле :)
В сидиромных головах есть зачетная микросхема - координатный фотодетектор.
http://www.datasheetlib.com/datasheet/2 ... #datasheet
Вощем впрягаться в "Focus servo : astigmatic method" :o

setar писал(а):куда дальше двигаемся ?

Если про датчик автора, то уменьшать апертуру оптики. Вместо светодиодов - лазеры, на фотодиод оптику. Надо диаметр пятен от светодиодов доводить до разрешающей способности датчика. Тогда уйдем от ошибок освещенности. Но это опять очень точно/сложно, лучче реле :)

Re: Датчик касания дифференциальный ИК

dccharacter » 13 окт 2015, 16:09

setar писал(а):Добавлено спустя 2 минуты 23 секунды:
у меня вообще мысль крамольная :
хочу чтобы датчик от повехности воды работал - для построения матрицы коррекции базовой оси (той но которой X бегает)
как показывают мои замеры она чато тоже не идеальна, до 0.1 прогибы бывают

Добавлено спустя 34 секунды:
ставим на стол емкость плоскую, заливаем водой и калибруем базовую ось.

А нафик тебе её в горизонт выводить? Её нужно делат параллельно плоскости, проходящей по направляющим оси Y. Я в теме про брушлессики запостил фотку, как это щупом делается - кладётся брусок высокоточный (например основа прямого угла из инструментальной стали или уровень) на направляющие и по щупу подкручивается тот или иной мотор до срабатывания проба. А потом уже по пробу стол выводится.

Re: Датчик касания дифференциальный ИК

setar » 13 окт 2015, 16:15

тут ключевая мысль не в горизонтальности а в линейности.
хотя это уже погоня за сотками

Re: Датчик касания дифференциальный ИК

Dmitry__ » 13 окт 2015, 16:26

Вах-вах-вах
http://www.diyouware.com/DiyoPCB-MKI
И начальная страница там интересная

Re: Датчик касания дифференциальный ИК

Dmitry__ » 13 окт 2015, 21:08

Ой, забыл сказать. Это еще не конец. Надо искать диоды как у автора. Все мои результаты относятся к простым диодам (хоть я и старался найти узконаправленные). Так как результатов тестов от тех кто имеет датчик автора мы не узнаем :roll:, ждем отстоя пены.

Re: Датчик касания дифференциальный ИК

Акелла » 13 окт 2015, 22:58

У меня имеется датчик купленный у автора.
Вообщем кто желает тесты могу сделать их,
распишите алгоритм теста который хотите увидеть, ПОДРОБНО что куда и как. постараюсь все по пунктам описать без хорошо или плохо только чистые цифры.

Re: Датчик касания дифференциальный ИК

Dmitry__ » 13 окт 2015, 23:19

Наклеить на стол кусок белого скотча. Сделать над этим местом 3 раза G30 (для статистики). Маркером начертить короткий штрих (прямо под датчиком). Сделать еще 3 раза G30. Еще сделать один штрих маркером. Еще 3 теста G30. Лог данных скинуть на форум. Можно провести несколько таких тестов. Если штрихи удачно попадут между фокусом светодиодов, то можно получить очень неожиданный результат.
Примерно как у меня:
download/file.php?id=38548&t=1
Второй тест - проще:
Делаем G30 над белой поверхностью. Направляем лампу накаливания на стол. Делаем G30. И так 3 раза. Смотрим данные координаты "z". Лог на форум.

Re: Датчик касания дифференциальный ИК

de-si-gn » 14 окт 2015, 21:14

Спаял и я себе для пробы датчик, диоды и транзистор вытащил из оптопары.
Расположение диодов на плате отличается от авторского варианта, D2 стоит ближе к приемнику, сделал как у barakuda62.
Первые испытания руками показали, что на черной поверхности датчик срабатывает на 10мм, на белой около 20мм.

опто.jpg


плата.jpg

Re: Датчик касания дифференциальный ИК

Акелла » 15 окт 2015, 00:40

Dmitry__ писал(а):Наклеить на стол кусок белого скотча. Сделать над этим местом 3 раза G30 (для статистики). Маркером начертить короткий штрих (прямо под датчиком). Сделать еще 3 раза G30. Еще сделать один штрих маркером. Еще 3 теста G30. Лог данных скинуть на форум. Можно провести несколько таких тестов. Если штрихи удачно попадут между фокусом светодиодов, то можно получить очень неожиданный результат.
Примерно как у меня:
download/file.php?id=38548&t=1
Второй тест - проще:
Делаем G30 над белой поверхностью. Направляем лампу накаливания на стол. Делаем G30. И так 3 раза. Смотрим данные координаты "z". Лог на форум.


Вообщем незнаю делаю правильно или нет, у меня при срабатывании датчика показывает разницу между соплом и точкой срабатывания (у меня выставленно 2.1, т.е. если опустить на 2.1 сопло вниз то оно будет в 0)
Это касаемо данных,

сделал измерения, каждый тест повторял 3 раза

тест 1
печатная поверхность билдтак цвет черный
все ровно высота срабатывания 2.1, опустил проверил зазор сопла в 0 все отлично.
тест 2
использовал листок для записок желтого цвета
высота выставилась с офсетом на листок т.е. те же 2.1 + толщина листа
тест 3
розовая прозрачная линейка попалась под руку
датчик сработал и на ней без проблем.

тест 4
прозрачная крышка похожая на крышку от сд кейса
датчик показал 2.1 в реале получилось 2


вообщем далее судите сами, если нужно чтото еще проверить пишите.


Rambler\'s Top100 Mail.ru counter