Я в настоящее время работаю в проекте инвертора синусоидальной волны, и мне нужно сгенерировать PWM с помощью микроконтроллера, для этого у меня есть chomm atmega32, может ли кто-нибудь направить меня с того, где начать и как проработать в написании кода для генерации pwm с использованием atmega32, любой ответ был бы оценен, спасибоКак сгенерировать PWM с помощью Atmega32 для инвертора синусоидальной волны
ответ
Вам необходимо выработать ряд значений ШИМ, которые вы будете менять на периодической основе, которые при фильтрации с помощью какого-либо оборудования, даст вам синусоидальную волну.
Вы можете сделать это, создав таблицу с колонкой 0-359 (с шагом один), которая затем превратится в значение синуса для каждого угла. Если вы затем умножите это на 0-2^16 (и используйте таймер 1, который является 16-разрядным таймером), вы получите 360 различных значений ШИМ.
Затем вы можете играть с этими значениями, например, изменяя значение ШИМ в каждый период таймера. Вы можете позволить каждому значению ШИМ повторять несколько раз и наблюдать за частотой изменения синусоидальной волны. Вы можете использовать только каждое значение ШИМ перед изменением значения ШИМ и наблюдать за удвоением частоты. Если вы измените множитель, вы увидите изменение выходного сигнала синусоидальной волны в размере.
Когда я говорю о значении PWM, я говорю о значении, которое изменяет отношение метки к пространству выхода PWM. С более продвинутым процессором, таким как STM32, вы можете заставить DMA автоматически делать это каждый раз, когда истекает период PWM. С Mega32 вам придется делать это вручную. (т. е. при прерывании таймера, когда период завершен.)
Вам необходимо назначить вывод ШИМ на штырь, затем вы можете подключить RC-фильтр к этому выводу. Если вы посмотрите с областью на этом выходе, вы увидите синусоидальную волну. 10k/100n отлично подходит как исходный фильтр. (10k последовательно с выходным штырем, 100n на землю, измерьте на RC-соединении).
Что касается ШИМ, попробуйте сыграть и убедите себя в том, что лучше. Сделайте простой подсчет до x, затем пойдите высоко, затем оставайтесь высоко, пока счетчик не достигнет типа 0xFFFF, затем попробуйте выравнивание по центру и любой другой тип. FWIW, выровненный по центру, дает лучшие результаты EMC, если вы управляете трехфазным двигателем.
Я подозреваю, что вам следует изучить и прочитать лист данных, чтобы узнать, как выводить ШИМ. Вам нужно, чтобы понять это, если вы собираетесь стать порядочным инженером. Будучи ложкой, код, который он сделает, не поможет.
user2447233 спасибо, что нашли время и отвечая на мой запрос, обычно, если мы делаем это с помощью ИС, для генерации PWM сначала мы берем синусоидальную волну (или генерируем ее), пусть говорят 50 Гц, тогда мы берем треугольную волну, скажем, 3 кГц, а затем мы сравниваем их и получить сигнал PWM, наконец, мы отправим этот сигнал ШИМ на H-Bridge. , что большая теория часть я знаю, и я уже реализованы те же с помощью ИС, но вместо того, чтобы использовать ИС (или OpAmp) я хочу использовать микроконтроллер для генерации ШИМ, а затем подавать сигнал ШИМ для H-моста, Так что я не могу генерировать сигнал PWM непосредственно из atmega32 ?? – Atmega32
или мне нужно сначала генерировать синусоидальный сигнал с частотой 50 Гц с использованием atmega32, как вы объяснили, используя синусоидальную таблицу, и аналогичным образом генерировать треугольную волну и подавать эту волну в компаратор для генерации ШИМ, а затем подавать эту ШИМ на h-мост – Atmega32
Единственный способ, которым вы могли бы использовать хорошую чистую синусоидальную волну от микроэлемента, - это микроконтроллер на ЦАП. Вы отправляете таблицы значений синуса в ЦАП точно так же, как и для PWM. Mega32 не имеет ЦАП, но есть некоторые мегаблоки, у которых есть один, некоторый xmegas, у которых есть до четырех (и есть управление DMA), и множество ARM, которые это сделают. Я не понимаю теорию, лежащую в основе настройки синус/треугольник, которую вы используете, поэтому не можете комментировать это, но если бы у вас был двойной ЦАП, вы могли бы так легко манипулировать амплитудой с ОУ. – DiBosco
Я считаю, что способ, я может генерировать ШИМ путем установки опорного значения OCR1A = RAND (0,255); (С помощью случайной функции), так что каждый раз, когда петли запуска он изменит свое эталонное значение и сравнить его с треугольной волной или пандуса волну за счет увеличения значения TCNT0 от 0 до 255, а затем обратно в 0, в противном случае уменьшить его снова от 255 до 0 в для генерации треугольной волны. так что таким образом я могу получить сигнал различного рабочего цикла, который я хочу как PWM.
Любое предложение будет оценено
пожалуйста, вы можете также сказать, какой тип ШИМ я должен использовать для этого проекта, быстрый ШИМ, фазы правильной или фазы и частоты правильной ШИМ – Atmega32