Перейти к содержанию
    

Как состряпать алгоритм синусоидального ШИМ?

Да всё нормально делает топикстартер. Он просто вначале сумбурно описал хотелки, я тоже мало чего понял вначале, какие там "треугольники" и что конкретно не получается. Но на последней его фотке видно, что он получил. И как оказалось, всё в поряде изначально, просто на осцилле неверно настроил захват сигнала и картинка неверно его информировала. Так что всё норм. Ширина импульса меняется по синусоидальному закону, с тем, чтобы на выходе ШИМ поставить RC-фильтр и получить отфильтрованнное напряжение, изменяющееся по синусоидальному закону. Вот типа такого:

DS1Z_QuickPrint40.thumb.png.310895d7ac13ac4841ccf898e13fe54b.png

 

Топикстартер использует три канала, это наводит на мысль, что он пытается крутить трехфазный BLDC-моторчик.

Изменено пользователем Variant99

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Variant99 сказал:

Да всё нормально делает топикстартер. Он просто вначале сумбурно описал хотелки, я тоже мало чего понял вначале, какие там "треугольники" и что конкретно не получается. Но на последней его фотке видно, что он получил. И как оказалось, всё в поряде изначально, просто на осцилле неверно настроил захват сигнала и картинка неверно его информировала. Так что всё норм. Ширина импульса меняется по синусоидальному закону, с тем, чтобы на выходе ШИМ поставить RC-фильтр и получить отфильтрованнное напряжение, изменяющееся по синусоидальному закону. Вот типа такого:

DS1Z_QuickPrint40.thumb.png.310895d7ac13ac4841ccf898e13fe54b.png

 

Топикстартер использует три канала, это наводит на мысль, что он пытается крутить трехфазный BLDC-моторчик.

 

Да, только АС трехфазник.)

К стати у меня есть неплохой цифровой анализатор. Че я им не воспользовался. Еще ни разу не пользовался и забыл, что он у меня есть))

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может купить EG8030 и не изобретать велосипед?

со всеми регулировками, защитами, обратной связью, АБС, противоугонкой, крч нормальная тачка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Готовое покупать, скучно.)

Импортозамещение ведь нужно.)))

3 фазы верхние ключи. borodach , я не смотрел эту микросхему, у него есть обратная связь по датчику энкодеру ? Или он может работать с фазовращателями ?

DSView-230305-181127.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С импортозамещением на STM32 будет туго. 😄 Это еще хорошо, что ST Microelectronics не сделала так, как Analog Devices или Texas Instruments, и не закрыла доступ к документации и сайту в целом, а ограничилась только закрытием скачивания ПО. 

Так что тут лучше объяснять просто желанием самостоятельно участвовать в процессе, а не тупо прикручивать скотчем готовые куски. Тем более, что это будет то же самое, только сделанное самим. А это тоже немаловажно для чисто творческого процесса.
Потому что если не делать самому, то еще проще - взять на той же Алишке готовый частотник и вообще не париться изобретениями того, что уже вообще было сто раз сделано.

Изменено пользователем Variant99

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/5/2023 at 6:15 PM, khlenar said:

у него есть обратная связь по датчику энкодеру ? Или он может работать с фазовращателями ?

Какие энкодеры, какие фазовращатели? Судя по вашему словосочетанию "АС трехфазник", вы делаете обычный трёхфазный генератор переменного напряжения, для чего и предназначена EG8030. Там прямая либо трансформаторная обратная связь с выхода каждой стойки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Энкодер как бы намекает на то, что это будет частотный привод для асинхронного трехфазного электромотора. Энкодер позволяет расширить диапазон регулирования скорости вращения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, Variant99 said:

сказал, что он хочет вычислять значение в каждом шаге, потому что значения в формуле могут меняться

Таблицу значений можно хранить в ОЗУ и сделать длиной в период.

Расчёт коэффициента заполнения для каждого импульса в обработчике прерывания позволяет легко сделать безразрывное изменение параметров выходного сигнала. Можно ведь иметь две таблицы со значениями: по одной формируем ШИМ на выходе, для другой рассчитываем значения. Осталось придумать алгоритм, плавно стыкующий выходные значения при переключениях между таблицами. Понимаю, что F407 штука не хилая, и если ему кроме генерации больше нечем заняться, то можно и каждый импульс обсчитывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Variant99 сказал:

