Обсуждаем контроллеры компании Atmel.
Ответить

Re: Синус из ШИМ

Пт фев 02, 2024 14:11:54

Alex_ka,

Как работает tiny (в частности, таймеры) я сейчас не помню, но позволю себе покритиковать исходник "в общем".

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

* Константы желательно выносить в одно место, а не "расбрасывать" по всему тексту. Например,
F_PU = 4098000 (кстати, почему F_PU = 4098000? ранее было, что 4.096МГц) - я бы вынес наверх:

Код:
#ifndef F_PU
#define F_PU  4098000
#endif

Тогда частоту можно задавать "вне исходных текстов" (не меняя исходник, компилировать под разные значения частоты).

* имена переменным давать такие, что было бы понятно, что в них. a, b, c - совсем не понятно.
например, 'а' я бы заменил на что-то типа 'carrier_hz' (несущая частота в Герцах)

* к моменту вычисления переменной 'с', переменная 'a' может быть нулевая. И комментарии говорят, что это, вроде как, нормально.
неплохо бы специально эту ситуацию обработать. Иначе (как минимум) может быть деление на ноль при вычислении 'c'.

* конструкция с массивом byte [] - странновато выглядит. Что хотелось выразить? В массиве всего два значения, if-ом (или ((i < 2) ? 3 : 2))не обойтись?

* при частоте менее 55MHz (если быть точнее при F_PU <= 55705600) условие if (c > 65536) никогда не сработает,
зачем там "наворот" с циклом?


Как-то странно выглядит переписывание регистров таймера в цикле. Не надо ли "привязаться" к тикам таймеров, т.е. в обработчиках "безопасно" менять необходимые значения?

====
Ну и "в общем". Честно говоря, не понимаю - зачем данный исходник. У тебя же задача выдать модулированный сигнал. Или я не понимаю?
Несущая - это константа (из набора: 425 Гц, 475 Гц, 725 Гц, 775 Гц)?
Модуляция амплитудная? Что представляет собой модулирующий сигнал? Как он "попадает в микроконтроллер"?

Заводим таблицу (таблицы, если выбирается одна из нескольких частот)
и выводим (например ШИМ-ом) значение из таблицы, умноженное на значение модулирующего сигнала
Все. На выходе фильтр, он должен "задавить" все лишнее (частоту ШИМ) до требуемых значений.

Re: Синус из ШИМ

Пт фев 02, 2024 18:48:38

КРАМ, Топик хочет выдать с проца сигнал 725Гц,775Гц ,модулированный 8-12Гц. Я хочу сделать на проце stm32f401 приемник такого сигнала. Какое оптимальное решение Вы видите?
У меня единственное АЦП с частотой 10кГц подает данные на цифровой фильтр 725 или 775 Гц, выходные данные поступают на цифровой фильтр 8 или 12 Гц, выход данных 8 или 12 Гц с этого фильтра поступают в виде ШИМ на выход и включают исполнительное реле. К сожалению, ЦАПа нет. Я на правильном пути?

Re: Синус из ШИМ

Пт фев 02, 2024 20:48:37

хочет выдать с проца сигнал 725Гц,775Гц ,модулированный 8-12Гц.

Нужно сделать ДВА ШИМа. Одним синтезировать несущую, а вторым модулирующий сигнал. Затем пропустить ШИМ несущей через драйвер нижнего плеча (типа MCP1416), питание которого делаем из фильтрованного ШИМа модулирующего сигнала с подставкой 4,5 Вольта.
Выход фильтруем по спектру несущей с учетом АМ.

Re: Синус из ШИМ

Пт фев 02, 2024 21:46:16

КРАМ, Есть стенд, который дает реальный модулированный сигнал для проверки и настройки приемника таких сигналов. В реальной рельсовой цепи присутствуют и другие сигналы, которых на стенде нет, но они могут нарушить работу приемника, перегрузку его входных цепей и отваливание исполнительного реле. Топик хочет на стенде имитировать все реальные сигналы в рельсе. Идея хорошая, но реально достаточно добавить на стенд еще один заводской генератор ГРЦ с альтернативной несущей и модуляцией, проц не нужен. Я же хочу на проце сделать сам приемник таких сигналов.
p.s. Отваливание реле приемника рельсовой цепи означает ложную занятость перегона и нарушение движения поездов, а это снятие премии со всей службы.

Re: Синус из ШИМ

Пт фев 02, 2024 21:56:31

хочу на проце сделать

Ну и в чем проблема? Берем частоту дискретизации выше частоты несущей, например, в 16 раз. Пишем две таблицы ДПФ - два квадратурных гетеродина с окном Хемминга или Блэкмана (зависит от потребной избирательности). Умножаем принятый текущий массив сигнала на два квадратурных гетеродина с оконной функцией с накоплением двух квадратурных компонент и нормированием. Находим корень квадратный из суммы квадратов квадратурных компонент. Получаем точку модулирующего сигнала. И так далее повторяем, рисуя по точкам модулирующий сигнал. Это классический SDR приемник прямого преобразования.

