khlenar 5 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Здравствуйте все! Хочу сделать синусоидальный ШИМ, а получается что скважность по синусоидальному закону меняется. Вот на видео как, а надо как на картинке. К сожалению видео не вместилось.Но там скважность меняется от минимальногодо максимального значения. Вот формула TIM1->CCR1 = (uint16_t)(1818 + (Amp * sinf(ind * 6.283f / accur))); if(ind < accur) ind++; else ind = 0; Я думал , что на каждый треугольник счетчика , хотя так и получается что на каждый и ШИМ меняется по одной формуле. Вот не знаю как этот алгоритм сделать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Возможно получится в ОДИНОЧНОМ РЕЖИМЕ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Генерить в ручном режиме, каждый импульс отдельно А частоту ШИМ поднять нельзя? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 8 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Менять CCR надо в обработчике прерывания "Update Event" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Variant99 7 4 марта, 2023 Опубликовано 4 марта, 2023 (изменено) · Жалоба Заранее обсчитайте таблицу синуса, заполните массив. А потом подставляйте в CCR1 значения из этого массива, по событию (прерыванию) обновления счета. При этом, должна быть включена буферизация записи CCR. Ввиду того, что расчет синуса занимает много процессорного времени, таблицу желательно иметь заранее сгенерированную. Изменено 4 марта, 2023 пользователем Variant99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба может я не совсем понял задачу, каждый фронт должен идти со своей паузой ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба 11 минут назад, Variant99 сказал: Ввиду того, что расчет синуса занимает много процессорного времени Правда что-ли? ~1 такт (на ARM) - это "много процессорного времени"??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Variant99 7 4 марта, 2023 Опубликовано 4 марта, 2023 (изменено) · Жалоба правда-правда. Вначале посмотрите, что там написано, потом будете писать очередную глупость. Автор конечно написал мессагу так, что ничего непонятно, какие "треугольники счета" и что именно не получается. Возможно, невыставленный бит предзагрузки OC1PE, возможно, слишком долго идет расчет флоатов, возможно, вообще неверно построил алгоритм. Нет особого смысла высчитывать в каждом приращении угла синусоиды новое значение, можно брать из заранее просчитанной таблицы для периода. Или полупериода. Или даже четверти периода. Функция то симметричная по двум осям. Перезаписывать новым значением регистр CCR1 нужно с частотой шагов приращения угла синуса, то есть, от второго таймера, задающего частоту синусоидального сигнала, получаемого в результате фильтрации ШИМ. Вообще, ШИМ - это ШИМ. Его частота - это частота ШИМ, влияющая на фильтрацию выходного сигнала. А частота синусоидальной огибающей выходного сигнала, получаемого после фильтрации ШИМ - это уже другая частота, она не связана с частотой ШИМ. Вернее, она конечно может быть кратна ей, но это частный, необязательный случай. Изменено 4 марта, 2023 пользователем Variant99 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба a = intangle1 / 1024; dimpos = sin1024_3 + (a % 1024) * 3 + a / 1024; TIM1->CCR1 = *dimpos++; TIM1->CCR3 = *dimpos++; TIM1->CCR2 = *dimpos; intangle1 += freq1; intangle1 %= 3072*1024; static const uint16_t sin1024_3 [] = { 2048 , 3821 , 274 , 2052 , 3819 , 272 , 2056 , 3816 , 270 , 2060 , 3814 , 268 , 2064 , 3812 , 266 , 2068 , 3810 , 264 , 2073 , 3808 , 262 , ... Я по таймеру вызываю такую функцию, а сам шимогенерящий таймер работает сам по себе, его вообще не трогаю, только цэцээры. Поскольку памяти много свободной, сделал таблицу для трех синусов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Спасибо за ответы ! А прерывание обновления счета в каком регистре? я что то не нашел. У меня 407 проц У меня 3 такие формулы рассчитываются за 12мкс. "треугольники счета" это образно) ШИМ с выравниванием по центру Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Менять CCR надо в обработчике прерывания "Update Event" Такой обработчик-это UIF ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 8 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба 19 минут назад, khlenar сказал: Менять CCR надо в обработчике прерывания "Update Event" Такой обработчик-это UIF ? Да. И правильно тут советуют, рассчитать значения CCR таблично и обработчике UIF только перенести очередное значение в CCR. Нехорошо в обработчике прерывания вести float-вычисления. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Дело в том, что в этой формуле интенсивно будут меняться переменные. Конечно можно, но я сначала так попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 21 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба 48 minutes ago, khlenar said: У меня 3 такие формулы рассчитываются за 12мкс. Ужасно много для такой задачи, на f407 это около 1k fp операций умножения/сложения. Делали бы с помощью поворота вектора, и не нужны ни тригонометрический функции ни таблицы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 4 марта, 2023 Опубликовано 4 марта, 2023 · Жалоба Я даже не знаю как это делается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться