Синус из ШИМ

Обсуждаем контроллеры компании Atmel.
viiv
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

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

Сообщение viiv »

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 Гц)?
Модуляция амплитудная? Что представляет собой модулирующий сигнал? Как он "попадает в микроконтроллер"?

Заводим таблицу (таблицы, если выбирается одна из нескольких частот)
и выводим (например ШИМ-ом) значение из таблицы, умноженное на значение модулирующего сигнала
Все. На выходе фильтр, он должен "задавить" все лишнее (частоту ШИМ) до требуемых значений.
Реклама
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

КРАМ, Топик хочет выдать с проца сигнал 725Гц,775Гц ,модулированный 8-12Гц. Я хочу сделать на проце stm32f401 приемник такого сигнала. Какое оптимальное решение Вы видите?
У меня единственное АЦП с частотой 10кГц подает данные на цифровой фильтр 725 или 775 Гц, выходные данные поступают на цифровой фильтр 8 или 12 Гц, выход данных 8 или 12 Гц с этого фильтра поступают в виде ШИМ на выход и включают исполнительное реле. К сожалению, ЦАПа нет. Я на правильном пути?
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4538184#p4538184"]хочет выдать с проца сигнал 725Гц,775Гц ,модулированный 8-12Гц.[/uquote]
Нужно сделать ДВА ШИМа. Одним синтезировать несущую, а вторым модулирующий сигнал. Затем пропустить ШИМ несущей через драйвер нижнего плеча (типа MCP1416), питание которого делаем из фильтрованного ШИМа модулирующего сигнала с подставкой 4,5 Вольта.
Выход фильтруем по спектру несущей с учетом АМ.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

КРАМ, Есть стенд, который дает реальный модулированный сигнал для проверки и настройки приемника таких сигналов. В реальной рельсовой цепи присутствуют и другие сигналы, которых на стенде нет, но они могут нарушить работу приемника, перегрузку его входных цепей и отваливание исполнительного реле. Топик хочет на стенде имитировать все реальные сигналы в рельсе. Идея хорошая, но реально достаточно добавить на стенд еще один заводской генератор ГРЦ с альтернативной несущей и модуляцией, проц не нужен. Я же хочу на проце сделать сам приемник таких сигналов.
p.s. Отваливание реле приемника рельсовой цепи означает ложную занятость перегона и нарушение движения поездов, а это снятие премии со всей службы.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4538311#p4538311"]хочу на проце сделать[/uquote]
Ну и в чем проблема? Берем частоту дискретизации выше частоты несущей, например, в 16 раз. Пишем две таблицы ДПФ - два квадратурных гетеродина с окном Хемминга или Блэкмана (зависит от потребной избирательности). Умножаем принятый текущий массив сигнала на два квадратурных гетеродина с оконной функцией с накоплением двух квадратурных компонент и нормированием. Находим корень квадратный из суммы квадратов квадратурных компонент. Получаем точку модулирующего сигнала. И так далее повторяем, рисуя по точкам модулирующий сигнал. Это классический SDR приемник прямого преобразования.
Реклама
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

КРАМ, А почему в 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*zden;
sumnum += states*znum;
if (i<3) states = states[i+1];
}
states[3] = invar-sumden;
sumnum += states[3]*znum[4];
return sumnum;
}
На входе один поток данных, на выходе другой. Никаких умножений, корней и прочей математики не предусмотрено. Или я ошибаюсь?
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

Добавлено after 2 minutes 58 seconds:
[uquote="linkov1959",url="/forum/viewtopic.php?p=4538328#p4538328"]почему в 16 раз[/uquote]
Частота дискретизации выбирается из требований к антиалиасинговому фильтру на входе АЦП. Там не требуется никакого особого расчета. Все примитивно просто.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

КРАМ, А какой альтернативный вариант обнаружения? Я делал по типу частотомера, когда не знал про цифровые фильтры.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

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

Сообщение Alex_ka »

[uquote="viiv",url="/forum/viewtopic.php?p=4537988#p4537988"]Alex_ka,

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