Re: Синус из ШИМ

Пт фев 02, 2024 22:09:18

КРАМ, А почему в 16 раз, я практически подобрал для 725Гц выборку 10кГц с наименьшими боковыми, так это и выходит примерно 16 раз! Цифровой фильтр Баттерворта 2го порядка такой к примеру.
725гц 10кГц

float DigFil(invar)
float invar;
{
float sumnum=0.0, sumden=0.0; int i=0;
static float states[4] = {0.0,0.0,0.0,0.0};
static float znum[5] = {
3.913e-05,
0.0,
-7.826e-05,
0.0,
3.913e-05
};
static float zden[4] = {
.9824,
-3.545,
5.18,
-3.576
};
sumnum = sumden = 0.0;
for (i=0;i<4;i++){
sumden += states[i]*zden[i];
sumnum += states[i]*znum[i];
if (i<3) states[i] = states[i+1];
}
states[3] = invar-sumden;
sumnum += states[3]*znum[4];
return sumnum;
}
На входе один поток данных, на выходе другой. Никаких умножений, корней и прочей математики не предусмотрено. Или я ошибаюсь?

Re: Синус из ШИМ

Пт фев 02, 2024 22:18:54

Стесняюсь спросить, а в чем смысл этой фильтрации? Что потом делать с выходным потоком?
Насколько я понял, нужен не фильтр, а приемник обнаружитель.

Добавлено after 2 minutes 58 seconds:
почему в 16 раз

Частота дискретизации выбирается из требований к антиалиасинговому фильтру на входе АЦП. Там не требуется никакого особого расчета. Все примитивно просто.

Re: Синус из ШИМ

Пт фев 02, 2024 22:28:45

КРАМ, А какой альтернативный вариант обнаружения? Я делал по типу частотомера, когда не знал про цифровые фильтры.

Re: Синус из ШИМ

Пт фев 02, 2024 22:59:17

Не понял про "альтернативный"... :)
Обнаружитель должен иметь на выходе бинарный выход. 1 - есть сигнал. 0 - нет сигнала.
Поскольку сигнал - это АМ синус, то требуется приемник фильтрующий входной сигнал полосовым фильтром с амплитудным детектором и фильтром-детектором модулирующего сигнала.
Полоса пропускания одноточечного ДПФ обратна времени накопления (длине буфера). Чтобы модуляция 12 Гц попала в полосу пропускания, нужно копить сигнал примерно 20...25 мс.
При частоте дискретизации 725*16=11600 Гц длина буфера составит примерно 256 отсчетов.

Re: Синус из ШИМ

Пт фев 02, 2024 23:14:27

Alex_ka,

почему F_PU = 4098000? ранее было, что 4.096МГц)

Как-то странно выглядит переписывание регистров таймера в цикле. Не надо ли "привязаться" к тикам таймеров, т.е. в обработчиках "безопасно" менять необходимые значения?
Данная запись для протеуса, так как он не сильно адекватный. Убрать из цикла можно только 1 << COM1A0. А 1 << WGM12 убрать не возможно, летят частоты. Я пишу как понимаю, так как я не учился на программиста и занимаюсь при наличии свободного времени где-то пару лет. Я вот здесь читаю сообщения и офигиваю, от высокой материи в сообщениях, есть правда некоторые дельные. А ведь надо было всего получить синус с частотой меньше 1 кГц. Только единственный viiv бросил в личку пример для размышления и Starichok51 разъяснил расчёт таблицы.

Re: Синус из ШИМ

Сб фев 03, 2024 00:12:17

Alex_ka, синус не проблема, стань осциллом на вход ПРЦМ, там сигнал сложнее, а в реальной цепи их там два замешаны. Оставь мечты, пока не поздно:) Втянешься, плохо спать будешь.:)
КРАМ, Данные с выхода фильтра 725Гц получает фильтр 8 или 12 Гц, а выходные данные передаются ЦАПу, или как у меня ШИМу. Выход ШИМ включает исполнительное реле.

Re: Синус из ШИМ

Сб фев 03, 2024 08:03:53

Данные с выхода фильтра 725Гц получает фильтр 8 или 12 Гц

Стесняюсь спросить, а каким таким чудесным способом частота 8 или 12 Гц может оказаться на выходе фильтра 725 Гц? :))) :))) :)))
Может ну его? Радиотехника она такая мутная... :tea:

Добавлено after 5 minutes 49 seconds:
в реальной цепи их там два замешаны.

Откуда тогда взялись рассуждения об амплитудной модуляции? Не возьмете за труд объяснить без собственных домыслов какой же все таки сигнал присутствует на рельсовой паре? Заодно расскажите как изолируется межперегонный стык.

Re: Синус из ШИМ

Сб фев 03, 2024 09:18:37

КРАМ, 8 и 12 Гц получатся после детектирования.
В реальной рельсовой цепи замешаны две частоты с разной модуляцией. Есть еще частоты АРС-АЛС для приемника на локомотиве.
Стыки у нас не изолированы, колесная пара шунтирует цепь и не пропускает частоту на приемник и реле отпадает.
Поэтому ложное отпадание реле приводит к остановке движения, а ложное замыкание к аварии на занятом перегоне.

