STM32. Быстрый частотомер. Reciprocal counter.

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Леонид Иванович »

Сравнить можно с помощью гистограммы. Или сразу вычислить статистические характеристики. Я для сравнения просто анализировал максимальное отклонение выходного значения интерполятора. Большой джиттер будет у больших ПЛИС, сильно загруженных логикой. Небольшая CPLD и внешняя логика по джиттеру сравнимы, хотя, конечно, наилучшие результаты можно получить на внешней логике. Все зависит от требований. Задача согласования уровней стоит здесь не так остро, потому что не требуется получать минимальные задержки. Лишь бы уложиться в период тактового сигнала микроконтроллера. По входам серия 74ACT напрямую совместима с логикой 3.3 В, а выходной сигнал можно согласовать с помощью одногейтового элемента 74LVC. Хотя пойдут даже просто резисторы. С точки зрения минимизации напряжения питания интерполятор с переключателем тока на транзисторах имеет некоторые преимущества. Но надо отдавать себе отчет в том, что снижение напряжения питания ведет к ухудшению линейности интерполятора. Если ничего больше в CPLD помещать не планируется, то ставить ее только ради интерполятора смысла нет. Если же в ней будут еще и счетчики, тогда применение оправдано. Самый простой схемотехнически вариант интерполятора - это как в FC-510. У него шум получился порядка 1 нс, зато очень просто.
Реклама
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение HHIMERA »

pixar писал(а):Я смог предположить только срыв захвата clock PLL .
Это ни о чём...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
khach
Электрический кот
Сообщения: 1038
Зарегистрирован: Сб сен 12, 2009 15:43:19

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение khach »

Вот смотрю на схему интерполятора от SRS DG645 http://www.thinksrs.com/products/DG645.htm -считается одним из самых крутых приборов по джиттеру <25 ps в зависимости от диапазона. Для управления интерполятором используются дискретные триггера SN74AUC1G74 http://www.ti.com/lit/gpn/sn74auc1g74 хотя большая часть логики упрятана в Xilinx Spartan3. Схема управления несколько отличается от канонической чтобы избежать метастабильностей. Вот думаю, может скопировать для частотомера с интерполяторами?
Вложения
Dg645_interpolator.gif
SRS DG645
(215.8 КБ) 1063 скачивания
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Леонид Иванович »

Если гнаться за рекордными параметрами, то можно что-то подобное скопировать. Но тогда и весь прибор должен соответствовать, иначе нет смысла. Хотя для любительского прибора можно обойтись схемой попроще.
Реклама
Эиком - электронные компоненты и радиодетали
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение HHIMERA »

Перед Новым Годом прицепил TCXO от мобилы на 38.400М к F050F4... без PLL... от "нечего было делать"... Показания стоят как вкопаные... ничего не плавает (нет влияния PLL)... Из-за более низкой опорной верхняя измеряемая частота конечно снизилась... но всё равно выше 100МГц... ~120МГц max...
На STM8S003 было получено 72МГц max... в реале...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Galizin »

Как я понимаю основная сложность в применении малоногих контроллеров - отсутствие отдельного вывода ETR и небольшое количество таймеров. Можно кончено входную частоту подавать через вход захвата - но тогда не используется делитель (он стоит дальше), и частоты измерения не превышают половины тактовой.
Для stm32f030f4 есть 2 связанных таймера 1 и 3. Если "пробросить" входной сигнал через блок захвата-сравнения, то уже можно использовать входной делитель и измеряемые частоты вырастут в 8 раз. Входной сигнал нужно подавать на вход захвата не того таймера, что считает Fin, а того что считает Fref. Сигнал захвата возможно поделенный на 8 через систему связей таймеров (пульс по захвату) можно уже подать на таймер счета Fin. С него уже отдельные фронты входного сигнала можно подавать обратно на таймер Fref для из захвата. Вот акая идея измерения частот до Fref*4 для stm32f030f4 ( то есть до 32*4МГц).
Для stm8 все еще хуже. Там таймеры не связаны. Поэтому связать их можно с помощью внешнего соединения. И тогда обычным способом (таймер Fin формирует шим, фронт которого захватывается таймером Fref) захватывать фронты входного сигнала. Но опять таки все это будет работать до частоты вполовину опорной (16/2 МГц). Для stm8 отсутствует также блок формирования одиночных импульсов по сигналу захвата, поэтому трюк как с stm32 там не проходит. Зато есть режим измерения ШИМ сигнала (сейчас подумал что можно просто использовать режим сброса). В этом режиме по спаду сигнала происходит сброс таймера. То есть таймер будет сбрасываться каждый период сигнала. А это то что надо! Второй модуль сравнения-захвата можно настроить на генерацию единичных импульсов. Эти единичные импульсы будут совпадать по частоте с входным сигналом или с входным сигналом /8. Их уже можно использовать в качестве входного сигнала для обычного способа измерения с помощью 2 таймеров.
Загвоздка только в том, что есть только еще только 1 таймер с регистрами захвата (всего их 2 но один из них используется как делитель). Нужно заставить таймер-делитель также и считать входные импульсы. То есть считать количество сбросов. А этим как раз может заняться repetition регистр, который можно использовать в качестве счетчика. После заданного в нем значения выработается update event котрое может использоваться для подсчета входных импульсов и для останова входного таймера через one pulse mode. Таймер делитель запускает таймер опорной частоты. Этим же таймером захватываются фронты (или спады) входной делонной частоты. Захват постоянный. Как только входной таймер остановится, захват прекратится. В регистре захвата будет последнее захваченное значение последнего периода вх частоты. Типа gate режима. Вот такая идея измерения для stm8.
Реклама
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение HHIMERA »

