Микросекундный таймер. На какой железке организовать?

biver72
Offline
Зарегистрирован: 09.11.2016

Доброго времени суток.

В общем вопрос в заголовке.

Хочу ультразвуковой дефектоскоп. По стали. Скорость звука 6000м/с.,  дистанция измерения 0,05 метра.

Разрешение по времени хочется хотя бы 0,1мкс.

Спасибо.

James
Offline
Зарегистрирован: 26.02.2016

1 Мгц?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Собственно таймер в ардуине на 16 МГц, то есть, примерно, 0.07 мкс. Уже на 328ой (Уно, Нано) конечно есть "инпут капча". А вот про  УЗ датчики для стали - не подскажу, ибо не знаю.

biver72
Offline
Зарегистрирован: 09.11.2016

James пишет:

1 Мгц?

1 мкс=1 мгц=1.0E-6 s

biver72
Offline
Зарегистрирован: 09.11.2016

wdrakula пишет:

Собственно таймер в ардуине на 16 МГц, то есть, примерно, 0.07 мкс. Уже на 328ой (Уно, Нано) конечно есть "инпут капча". А вот про  УЗ датчики для стали - не подскажу, ибо не знаю.

А можжно полное название и сслку на даташит?

 

biver72
Offline
Зарегистрирован: 09.11.2016

biver72 пишет:

James пишет:

1 Мгц?

1 мкс=1 мгц=1.0E-6 s

Т.Е. надо 10Мгц.

biver72
Offline
Зарегистрирован: 09.11.2016

А с пьезами нет проблем. простая пищалка и "напильник"

 

biver72
Offline
Зарегистрирован: 09.11.2016

Вот, машинный перевод с даташита:

Количество системных тактовых циклов
с момента, когда таймер включен в первый отсчет происходит может быть от 1 до N + 1 системного тактового сигнала
циклов, где N равняется предделитель делитель (8, 64, 256 или 1024).
 
Простите за неграмотность(все только начинается), как в скетче описывается " N равняется предделитель делитель (8, 64, 256 или 1024)."
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

даташит на слова "atmega 328 datasheet". Ардуино нано - самая распространенная, которая вна Али стоит 130р. Сделана на нем. В даташите читаем про таймер 1. В нем есть инрут капча. Это означает, что зафиксируется подача логического сигнала на определенную ногу (по росту или спаду).

читаем 155 и 173 (управляющие реристры) стандартного Атмеловского даташита. На аглицком, ессно.

Да! Еще стоит добавить, если непонятно, что БОЛЬШЕ ОДНОГО события - не успеть на Атмеге зарегистрировать. Между событиями, чтобы успеть обработать, нужно не меньше 4 мкс. То есть можно завиксировать время события с точностью до тика (0.07 мкс), но чтобы это записать нужно потом потратить 3-4 мкс. Есть програмистские способы немного это обойти, множественными импульсами с пропусками первых событий, но это уже сложное программирование. Или нужно брать контроллер, который работает на более высокой частоте.

То есть, если Вам нужно просканировать отраженный сигнал на все дефекты по глубине - то лучше брать другой контроллер.

Или, как на оптическом рефе, делаем серию импульсов и слушаем по очереди 1-ую мкс, потом вторую, потом третью и так далее до... сколько там у вас мм?- 50? значит примерно до 18-20-ой мкс. Причем, для верности, я бы на каждую глубину сканирования по несколько импульсов давал бы. Сложное это програмирование, чесслово...

С отладкой - задача не одну неделю, причем не в аутсорсе, а на рабочем месте.

------------------

Я про приемник спрашивал, он должен дать четкий фронт на приеме. Этот фронт (каким бы он ни был) можно потом спокойно превратить в логический и подать на ногу контроллера (на Нано - нога D8). Если еще и  уровень отраженного сигнала нужно обрабатывать, то нужен внешний быстродействующий АЦП не ниже 10МГц. И все равно,, желательно, контроллер побыстрее. Хотя можно и на Атмеге сделать.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

либо НИ НА ЧТО не делить.

Учите аглицкий!

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

James
Offline
Зарегистрирован: 26.02.2016

потерял нолик:) 
мне интересно как вы собираетесь делать поверку прибора , даже если его и соберете?

biver72
Offline
Зарегистрирован: 09.11.2016