Re: Синус из ШИМ

Сб фев 03, 2024 11:40:11

8 и 12 Гц получатся после детектирования.

Превосходно. Только у вас где детектор? Вы говорили только о двух фильтрах включенных в обработке потока последовательно. Напомнить как считают детектор для узкополосного сигнала?
В реальной рельсовой цепи замешаны две частоты с разной модуляцией. Есть еще частоты АРС-АЛС для приемника на локомотиве.

И каким способом вы собираетесь обеспечивать избирательность? Вторым порядком БИХ? :))) :))) :)))
Стыки у нас не изолированы, колесная пара шунтирует цепь и не пропускает частоту на приемник и реле отпадает.

У меня такое ощущение, что я задаю вам вопросы не на русском языке, а на суахили... :facepalm:
Я говорил об изоляции стыков ПЕРЕГОНОВ, а не вообще о стыках. Или у вас там в Москве генератор, а во Владике приемник?

Re: Синус из ШИМ

Сб фев 03, 2024 12:35:36

КРАМ, Я еще не программировал детектор, от помощи не откажусь.
Тот код фильтра, что я выкладывал обеспечивает нужную избирательность, на 725 и 775Гц полоса 24Гц. Уже испытано и работает.
Я имел в виду стыки перегонов, дроссель-трансформаторы тоже применяются, но редко.

Re: Синус из ШИМ

Сб фев 03, 2024 13:52:51

Уже испытано и работает.
Тут проблема в том, что часто вроде бы работающее решение оказывается тупиком. И это тот самый случай. Для детектора нужна квадратурная фильтрация. А ее нужно делать не БИХ-ом, а КИХ-ом. Ибо у него линейная ФЧХ.
То есть тупо делать одноточечный ДПФ. Поскольку выход ДПФ является комплЕксной величиной, то получить из него модуль (сиречь, амплитуду) элементарно. Корень квадратный из суммы квадратов Real и Imaginary.
Ну и нет никакого смысла целочисленный выход АЦП для работы в КИХ переводить в плавучку. Никаких дополнительных ништяков мы не получим. Это в БИХ плавучка используется из-за принципиально дробных коэффициентов, но и тогда можно применять фикспойнт, а не плавучку. А фикспойнт является по сути целочисленным форматом.

Добавлено after 2 minutes 56 seconds:
полоса 24Гц.
Причем тут полоса? Избирательность создают не полосой, а уровнем подавления при заданной расстройке. Полоса у фильтра любой избирательности может быть любой. Только толку от этого фильтра никакого не будет.
Приведите АЧХ своего БИХ второго порядка.

Добавлено after 1 minute 33 seconds:
Я имел в виду стыки перегонов

И как отличают один перегон от другого?

Re: Синус из ШИМ

Сб фев 03, 2024 14:30:40

КРАМ,
АЧХ 725Гц.
725гц.jpg
(149.44 KiB) Скачиваний: 45

А изолированные стыки пройденный этап, информация доступна.

Re: Синус из ШИМ

Сб фев 03, 2024 16:06:46

АЧХ

Как и следовало ожидать - полное фуфло. АЧХ фильтров не приводят в линейном масштабе по амплитуде. Только в логарифмическом. Показанная картинка позволяет что либо разглядеть только до уровня 0,1 (это внезапно всего лишь -20 дБ)...
информация доступна.

Мне не охота рыть ради одного предложения. Вам трудно его озвучить? :dont_know:
ЗЫ.
В догон для понимания требуемого АЧХ фильтра.
При нахождении среднего значения в буфере мы получим АЧХ с прямоугольным окном.
Проблема прямоугольного окна в очень высоком уровне боковых лепестков из-за краевого эффекта.
АЧХ прямоугольного окна (шкала частоты в бинах - бин равен обратной времени накопления в буфере величине, например, при накоплении 1 мс бин равен 1 кГц):
Изображение
У окна Хэмминга с этим получше, но начинается растекание спектра, что для нашего случая никакого значения не имеет - просто нужно выбирать время накопления с учетом растекания спектра:
Изображение
Окно Блэкмана-Нуталл:
Изображение

Re: Синус из ШИМ

Пн фев 05, 2024 13:18:08

Превосходно. Только у вас где детектор? Вы говорили только о двух фильтрах включенных в обработке потока последовательно. Напомнить как считают детектор для узкополосного сигнала?
?
Вот схема ПРЦМ. VT1 и VT2 - буферные усилители, VT3 и VT4 - пороговое устройство (типа реле), R13 и C5 - интегрирующая цепь для выделения частоты модуляции, дальше каскады усилителя. Для 8Гц модуляции ёмкости С7, С8 - 30 мкф, для 12 Гц - 20 мкф и соответственно отличаются по индуктивности трансформаторы Т4 и Т5.
Изображение

Re: Синус из ШИМ

Пн фев 05, 2024 13:57:04

Вот схема ПРЦМ.

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