Можно кончено входную частоту подавать через вход захвата - но тогда не используется делитель (он стоит дальше), и частоты измерения не превышают половины тактовой.
Если "пробросить" входной сигнал через блок захвата-сравнения, то уже можно использовать входной делитель и измеряемые частоты вырастут в 8 раз.
Единство противоположностей???
Не удастся "пробросить"... таймер просто не станет считать...
"Я не даю готовых решений, я заставляю думать!"(С)
khach
Электрический кот
Сообщения: 1038
Зарегистрирован: Сб сен 12, 2009 15:43:19

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение khach »

Не совсем по теме, но может кому пригодится . Полная замена процессора в частотомере HP5370 на самодеьный. Сначала на базе Atmel at91 а вторая версия на базе BeagleBone с эзернетот и прочими штучками. Интересен не только сам проект, но и его исходники. http://www.jks.com/5370/5370.html
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Galizin »

Проверил идею с пробросом входного сигнала. Работает. Собственно вот код Reciprocal counter stm32f030c4, lcd - nokia1202, keil 5. Должен мерить до f/2 то есть до 24 мегагерц. Проверял где то до 11 на макете.
Если есть заинтересованные в продолжении проекта - пишите. Для готовой конструкции нужно разработать схему входной части, печатную плату всего, ну и дописать всякие сервисные возможности, как то регулировка времени измерения, калибровка, включение делителя ну и т.д. насколько хватит фантазии. Я могу взять на себя программную часть.
Возможно потом можно будет приделать аналоговый интерполятор. Я прикидывал, сделать вроде можно (а может и нет, макетирования не проводил).
Вложения
fmeter-stm32f030c4p-master.zip
исходники
(31.93 КБ) 557 скачиваний
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение GARMIN »

Всё это очень интересно и занимательно. Использовать таймеры микроконтроллера для частотомера с приличной точностью весьма интересно и востребовано.
Однако, я никак не пойму, почему никто не делает правильный двухканальный вариант?
По моему опыту, просто частотомер нужен совсем не всегда. Нужно измерять и длительность, время нарастания, отношение частот, фазу, время между импульсами и т.д. Всё это возможно только с применением двух каналов. Можно третий - с делителем ВЧ. Вот на такую штуку с интерполятором на каждый канал я хочу потратить своё время.
Я думаю, что без связки МК-CPLD тут не обойдётся.
У меня есть опыт программирования и того, и другого, а также опыт создания электронных схем. Свободного времени немного, но найдётся. Наработки по входной части тоже есть. Могу скооперироваться с кем-нибудь для получения рабочего прототипа.
Аватара пользователя
vsky
Открыл глаза
Сообщения: 63
Зарегистрирован: Пн апр 06, 2009 18:32:14

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение vsky »

Galizin писал(а):Если есть заинтересованные в продолжении проекта - пишите.
Мне проект интересен. Но практической помощи от меня мало. Я только учусь :dont_know:
Можно ли мне скомпилировать под STM32F030F4P6? Можно ли привести схему(таблицу) подключения lcd - nokia1202?

Спасибо.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Galizin »

Спасибо откликнувшимся.
Я как раз экспериментировал с STM32F030F4P6. Что то заклинило меня написал про С4.
Посмотреть подключение индикатора и всего остального можно в файле hw.h
LCD_CLK A4
LCD_DA A2
LCD_RESET A3
LCD_CE A1
LCD_PWR A0 - питание индикатора через эту ногу, так было проще подключить к макетке.

