Пн мар 31, 2014 12:31:16
Goodefine писал(а):либо аппаратно с помощью каскадирования таймеров. Вторая задача, видимо, не слишком очевидно решается в STM, если решается вообще.
Еще есть вторичные нюансы, например введение таймаута, если входная частота отсутствует - чтоб не ждать до бесконечности
Пн мар 31, 2014 13:07:14
HHIMERA писал(а):Решается... но ЛИ её почему-то забраковал... ввиду ейной некрасивости... Два таймера... TIM2 и TIM3... как частный случай...
HHIMERA писал(а):Это у же вторично... и особых проблем не должно вызывать...
Пн мар 31, 2014 14:20:22
Вот я и написалGoodefine писал(а):Это не совсем тот метод о котором говорится - вся фишка в том, чтобы периоды измеряемой частоты считать аппаратно. Вычислять сразу по одному периоду и делать статистику на некотором числе измерений ОДНОГО периода не есть правильно...
kybin писал(а):Это пережиток прошлых вариаций. Его нужно убрать. и сделать так:...[дальше идет код]
Goodefine, о чем вы говорите. Код уже написан. Все работает на ура. 2 таймера и минимум нагрузки на ядро (2 строки)Goodefine писал(а):По идее надо три таймера...
Пн мар 31, 2014 14:40:43
kybin писал(а): о чем вы говорите.
Пн мар 31, 2014 14:50:05
kybin писал(а):III. Обработка прерывания TIM1_Update
1. Вычиление частоты
fизм = F_tim1 * TIM4_CNT / TIM1_CCR1
kybin писал(а):и сделать так:Это и вся нагрузка на ядро
- Код:
void TIM1_UP_TIM10_IRQHandler(void)
{
TIM1->SR = ~TIM_IT_Update; // сброс флага TIM1_Update
freqW = HClkFreq * (impCount-1) / TIM1 -> CCR1;
}
Goodefine писал(а):как только приходит первый фронт происходит аппаратный (!) захват измерительного счетчика и счетчика его переполнений
Пн мар 31, 2014 15:00:17
Леонид Иванович писал(а):
Тогда захватывать нужно и счетчик входных импульсов. Не получится одной командой разрешить счет для одного счетчика и захват для двух других. Фронт входной частоты между командами приведет к сбою. Получается, входной сигнал придется подавать сразу на несколько выводов: внешний клок одного таймера и входы захвата других таймеров. Что нельзя назвать красивым решением.
Пн мар 31, 2014 15:01:33
kybin писал(а): о чем вы говорите. Код уже написан. Все работает на ура. 2 таймера и минимум нагрузки на ядро (2 строки)
Я специально выложил исходник, чтоб можно было поиграться. А разрабатывать теории можно бесконечно.
Пн мар 31, 2014 15:26:48
у меня никак. зачем?Goodefine писал(а):Как считаются переполнения счетчика измерительной частоты (168 МГц)?
Это да. Но в моей задаче и этого достаточно. Но я все-таки перепишу на аппаратный захват.ЛИ писал(а):А как узнать impCount? Где это значение должно считываться из таймера? Разве что в прерывании по захвату. И то это работоспособно только для низких частот. Для высоких входных частот нельзя просто взять и считать TIM4_CNT в прерывании по захвату TIM1, его значение уже может быть другим.
согласенGoodefine писал(а): Внешние соединения ног, ИМХО, не самая большая проблема,
Наконец-то вменяемая критика. Конкретно. Я вас изначально как спеца более высокой квалификации воспринимаю. Но есть вопрос:HHIMERA писал(а):Теория и есть основа практики... У вас TIM1 рулит TIM4... а должно быть наоборот... По количеству полных периодов пришедших на TIM4 (их количество и определяет измерительный интервал) считывается количество референс-импульсов в TIM1...
Может оно и работает... слава богу... и как частный случай прокатывает... но в широком смысле и по теории - никак... это не Reciprocal counter...
Пн мар 31, 2014 17:19:18
kybin писал(а):у меня никак. зачем?
У вас TIM1 рулит TIM4... а должно быть наоборот... По количеству полных периодов пришедших на TIM4 (их количество и определяет измерительный интервал) считывается количество референс-импульсов в TIM1...
Как это сделать с помощью TIM4 который считает импульсы? частота которых меняется в 10 раз
Пн мар 31, 2014 17:38:16
Пн мар 31, 2014 19:35:58
Пн мар 31, 2014 20:01:24
Вроде и не каждый сигнал через это проходит.. Обсуждалось.khach писал(а):Ведь сигнал на каждый таймер проходит через синхронизатор
Пн мар 31, 2014 20:17:43
Пн мар 31, 2014 20:47:53
Ну да, после входного делителя все равно синхронизируется. Но ведь по триггерам входного делителя нет никакой синхронизации. Она наступает уже после N деления.HHIMERA писал(а):Каждый... По ETR входной делитель без синхронизатора... а так... каждый...
Пн мар 31, 2014 22:44:41
Вт апр 01, 2014 10:29:00
khach писал(а):Подскажите, как проверить влияние синхронности таймеров STM32 на возможность реализации Reciprocal counter?
Пн июн 02, 2014 00:01:49
Пн июн 02, 2014 00:35:34
Пн июн 02, 2014 01:31:07
Пн июн 02, 2014 01:43:27