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

Синус из ШИМ

Пн янв 22, 2024 13:07:11

Понадобился генератор синуса 775 Гц. Не могу понять по какой системе мне написать программу, чтобы получить частоту или я не правильно выбрал таймер. Только сразу хочу сказать, комментарии только согласно вопроса, такие как сделай там транзисторах, мне не нужны. На 8мГц получаю частоту максимум 122 Гц, т.е 8 мГц/2/256/128. Уменьшать количество точек в массиве это не есть для меня хорошо, так как и так на половину массив урезан. Может я массив не правильно взял?

#include <mega8.h> // 8.00 мГц
int sin[128]={127,134,140,146,152,158,164,170,176,182,187,193,198,203,208,213,217,222,226,230,233,
236,240,242,245,247,249,251,252,253,254,254,254,254,254,253,252,251,249,247,245,242,
240,236,233,230,226,222,217,213,208,203,198,193,187,182,176,170,164,158,152,146,140,
134,127,121,115,109,103,97,91,85,79,73,68,62,57,52,47,42,38,33,29,25,22,19,15,13,10,
8,6,4,3,2,1,1,0,1,1,2,3,4,6,8,10,13,15,19,22,25,29,33,38,42,47,52,57,62,68,73,79,85,
91,97,103,109,115,121};
int i;
interrupt [TIM1_COMPA] void timer1_compa_isr(void) {
OCR2=sin[i];
i++;
if (i>127) i=0;
}
void main(void)
{
PORTB=0x00;
DDRB=0x08;
TCCR1B=0x09; //WGM12=1(CTC); CS10=1
OCR1AH=0x02;
OCR1AL=0x00;
TCCR2=0x69; //WGM20=1(PWM, Phase); COM21=1(Clear OC2 on compare match); WGM21=1; CS20=1
OCR2=0x00;
TIMSK=0x10; //OCIE1A=1
#asm("sei")

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

Пн янв 22, 2024 14:32:48

При 8МГц тактовой и размере семпла ровно в 128 байт, частоту более 244Гц вы не получите. 122 - это если включен режим Phase Correct PWM, там счетчик 2 раза считает, туда-сюда, поэтому и частота ниже.
Используя один таймер и применив некоторые хитрости с фазой синуса при выводе очередного байта, можно получить практически любую частоту, немного пожертвовав формой синуса (он будет растянут или сжат в некоторых местах, смотря какую частоту надо получить).

Ну еще можно ФНЧ поставить, и выводить меандр с нужной частотой сразу, а это в 256 раз проще для таймера АВР-ки...

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

Пн янв 22, 2024 15:03:58

8 мГц/2/256/128


2 - это обязательный преcкейлер (доку по меге читать лень, а на память не помню)? 256 - это, я так понял, 8-ми разрядный ШИМ. Если так, то

8 мГц/2/256 = 15625Гц - это и есть частота дискретизации. 15625=5^6, 725=29*5^2, т.е. если я правильно посчитал, то при таблице из 625 элементов, в которой ровно 29 периодов синуса, то на выходе такого ЦАП (фильтр, конечно, нужен) будет синус 725Гц. В этом случае, фаза (т.е. индекс в таблице) каждую итерацию надо сдвигать на единицу.

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

===
Опять же, можно и меандр 775Гц таймером сгенерить, и фильтром убрать высшие гармоники (оставить только основную).
Если фильтр хочется попроще, можно сигма-дельту на SPI интерфейсе, например, "замутить".

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

Пн янв 22, 2024 15:44:23

Спасибо Вам за разъяснение. Ну как бы меандр на нужных частотах не проблема, но там нужен именно синус и без дрожания, который нужно ещё и модулировать частотой 8(12) Гц, иначе приёмник данной частоты с модуляцией, может плавать. Попробую к меандру ФНЧ прилепить в протеусе, посмотрю что покажет.

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

Пн янв 22, 2024 16:18:23

Да, если использовать внешний ЦАП, то можно получить 771 или 781 Гц...
Только не так мудрено, надо просто поставить в OCR2 79 или 80, режим CTC, а в прерывании выводить в ЦАП по очереди каждый байт из 128. Или в OCR 40, а синус сделать из 252 семплов, тогда получится почти 774Гц.

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

Пн янв 22, 2024 17:45:52

Alex_ka, почему-то я взял 725, а у Вас 775Гц. Не 29, а 31 (если я опять не ошибся). Но принцип, надеюсь понятен.
Если 775Гц - это фиксированная частота, я бы "не парился", завел бы таблицу на 625 элементов (31 периодов синуса), если памяти, конечно, хватает.

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

Пн янв 22, 2024 18:25:42

Alex_ka, Я начальник РТУ, признавайся, что хочешь.:) Приемники с частотным анализом рельсовых цепей я делал, а синусы делал для стрелочных переводов на тиньке44 три фазы с управлением по частоте и амплитуде. Чем тебе не нравится ГРЦ? Кстати, мы все ГРЦ переделали с синуса на меандр и отказы уменьшились на порядок.
Последний раз редактировалось linkov1959 Пн янв 22, 2024 21:34:55, всего редактировалось 1 раз.

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