Как-то странно выглядит переписывание регистров таймера в цикле. Не надо ли "привязаться" к тикам таймеров, т.е. в обработчиках "безопасно" менять необходимые значения?[/uquote]Данная запись для протеуса, так как он не сильно адекватный. Убрать из цикла можно только 1 << COM1A0. А 1 << WGM12 убрать не возможно, летят частоты. Я пишу как понимаю, так как я не учился на программиста и занимаюсь при наличии свободного времени где-то пару лет. Я вот здесь читаю сообщения и офигиваю, от высокой материи в сообщениях, есть правда некоторые дельные. А ведь надо было всего получить синус с частотой меньше 1 кГц. Только единственный viiv бросил в личку пример для размышления и Starichok51 разъяснил расчёт таблицы.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

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

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

Сообщение КРАМ »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4538365#p4538365"]Данные с выхода фильтра 725Гц получает фильтр 8 или 12 Гц[/uquote]
Стесняюсь спросить, а каким таким чудесным способом частота 8 или 12 Гц может оказаться на выходе фильтра 725 Гц? :))) :))) :)))
Может ну его? Радиотехника она такая мутная... :tea:

Добавлено after 5 minutes 49 seconds:
[uquote="linkov1959",url="/forum/viewtopic.php?p=4538365#p4538365"]в реальной цепи их там два замешаны.[/uquote]
Откуда тогда взялись рассуждения об амплитудной модуляции? Не возьмете за труд объяснить без собственных домыслов какой же все таки сигнал присутствует на рельсовой паре? Заодно расскажите как изолируется межперегонный стык.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

КРАМ, 8 и 12 Гц получатся после детектирования.
В реальной рельсовой цепи замешаны две частоты с разной модуляцией. Есть еще частоты АРС-АЛС для приемника на локомотиве.
Стыки у нас не изолированы, колесная пара шунтирует цепь и не пропускает частоту на приемник и реле отпадает.
Поэтому ложное отпадание реле приводит к остановке движения, а ложное замыкание к аварии на занятом перегоне.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4538406#p4538406"]8 и 12 Гц получатся после детектирования.[/uquote]
Превосходно. Только у вас где детектор? Вы говорили только о двух фильтрах включенных в обработке потока последовательно. Напомнить как считают детектор для узкополосного сигнала?
[uquote="linkov1959",url="/forum/viewtopic.php?p=4538406#p4538406"]В реальной рельсовой цепи замешаны две частоты с разной модуляцией. Есть еще частоты АРС-АЛС для приемника на локомотиве.[/uquote]
И каким способом вы собираетесь обеспечивать избирательность? Вторым порядком БИХ? :))) :))) :)))
[uquote="linkov1959",url="/forum/viewtopic.php?p=4538406#p4538406"]Стыки у нас не изолированы, колесная пара шунтирует цепь и не пропускает частоту на приемник и реле отпадает.[/uquote]
У меня такое ощущение, что я задаю вам вопросы не на русском языке, а на суахили... :facepalm:
Я говорил об изоляции стыков ПЕРЕГОНОВ, а не вообще о стыках. Или у вас там в Москве генератор, а во Владике приемник?
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

КРАМ, Я еще не программировал детектор, от помощи не откажусь.
Тот код фильтра, что я выкладывал обеспечивает нужную избирательность, на 725 и 775Гц полоса 24Гц. Уже испытано и работает.
Я имел в виду стыки перегонов, дроссель-трансформаторы тоже применяются, но редко.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4538487#p4538487"]Уже испытано и работает.[/uquote]Тут проблема в том, что часто вроде бы работающее решение оказывается тупиком. И это тот самый случай. Для детектора нужна квадратурная фильтрация. А ее нужно делать не БИХ-ом, а КИХ-ом. Ибо у него линейная ФЧХ.
То есть тупо делать одноточечный ДПФ. Поскольку выход ДПФ является комплЕксной величиной, то получить из него модуль (сиречь, амплитуду) элементарно. Корень квадратный из суммы квадратов Real и Imaginary.
Ну и нет никакого смысла целочисленный выход АЦП для работы в КИХ переводить в плавучку. Никаких дополнительных ништяков мы не получим. Это в БИХ плавучка используется из-за принципиально дробных коэффициентов, но и тогда можно применять фикспойнт, а не плавучку. А фикспойнт является по сути целочисленным форматом.