Ладно, вскрываюсь.:)

Это будет электронная мишень.

Событие одно. Пуля ударила в стальной диск 150х40мм. Звуковая волна (попали в 10-ку), прошла 75 мм и достигла всех трех датчиков одновременно.  0,075м/6000м/с=1,25Е-5с. Этот интервал делим на 10 полей. Получаем разрешение таймера. И надо успеть сохранить данные с трех таймеров. После этого решаем систему из трех квадратных уравнений с двумя переменными. На это есть пара секунд, до следующего выстрела. Времени море. А вот с таймерами... Самая быстрая https://ru.aliexpress.com/item/-/32680588531.html?spm=2114.13010308.0.0.QeCB4r&detailNewVersion=&categoryId=400103. Успеет, как вы думаете?

пс. Мне очень стыдно,что за 30 лет с паяльником, я только сейчас решил сам написать программу.

Раньше удавалось найти готовые *.hex or *.bin.

To "wdrakula": Эхолот из полведра П416 могёшь?

 

 

 

biver72
Offline
Зарегистрирован: 09.11.2016

Ну да...английский только аналоговые аббревиатуры:...(

biver72
Offline
Зарегистрирован: 09.11.2016

И всё-таки надеюсь на вашу помощь...

biver72
Offline
Зарегистрирован: 09.11.2016

Курю щас вот это:

https://geektimes.ru/post/263210/

Посоветуйте еще ченить? Пожалуйста...

 

James
Offline
Зарегистрирован: 26.02.2016

если мишень, то вам надо 3-4 датчика, и ловить первую волну от удара. для каждого. и вычислять разность по времени 

biver72
Offline
Зарегистрирован: 09.11.2016

James пишет:

если мишень, то вам надо 3-4 датчика, и ловить первую волну от удара. для каждого. и вычислять разность по времени 

Так точно. Для матаматики трех датчиков достаточно.  по первому фронту запускаем тимеры, кроме того, на который пришел вперед(его оставляем в нуле),  по двум другим останавливаем два других. На осцыле при развертке 1 мкс четко видно разницу по трем каналам(осцыл хороший, Флюк 4-х канальный)

 

biver72
Offline
Зарегистрирован: 09.11.2016

Пьезик даёт 8 вольт с фронтом 0.1 мкс.

 

James
Offline
Зарегистрирован: 26.02.2016

мне кажется меги вам с головой хватит:)

biver72
Offline
Зарегистрирован: 09.11.2016

James пишет:

мне кажется меги вам с головой хватит:)

