В настоящее время я работаю над проектом синусоидального инвертора, и мне нужно генерировать ШИМ с помощью микроконтроллера, для этой цели я выбрал atmega32, может ли кто-нибудь указать мне, с чего начать и как продолжить написание кода для генерации ШИМ с использованием atmega32, любой ответ приветствуется, спасибо
как сгенерировать ШИМ с помощью Atmega32 для синусоидального инвертора
- Не могли бы вы также сказать, какой тип ШИМ я должен использовать для этого проекта, быстрый ШИМ, правильный по фазе или правильный по фазе и частоте ШИМ 05.03.2014
Ответы:
Вам нужно разработать ряд значений ШИМ, которые вы будете периодически изменять, и которые при фильтрации с помощью некоторого оборудования дадут вам синусоидальную волну.
Вы можете сделать это, создав электронную таблицу со столбцом 0-359 (с шагом один), который вы затем преобразуете в значение синуса для каждого угла. Если затем умножить это на значение 0-2^16 (и использовать таймер 1, который является 16-битным таймером), вы получите 360 различных значений ШИМ.
Затем вы можете поиграть с этими значениями, например, изменив значение ШИМ на каждом периоде таймера. Вы можете позволить каждому значению ШИМ повториться несколько раз и наблюдать за изменением частоты синусоиды. Вы можете использовать любое другое значение ШИМ только перед изменением значения ШИМ и наблюдать, как частота удваивается. Если вы измените множитель, вы увидите изменение размера выходного синусоидального сигнала.
Когда я говорю о значении ШИМ, я говорю о значении, которое изменяет отношение метки к пробелу на выходе ШИМ. С более продвинутым процессором, таким как STM32, вы можете заставить DMA автоматически делать это каждый раз, когда истекает период PWM. С Mega32 вам придется делать это вручную. (т.е. на прерывании таймера, когда период завершен.)
Вам нужно назначить выход ШИМ на контакт, затем вы можете подключить RC-фильтр к этому контакту. Если вы посмотрите на этот выход в прицел, вы увидите синусоиду. 10к/100н вполне подойдет в качестве начального фильтра. (10k последовательно с выходным контактом, 100n на землю, измерение на RC-переходе).
Что касается того, какой тип ШИМ, поиграйте и убедитесь в том, что лучше. Сделайте простой подсчет до x, затем поднимитесь, затем оставайтесь на высоком уровне, пока счетчик не достигнет типа 0xFFFF, затем попробуйте выровнять по центру и любой другой тип. FWIW, выравнивание по центру дает наилучшие результаты ЭМС, если вы управляете трехфазным двигателем.
Я подозреваю, что вам следует изучить и прочитать техническое описание, чтобы узнать, как выводить ШИМ. Вам нужно понять это, если вы собираетесь стать наполовину приличным инженером. Кормление кодом с ложки не поможет.
Я думаю, что я могу генерировать ШИМ, установив опорное значение OCR1A = rand (0,255); (используя случайную функцию), поэтому каждый раз, когда циклы запускаются, он будет изменять мое опорное значение и сравнивать его с треугольной волной или линейной волной, увеличивая значение TCNT0 с 0 до 255, а затем обратно до 0, иначе снова уменьшите его с 255 до 0 в чтобы генерировать треугольную волну. Таким образом, я могу получить форму сигнала с другим рабочим циклом, что я и хочу использовать в качестве ШИМ.
Любое предложение будет оценено