Пн янв 22, 2024 20:09:17

Если выбрать не последовательный ШИМ, а параллельный R-2R, то 1кГц при тактовой 8МГц получить можно.
PS. И даже 2кГц.
Вложения
111.jpg
(70.04 KiB) Скачиваний: 33

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

Пн янв 22, 2024 21:29:18

Изображение

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

Вт янв 23, 2024 08:18:39

Alex_ka, Я начальник РТУ, признавайся, что хочешь.:) Кстати, мы все ГРЦ переделали с синуса на меандр и отказы уменьшились на порядок.
Не утаишь ничего. :))) Стенд для проверки ПРЦМ в эксплуатационном режиме, включение и выключение как-будто он стоит в рельсовой цепи. Программа с контролем отвала в режиме проверки написана и там же имеется 8 и 12 Гц в железе. Осталось синус на 4 частоты, так как 575 у нас нет. ГРЦ на меандр? Имеется в виду по принципу ГРЦ-2М где добавлена плата развязки? Там тоже на выходе меандр из-за установки данной платы. Странно, что вам дали возможность внести изменения в схемное решение. У нас без согласования с заводом изготовителем, которых уже нет даже не разрешили стаб 815Е заменить на КРЕН15, хотя при замене потребление блока падает почти в два раза. Если у вас на СИ написано для 44-ой, то было не плохо бы глянуть ваш исходник, в других языках не бум-бум.

Добавлено after 1 minute 55 seconds:
параллельный R-2R, то 1кГц при тактовой 8МГц получить можно.
PS. И даже 2кГц.
Спасибо, попробую.

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

Вт янв 23, 2024 14:59:21

Alex_ka, ПРЦМ еще та головная боль, пока я не сделал свой стенд для проверки и настройки. Там даже синус на вход подаю. Частоту синуса задает пила развертки с осциллографа С1-83, а на экране АЧХ. Развязка на ГРЦ , что бы частота не зависела от импеданса линии, очень нужная доработка, мы ее провели через НИИ.
AVR я программировал в BASCOM-AVR, сейчас на СИ только STM, но самый перспективный проц GD407VE. Вот на нем и нужно работать.
КРЕН15 я бы тоже не разрешил.:)

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

Ср янв 24, 2024 09:38:17

Alex_ka, ПРЦМ еще та головная боль. но самый перспективный проц GD407VE. Вот на нем и нужно работать.
КРЕН15 я бы тоже не разрешил.:)
Да как бы с настройкой ПРЦМ проблем нет. Проблема с ними когда они кратковременно отваливаются на линии, а потом опять продолжают работать. А заводские стенды для настройки и проверки не позволяют делать имитацию работы в рельсовой цепи. Удалось пару раз выцепить этот отвал, который происходил из-за VT5 или VT6 (плавали переходы). Но для нормального прогана нужна реальная имитация. Я по программированию ничего не заканчивал, сам по немногу разбираюсь при наличии свободного времени, так, что до перспективных процов мне ещё далеко. А на крен 15 вольтовых, два опытных ГРЦ отстояли 5 лет без проблем, тем более, что есть ГРЦ-2М где крен 12 вольтовые по заводу стоят, но у них выход максимум 4,8 вольта (минимальный предел). Так, что без синуса мне не обойтись. На BASCOM-AVR стоит у меня прога. Там в принципе можно разобраться, тем более, что когда-то в технаре BASIC изучал и он чем то похож.

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

Ср янв 24, 2024 21:44:52