Какой меги? Я в номенклатуре не очень:(

biver72
Offline
Зарегистрирован: 09.11.2016
GarryC
Offline
Зарегистрирован: 08.08.2016

А если мерить чистый звук по воздуху, лучше не будет? Все таки 300м/сек.

James
Offline
Зарегистрирован: 26.02.2016

а в чем лучше? медленнее -лучше?

James
Offline
Зарегистрирован: 26.02.2016


да, там прерываний хватит

biver72
Offline
Зарегистрирован: 09.11.2016

GarryC пишет:

А если мерить чистый звук по воздуху, лучше не будет? Все таки 300м/сек.

Воздух 300, сталь 6000. Для микрофонов источником будет вся поверхность мишени. Хотя, если не удастся справиться с 0.1 мкс, буду пробовать воздух. В надежде, что в точке удара уровень воздушной волны будет выше, чем на краю мишени от стали в воздух. Опять же, пневматика поршневая, надувная и мелкашка...по стали точно будет работать. а по воздуху - слишком разные параметры удара.

Как придет мозг, ход экспериментов буду излАгать, если интересно.

biver72
Offline
Зарегистрирован: 09.11.2016

Делать прерывание таймера по фронту с датчика? Их там три, с разностью 0.1 мкс. Сомневаюсь. Три значения сохранить...

biver72
Offline
Зарегистрирован: 09.11.2016

Спокночи всем, у нас уже 23-55. В 6-20 вставать на работу:(

StrangerM
Offline
Зарегистрирован: 02.11.2013

Не лучше ли STM32f103 использовать - 72 МГц, куча таймеров, малая стоимость, DMA.

a5021
Offline
Зарегистрирован: 07.07.2013

Без разницы какой МК использовать, но хорошо бы иметь таймеры с несколькими, по числу датчиков + 1, каналами захвата. Соотвественно, для трех датчиков потребуется четыре канала.

На примере тех же МК от STMicro можно использовать следующий механизм получения исходных данных: датчики вешаем на каналы со 2-го по 4-ый. Также сигналы со всех датчиков через схему логического "ИЛИ" подаем на первый канал. Таймер, сконфигурированный соответствующим образом, умеет по фронту на первом канале, т.е. по импульсу с любого датчика, сбросить таймер на ноль и начать счет с нуля.  Пришедшие с задержкой импульсы по остальным каналам захватываются таймером и сохраняются каждый в своем регистре. Таким образом, по окончанию захвата имеем в регистрах идивидуальные значения задержек относительно датчика сработавшего первым и ноль в регистре датчика, который инициировал запуск.

Прелесть данной схемы в том, что все действия выполняются аппаратно и точность зависит только от точности задающего генератора, тактирующего МК. Нет проблемы и с тем, если сигналы приходит с нескольких датчиков одновременно. Каналы у таймера автономные и им пофиг, что там происходит где-то еще. Появился фронт импульса, логика канала переписывает значение счетчика таймера в свой регистр. Все, время события зафиксировано.

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

a5021 пишет:

Без разницы какой МК использовать,

+1! очень правильный вариант

StrangerM
Offline
Зарегистрирован: 02.11.2013

http://pastebin.com/dUjysqwt - Вот интересный пример.На его основе можно построить систему с использованием DMA.

a5021
Offline
Зарегистрирован: 07.07.2013

Использование DMA не дает здесь существенных выгод. Если бы нужно было отследить попадание очереди из какого-нибудь "Узи", то еще куда ни шло, а пульки из винтовки считать, МК и так будет большую часть времени пустые циклы гонять.

biver72
Offline
Зарегистрирован: 09.11.2016

a5021 пишет:

Без разницы какой МК использовать, но хорошо бы иметь таймеры с несколькими, по числу датчиков + 1, каналами захвата. Соотвественно, для трех датчиков потребуется четыре канала.

На примере тех же МК от STMicro можно использовать следующий механизм получения исходных данных: датчики вешаем на каналы со 2-го по 4-ый. Также сигналы со всех датчиков через схему логического "ИЛИ" подаем на первый канал. Таймер, сконфигурированный соответствующим образом, умеет по фронту на первом канале, т.е. по импульсу с любого датчика, сбросить таймер на ноль и начать счет с нуля.  Пришедшие с задержкой импульсы по остальным каналам захватываются таймером и сохраняются каждый в своем регистре. Таким образом, по окончанию захвата имеем в регистрах идивидуальные значения задержек относительно датчика сработавшего первым и ноль в регистре датчика, который инициировал запуск.

Прелесть данной схемы в том, что все действия выполняются аппаратно и точность зависит только от точности задающего генератора, тактирующего МК. Нет проблемы и с тем, если сигналы приходит с нескольких датчиков одновременно. Каналы у таймера автономные и им пофиг, что там происходит где-то еще. Появился фронт импульса, логика канала переписывает значение счетчика таймера в свой регистр. Все, время события зафиксировано.

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

А готовая платка пордается где-нибудь?

biver72
Offline
Зарегистрирован: 09.11.2016
nik182
Offline
Зарегистрирован: 04.05.2015

Тактовая 72МГц. 8 это кварц.

biver72
Offline
Зарегистрирован: 09.11.2016

nik182 пишет:
Тактовая 72МГц. 8 это кварц.

Там что, тактовый с умножением? Или на 9-й гармонике возбуждается? 0_0

 

StrangerM
Offline
Зарегистрирован: 02.11.2013

Для программирования ее еще нужен ST-Link. Например,  https://ru.aliexpress.com/item/Hot-Sale-ST-LINK-Stlink-ST-Link-V2-Mini-STM8-STM32-Simulator-Download-Programmer-Programming-With/32684040486.html?spm=2114.30010708.3.56.0s7kQj&ws_ab_test=searchweb0_0,searchweb201602_2_10093,searchweb201603_1&btsid=d6dabbb7-6b13-40ab-a631-656f24c96f1b

Через USB только связь. А генератор там, вроде, ФАПЧ с синхронизацией от кварца.

StrangerM
Offline
Зарегистрирован: 02.11.2013

По USB программируется maple mini,  но мне больше нравится именно плата по вашей ссылке. Еще Ардуино 1.6.5 нужно.

Расходная такая платка типа нано.

StrangerM
Offline
Зарегистрирован: 02.11.2013

Единственное, мне не верится, что пьезоэлемент с обвеской может дать достаточную полосу пропускания.

ssss
Offline
Зарегистрирован: 01.07.2016

Да ладно вам, пусть делают на Меге и МП39. Зато весело!))))))))))))))

biver72
Offline
Зарегистрирован: 09.11.2016

ssss пишет:

Да ладно вам, пусть делают на Меге и МП39. Зато весело!))))))))))))))

МП39 точто не вывезет. Есть ведро кт312в. Клеймо ВП, все дела... на них триггера в ЕЭС-ке 22 Мгц считали:)

 

biver72
Offline
Зарегистрирован: 09.11.2016

StrangerM пишет:

Единственное, мне не верится, что пьезоэлемент с обвеской может дать достаточную полосу пропускания.

типовой пьезик Ф27 мм, порезан как пицца. Завтра, если краны не поломаются(основная работа) , покажу фронты с даткиков удара по стали.

 

StrangerM
Offline
Зарегистрирован: 02.11.2013

ЕС, вроде, уже на ИС сделана была. кт-312в хорошие транзисторы. Интересно наблюдать развитие элементов радиолюбительских конструкций- лампы, транзисторы, цифровые и цифро-аналоговые серии с ОУ, МК платки.

biver72
Offline
Зарегистрирован: 09.11.2016

StrangerM пишет:

ЕС, вроде, уже на ИС сделана была.

частично. В НЖМД и интерфейсах было полно  логики из дискретный элементов. 155-я на вывозила даже 20 Мгц. хотя по справочнику до 30. 

StrangerM
Offline
Зарегистрирован: 02.11.2013

Хм, а там разве не 133 серия была?

biver72
Offline
Зарегистрирован: 09.11.2016

Там в разных узлах, по потребности. основа 155-я, там, где можно(габариты позволяли) и нужно(быстродействие) ставили деители на 133-й или на транзисторах...

biver72
Offline
Зарегистрирован: 09.11.2016

А уж какой был бесперебойник...в подвале...с двухметровым маховиком...

StrangerM
Offline
Зарегистрирован: 02.11.2013

Я использовал бесперебойники мотор-генератор в экспериментальных стендах электроприводов. Маховиков там не было, считался достаточным момент инерции роторов АМ + СГ.

biver72
Offline
Зарегистрирован: 09.11.2016

там потребления было 52 кВт. и около двух минут на созранение данных. 89 год, БТИ, Благовещенск.

biver72
Offline
Зарегистрирован: 09.11.2016

Чет мы в оффтоп ушли. Нолстальгируем? :)

Logik
Offline
Зарегистрирован: 05.08.2014

Интересная задачка. А чего мишень не круглая? Или 150 - диаметр, а 40 толщина?

Я бы делал просто в лоб. На Нане или промини. Настраиваем, запрещаем прерывания и вызываем

  byte r[1350];
  byte* p;
  
  p=r;
  for(;!PINC;){};
//далее 1350 таких строк
  *p=PINC;p++;
  *p=PINC;p++;
  *p=PINC;p++;
.....

Из предположения что срабатывание датчика дает 1 и все датчики  висят на этом порте. Порт можно и любой другой.

После исполнения, делаем "разбор поллетов" в массиве, считаем, выводим и снова запускаем этот код.

В массиве отсчеты с порта через каждые 3 такта, т.е. 3/16=0,1875мкс. Это даст требуемое максимальное время 250мкс за 1350 отсчетов . Ошибка измерения длительностей 0,1875/2=+-0,09мкс, а в расстояниях +-0,09*10е-6*6000=+-0,5мм. 

На STM с аналогичным подходом через DMA можно и выше цифры сделать, но не думаю что этих мало. Температурная нестабильность, геометрия датчиков и пули не позволят и полмилиметра получить.

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

ПС. Массив конечно лучше динамически создавать и освобождать, но новичку это наверно сложно.

ППС. А не боитесь всяких отраженных волн?