Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Вс дек 21, 2014 15:13:57

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

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

Ср дек 24, 2014 09:36:13

pixar писал(а):Я смог предположить только срыв захвата clock PLL .

Это ни о чём...

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

Ср дек 24, 2014 23:21:41

Вот смотрю на схему интерполятора от 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 KiB) Скачиваний: 1012

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

Чт дек 25, 2014 09:38:56

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

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

Вт янв 06, 2015 11:01:49

Перед Новым Годом прицепил TCXO от мобилы на 38.400М к F050F4... без PLL... от "нечего было делать"... Показания стоят как вкопаные... ничего не плавает (нет влияния PLL)... Из-за более низкой опорной верхняя измеряемая частота конечно снизилась... но всё равно выше 100МГц... ~120МГц max...
На STM8S003 было получено 72МГц max... в реале...

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

Чт янв 08, 2015 16:07:33

Как я понимаю основная сложность в применении малоногих контроллеров - отсутствие отдельного вывода 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.

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

Вт янв 13, 2015 18:21:09

Можно кончено входную частоту подавать через вход захвата - но тогда не используется делитель (он стоит дальше), и частоты измерения не превышают половины тактовой.

Если "пробросить" входной сигнал через блок захвата-сравнения, то уже можно использовать входной делитель и измеряемые частоты вырастут в 8 раз.

Единство противоположностей???
Не удастся "пробросить"... таймер просто не станет считать...

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

Ср янв 14, 2015 16:22:17

Не совсем по теме, но может кому пригодится . Полная замена процессора в частотомере HP5370 на самодеьный. Сначала на базе Atmel at91 а вторая версия на базе BeagleBone с эзернетот и прочими штучками. Интересен не только сам проект, но и его исходники. http://www.jks.com/5370/5370.html

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

Пт сен 25, 2015 10:00:40

Проверил идею с пробросом входного сигнала. Работает. Собственно вот код Reciprocal counter stm32f030c4, lcd - nokia1202, keil 5. Должен мерить до f/2 то есть до 24 мегагерц. Проверял где то до 11 на макете.
Если есть заинтересованные в продолжении проекта - пишите. Для готовой конструкции нужно разработать схему входной части, печатную плату всего, ну и дописать всякие сервисные возможности, как то регулировка времени измерения, калибровка, включение делителя ну и т.д. насколько хватит фантазии. Я могу взять на себя программную часть.
Возможно потом можно будет приделать аналоговый интерполятор. Я прикидывал, сделать вроде можно (а может и нет, макетирования не проводил).
Вложения
fmeter-stm32f030c4p-master.zip
исходники
(31.93 KiB) Скачиваний: 502

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

Вт сен 29, 2015 12:52:25

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

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

Вт сен 29, 2015 17:46:52

Galizin писал(а):Если есть заинтересованные в продолжении проекта - пишите.

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

Спасибо.

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

Ср сен 30, 2015 07:36:43

Спасибо откликнувшимся.
Я как раз экспериментировал с 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 раз.

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

Ср сен 30, 2015 09:22:25

Galizin писал(а):Я как раз экспериментировал с STM32F030F4P6.

а НЕХ можно?

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

Ср сен 30, 2015 09:45:04

HEX могу получить только поздно вечером. Возможно быстрее будет скачать и установить keil 5, открыть проект и нажать F7.

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

Ср сен 30, 2015 09:53:58

проще на F050/031 с 32-битным TIM2.
вот прошивка с накопительным режимом:
fc-f050-01.hex
(30.77 KiB) Скачиваний: 734

режимы: прямой счет (3 режима с разными внутренними/внешними делителями), обратный (измерение ШИМа до 100кГц), RPM, и простой счетчик.
схема:
sch.png
(33.09 KiB) Скачиваний: 952

управление энкодер/кнопки.

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

Ср сен 30, 2015 10:52:16

ncp1400 писал(а):проще на F050/031 с 32-битным TIM2.

Несомненно проще использовать режим внешнего тактирования через TRG вход. Это уже описал Химера. Я специально проверял идею с пробросом через таймер. На f030f4 TRG не выведен.
Что такое накопительный режим я не очень понял. Усреднение по нескольким измерениям?
По поводу счета я тоже не понял. Реализованы оба режима счета и прямой и обратный? Или речь идет только о отображении информации частота или время?

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

Ср сен 30, 2015 11:01:54

да, фактически усреднение - чем дольше меряем, тем выше точность (ессно опора нужна соответствующая).
прямой режим - счет по TIM2_ETR, TIM14 - генератор интервалов (0.1сек для быстрой индикации).
обратный режим - захват по TIM2_CH2/CH3. Низкая частота из-за программной обработки в прерываниях, если задействовать DMA, можно поднять на порядок.

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

Ср сен 30, 2015 12:15:01

ncp1400 писал(а): захват по TIM2_CH2/CH3. Низкая частота из-за программной обработки в прерываниях

Я рекомендую почитать идею Химеры по поводу обратного счета в этой ветке. Можно будет сделать частоту одинаковой, такой же как для прямого счета, то есть до F/2 напрямую или до F*4 с встроенным в контроллер делителем. В вашем случае обратный метод будет счет через TIM2_ETR с одновременным захватом одного из фронтов TIM1 или каким либо другим.
Или возможно я недопонял про низкую частоту и с этим все ОК. Дело в том что измерять частоту обратным методом - это одно, а смотреть ШИМ - это несколько совсем другое.
Как обещал приаттачил hex. Кварц на 8МГц. По мне он не представляет ценности, там даже кнопок пока нет.
Вложения
fmeter.rar
hex
(4.45 KiB) Скачиваний: 380

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

Вс окт 04, 2015 22:03:13

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

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

Вт ноя 17, 2015 11:50:42

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

То есть это максимум и выше 24МГц оно уже не одолеет? Я правильно понял?
Ответить