Alex_ka, прога на старом диске осталась, но там на 3фазы с управлением рассчитано, на одну проблем и так нет. Таблица на четверть синуса, а частота тиньки44 20Мгц. Синус тебе не нужен, у меня с таймера 555 снимается частота с примитивным RC фильтром, а в ПРЦМ фильтров достаточно. Реле отваливается, если АЧХ ПРЦМ перекошена и частота ГРЦ зависит от нагрузки в линии, это по несущей, а по модуляции отдельная тема, там свои заморочки. Вибратор на магните поможет выявить плохие контакты и треснутые ферритовые сердечники, особенно подстроечные шпильки, если наблюдать АЧХ на экране, а не строить по точкам.

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

Чт янв 25, 2024 11:16:59

Реле отваливается, если АЧХ ПРЦМ перекошена и частота ГРЦ зависит от нагрузки в линии, это по несущей, а по модуляции отдельная тема, там свои заморочки.
У вас для просмотра АЧХ заводской прибор или самодельный? Ведь там низкая частота и без биений не обойтись, если что-то делать к осциллографу. Как бы с настройкой катушек Т1 и Т2 проблем тоже нет, настраиваю отдельно в резонанс, а потом лишь небольшая регулировка, чтобы вложить входное. Ну по модуляции как бы больших заморочек у нас нет, было выяснено, что выходное напряжение ПРЦМ при пониженном напряжении на грани нижнего предела или не укладывается в норму из-за конденсатором МБГО на 20 и 30 мкф 160 в. Мы их меняем на конденсаторы CL21 10мкфх250В в параллель 2 или 3 в зависимости от модуляции.

Изображение

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

Чт янв 25, 2024 22:28:03

Alex_ka, стенд самодельный не сертифицированный, от ревизоров прячу.:) Главное, что все ПРЦМ и генераторы настроены одинаково. Последствия настройки случайными механиками по точкам я долго устранял. Кондеры МБГО не лучший вариант, но терпимый, если дросселя с язычками на 8 и 12 Гц правильно настроены. Если и менять, то я бы начал с ГРЦ, но пока и так хорошо. Электролиты еще 20 лет назад заменили на импортные и проблем с пульсациями нет.

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

Пт янв 26, 2024 13:13:41

Интересная тема, жаль только, что она - перекличка двух профи :) ПРЦМ, ГРЦ ....
Но насколько подсказывает логика, в вопросах безопасности на транспорте, как и в медоборудовании, несертифицированная самодеятельность не допускается. Или не?
А касаемо получения синуса - если только МК ничем другим не заниается - получить его можно и для намного бо'льших частот даже без использования штатных таймеров и ШИМ - тупо закольцевав выборку - вывод, без прерываний. Но с АЦП ЦАП :(
Сам вплотную этим не занимался, так что может это моё гудение - мимо.
Последний раз редактировалось Jack_A Пт янв 26, 2024 21:48:40, всего редактировалось 1 раз.

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

Пт янв 26, 2024 15:09:42

Jack_A, выводится таблица в порт на 8 или 16 бит, а потом весовыми резисторами собирается синус. Зачем АЦП? У нормальных процев для этого есть выход DAC.

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

Пт янв 26, 2024 20:01:49

А где их взять, нормальных процев, в ветке AVR?

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

Пт янв 26, 2024 21:22:00

Gennadiy, Я уже говорил, что GD407 за 1.5$ решит все проблемы. На AVR у меня самые креативные проекты, но настоящее искусство требует жертв!:)

Добавлено after 20 minutes 53 seconds:
Но насколько подсказывает логика, в вопросах безопасности на транспорте, как и в медоборудовании, несертифицированная самодеятельность не допускается. Или не?.

Такие законники и заложат меня.:) А если серьезно, то кому, как не мне с моим опытом знать, к чему это доводит - ни какой самодеятельности! Мне можно...:)

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

Пт янв 26, 2024 21:45:23

Jack_A, выводится таблица в порт на 8 или 16 бит, а потом весовыми резисторами собирается синус.

Ну так это и есть примитивный ЦАП (в своём предыдущем посте я малость промахнулся) :) Только уровни 0 и 1 тут не имеют "жёсткого" аналогового значения, поэтому синус будет так себе.
Мне можно...:)

"Верить никому нельзя. Даже себе. Мне - можно". © Г.Мюллер (как утверждал Ю.Семёнов)
Ответить