Энкодер как бы намекает на то, что это будет частотный привод для асинхронного трехфазного электромотора. Энкодер позволяет расширить диапазон регулирования скорости вращения.

Так точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, tonyk_av сказал:

Таблицу значений можно хранить в ОЗУ и сделать длиной в период.

Расчёт коэффициента заполнения для каждого импульса в обработчике прерывания позволяет легко сделать безразрывное изменение параметров выходного сигнала. Можно ведь иметь две таблицы со значениями: по одной формируем ШИМ на выходе, для другой рассчитываем значения. Осталось придумать алгоритм, плавно стыкующий выходные значения при переключениях между таблицами. Понимаю, что F407 штука не хилая, и если ему кроме генерации больше нечем заняться, то можно и каждый импульс обсчитывать.

Переменная accur задает частоту синусоидального сигнала. От 1Гц до 60Гц меняется например от 4000 до 80. Это надо таблицу в 4000 значений. А чтобы увеличивать частоту нужно перебирать через одно значение, через два и так далее... Это тоже алгоритмы. И это тоже время. Не знаю, может полностью рабочие алгоритмы выльются в тоже время. Надо эксперементировать. А вообще я планирую в дальнейшем использовать МК от Микрочипа PIC32MK0512MCM100. Санкций нет, при тактовой частоте 120МГц выполняет операции float

быстрее чем 407. И он очень прямо заточен для инверторов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, khlenar said:

Это надо таблицу в 4000 значений.

Речь шла о STM32F407, у которого 192К ОЗУ, посему даже два буфера по 8К каждый на этом фоне не выглядят очень большими цифрами.

8 hours ago, khlenar said:

А чтобы увеличивать частоту нужно перебирать через одно значение, через два и так далее...

Зачем так грубо? Тем более при работе через DMA. Тут или в две соседние ячейки класть одинаковые значения, чтобы не менять частоту загрузки новых значений в таймер, или менять частоту загрузки значений. Я бы пошёл по второму пути, то есть менял бы частоту загрузки значений в таймер. Так можно довольно точно задавать частоту выходного сигнала, и, кроме того, не нужно менять рассчитанные значения.

8 hours ago, khlenar said:

может полностью рабочие алгоритмы выльются в тоже время

Суммарно- да, будет почти то же самое время, только немного меньше. вход-выход в обработчик прерывания требую времени, поэтому выгодней заранее рассчитать таблицу значений. А вообще, бутылку водки можно оприходовать тремя стаканами, а можно двадцатью пятью рюмками.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Частота загрузки CONST и равна 500мкс. Я не зря привел цифры для accur. Водку стаканами пить разрушительно. Рюмками приятнее. Задача расчетов вызывается например каждую 1мсек. Который в свою очередь выставляет флаги выполнил не выполнил и т.д. Внешние события (АЦП и т.д.) работают с ДМА. Все оставшееся время вывод на дисплей, кнопки и остальное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, khlenar said:

Частота загрузки CONST и равна 500мкс.

Что мешает сделать её изменяемой? Для чего хранить параметры ШИМ в ОЗУ как не для изменения выходной частоты и/или амплитуды?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, Variant99 сказал:

Так это ж алгоритм DDS

Именно. Имеем предварительно рассчитанную таблицу одного (половины/четверти/одной восьмой) периода в постоянной памяти, из которой с нужным шагом выбираем значения (на каких-то частотах каждое n-е значение, на каких-то одно и то же значение k раз), умножаем на необходимую амплитуду в формате фиксированной точки и кладем в массив в ОЗУ, из которого ПДП (DMA) в нужные моменты времени забирает данные в таймер. Заполнение половин массива ОЗУ в прерываниях окончания передачи (TIF) и окончания половины передачи (HTIF). Одно умножение на отсчет. Для остальных фаз то же самое со сдвигом на 1/3 и  2/3 исходной таблицы. У меня по такому принципу ATmega88 на 16 МГц успевала без ПДП и ассемблера в исходниках выдавать шесть фаз синуса 400 Гц из таблицы на 1/8 периода синуса, а STM32F100 на 24 МГц с ПДП формировать два FFSK без разрыва фазы на 1200/2400 не особо напрягаясь.

У Л. И. Ридико прекрасная статья по реализации DDS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...