Применение одноканального варианта легко объяснимо - оно требует в 2 раза меньше усилий на входной формирователь, в 2 раза меньше деталей, и в несколько раз менее сложную программу. А если еще учесть что все это нужно синхронизировать с высокой точностью то сложность и трудоемкость возрастает на порядок.
Идея как раз была сделать частотомер без применения плис, только с одним контроллером и с его аппаратными возможностями. Сейчас я даже не представляю можно ли сделать 2 канала на 1 контроллере, а на 2 - тут уже надо думать как синхрнизироваться.
Сейчас уперся в отсутствие DMA на 2 канале 3 таймера. Его собирался использовать для оценки входной частоты, что бы включить делитель. Включаю делитель сигнала на этом канале на 8, включаю dma по захвату. Потом оценивать соседние показания в массиве в памяти и судить по ним о частоте и необходимости включения делителя на точном измерительном канале 1. Но DMA не оказалось на 2 канале 3 таймера. Нужно либо переходить на 1 таймер, либо придумывать другой механизм оценки входной частоты.
Пока до проверки интерполятора не добрался совсем. Его симуляцию выложу вечером, если есть необходимость. Собственно идею уже обкатал Леонид Иванович. У него в livejournal есть статья про интерполятор для измерения длительности 1 секундных импульсов gps. Правда он почему то не пошел дальше до частотомера, возможно потому что он уже собрал все на плис, или потому что частотомер не является самым нужным прибором.
Последний раз редактировалось Galizin Ср сен 30, 2015 09:42:39, всего редактировалось 1 раз.
Аватара пользователя
vsky
Открыл глаза
Сообщения: 63
Зарегистрирован: Пн апр 06, 2009 18:32:14

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение vsky »

Galizin писал(а): Я как раз экспериментировал с STM32F030F4P6.
а НЕХ можно?
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Galizin »

HEX могу получить только поздно вечером. Возможно быстрее будет скачать и установить keil 5, открыть проект и нажать F7.
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение ncp1400 »

проще на F050/031 с 32-битным TIM2.
вот прошивка с накопительным режимом:
fc-f050-01.hex
(30.77 КБ) 788 скачиваний
режимы: прямой счет (3 режима с разными внутренними/внешними делителями), обратный (измерение ШИМа до 100кГц), RPM, и простой счетчик.
схема:
sch.png
(33.09 КБ) 1018 скачиваний
управление энкодер/кнопки.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Galizin »

ncp1400 писал(а):проще на F050/031 с 32-битным TIM2.
Несомненно проще использовать режим внешнего тактирования через TRG вход. Это уже описал Химера. Я специально проверял идею с пробросом через таймер. На f030f4 TRG не выведен.
Что такое накопительный режим я не очень понял. Усреднение по нескольким измерениям?
По поводу счета я тоже не понял. Реализованы оба режима счета и прямой и обратный? Или речь идет только о отображении информации частота или время?
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение ncp1400 »

да, фактически усреднение - чем дольше меряем, тем выше точность (ессно опора нужна соответствующая).
прямой режим - счет по TIM2_ETR, TIM14 - генератор интервалов (0.1сек для быстрой индикации).
обратный режим - захват по TIM2_CH2/CH3. Низкая частота из-за программной обработки в прерываниях, если задействовать DMA, можно поднять на порядок.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Galizin »

ncp1400 писал(а): захват по TIM2_CH2/CH3. Низкая частота из-за программной обработки в прерываниях
Я рекомендую почитать идею Химеры по поводу обратного счета в этой ветке. Можно будет сделать частоту одинаковой, такой же как для прямого счета, то есть до F/2 напрямую или до F*4 с встроенным в контроллер делителем. В вашем случае обратный метод будет счет через TIM2_ETR с одновременным захватом одного из фронтов TIM1 или каким либо другим.
Или возможно я недопонял про низкую частоту и с этим все ОК. Дело в том что измерять частоту обратным методом - это одно, а смотреть ШИМ - это несколько совсем другое.
Как обещал приаттачил hex. Кварц на 8МГц. По мне он не представляет ценности, там даже кнопок пока нет.
Вложения
fmeter.rar
hex
(4.45 КБ) 450 скачиваний
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение Galizin »

Поменял местами таймер 3 и 1. Это потребовалось потому что у 3 таймера отсутвует связь 2 канала захвата и DMA. Переключил вход на 1 таймер 2 канал (PA9). На T1_CCR1 включется и выключается прескалер в зависимости от входной частоты. На T1_CCR2 прескалер всегда включен на 8. По захвату на CCR2 генерируется запрос к DMA. По запросу сохраняется 6 захваченных значений в массиве. Вычисляем разницу между первым и последним и по этой разнице оцениваем частоту, вернее период. Если частота выше порога - включаем прескалер на 1 канале, ниже - выключаем. Пороги с гистерезисом. Оценка частоты происходит периодически с частотой 48МГц/64K.
hex в аттаче.
Вложения
fmeter.rar
(4.99 КБ) 441 скачивание
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: STM32. Быстрый частотомер. Reciprocal counter.

Сообщение scorpi_0n »

Galizin писал(а):Проверил идею с пробросом входного сигнала. Работает. Собственно вот код Reciprocal counter stm32f030c4, lcd - nokia1202, keil 5. Должен мерить до f/2 то есть до 24 мегагерц. Проверял где то до 11 на макете.
То есть это максимум и выше 24МГц оно уже не одолеет? Я правильно понял?
Ответить

Вернуться в «ARM»