Добавлено after 2 minutes 56 seconds:
[uquote="linkov1959",url="/forum/viewtopic.php?p=4538487#p4538487"]полоса 24Гц.[/uquote] Причем тут полоса? Избирательность создают не полосой, а уровнем подавления при заданной расстройке. Полоса у фильтра любой избирательности может быть любой. Только толку от этого фильтра никакого не будет.
Приведите АЧХ своего БИХ второго порядка.

Добавлено after 1 minute 33 seconds:
[uquote="linkov1959",url="/forum/viewtopic.php?p=4538487#p4538487"]Я имел в виду стыки перегонов[/uquote]
И как отличают один перегон от другого?
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

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

Сообщение linkov1959 »

КРАМ,
АЧХ 725Гц.
725гц.jpg
(149.44 КБ) 87 скачиваний
А изолированные стыки пройденный этап, информация доступна.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4538563#p4538563"]АЧХ[/uquote]
Как и следовало ожидать - полное фуфло. АЧХ фильтров не приводят в линейном масштабе по амплитуде. Только в логарифмическом. Показанная картинка позволяет что либо разглядеть только до уровня 0,1 (это внезапно всего лишь -20 дБ)...
[uquote="linkov1959",url="/forum/viewtopic.php?p=4538563#p4538563"]информация доступна.[/uquote]
Мне не охота рыть ради одного предложения. Вам трудно его озвучить? :dont_know:
ЗЫ.
В догон для понимания требуемого АЧХ фильтра.
При нахождении среднего значения в буфере мы получим АЧХ с прямоугольным окном.
Проблема прямоугольного окна в очень высоком уровне боковых лепестков из-за краевого эффекта.
АЧХ прямоугольного окна (шкала частоты в бинах - бин равен обратной времени накопления в буфере величине, например, при накоплении 1 мс бин равен 1 кГц):
Изображение
У окна Хэмминга с этим получше, но начинается растекание спектра, что для нашего случая никакого значения не имеет - просто нужно выбирать время накопления с учетом растекания спектра:
Изображение
Окно Блэкмана-Нуталл:
Изображение
Alex_ka
Нашел транзистор. Понюхал.
Сообщения: 193
Зарегистрирован: Ср сен 04, 2019 17:59:23
Откуда: Гомель

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

Сообщение Alex_ka »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4538466#p4538466"]Превосходно. Только у вас где детектор? Вы говорили только о двух фильтрах включенных в обработке потока последовательно. Напомнить как считают детектор для узкополосного сигнала?
?[/uquote]Вот схема ПРЦМ. VT1 и VT2 - буферные усилители, VT3 и VT4 - пороговое устройство (типа реле), R13 и C5 - интегрирующая цепь для выделения частоты модуляции, дальше каскады усилителя. Для 8Гц модуляции ёмкости С7, С8 - 30 мкф, для 12 Гц - 20 мкф и соответственно отличаются по индуктивности трансформаторы Т4 и Т5.
Изображение
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="Alex_ka",url="/forum/viewtopic.php?p=4539264#p4539264"]Вот схема ПРЦМ.[/uquote]
Вы полагаете, что по приведенной схеме можно сделать реверс?
Вы полагаете, что я буду заниматься этим реверсом?
Вообще то речь шла о вычислительной реализации аналога. Причем не мной, а коллегой Линьковым.
Детектор в аналоговой схеме может быть реализован на обычном усилительном каскаде ОЭ в режиме отсечки. Разглядывая схему без номиналов, этого никогда не понять.
Но это и не нужно понимать. Поскольку сама задача достаточно тривиальна.
Ответить

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