2014-03-05 1 views
0

Я в настоящее время работаю в проекте инвертора синусоидальной волны, и мне нужно сгенерировать PWM с помощью микроконтроллера, для этого у меня есть chomm atmega32, может ли кто-нибудь направить меня с того, где начать и как проработать в написании кода для генерации pwm с использованием atmega32, любой ответ был бы оценен, спасибоКак сгенерировать PWM с помощью Atmega32 для инвертора синусоидальной волны

+0

пожалуйста, вы можете также сказать, какой тип ШИМ я должен использовать для этого проекта, быстрый ШИМ, фазы правильной или фазы и частоты правильной ШИМ – Atmega32

ответ

1

Вам необходимо выработать ряд значений ШИМ, которые вы будете менять на периодической основе, которые при фильтрации с помощью какого-либо оборудования, даст вам синусоидальную волну.

Вы можете сделать это, создав таблицу с колонкой 0-359 (с шагом один), которая затем превратится в значение синуса для каждого угла. Если вы затем умножите это на 0-2^16 (и используйте таймер 1, который является 16-разрядным таймером), вы получите 360 различных значений ШИМ.

Затем вы можете играть с этими значениями, например, изменяя значение ШИМ в каждый период таймера. Вы можете позволить каждому значению ШИМ повторять несколько раз и наблюдать за частотой изменения синусоидальной волны. Вы можете использовать только каждое значение ШИМ перед изменением значения ШИМ и наблюдать за удвоением частоты. Если вы измените множитель, вы увидите изменение выходного сигнала синусоидальной волны в размере.

Когда я говорю о значении PWM, я говорю о значении, которое изменяет отношение метки к пространству выхода PWM. С более продвинутым процессором, таким как STM32, вы можете заставить DMA автоматически делать это каждый раз, когда истекает период PWM. С Mega32 вам придется делать это вручную. (т. е. при прерывании таймера, когда период завершен.)

Вам необходимо назначить вывод ШИМ на штырь, затем вы можете подключить RC-фильтр к этому выводу. Если вы посмотрите с областью на этом выходе, вы увидите синусоидальную волну. 10k/100n отлично подходит как исходный фильтр. (10k последовательно с выходным штырем, 100n на землю, измерьте на RC-соединении).

Что касается ШИМ, попробуйте сыграть и убедите себя в том, что лучше. Сделайте простой подсчет до x, затем пойдите высоко, затем оставайтесь высоко, пока счетчик не достигнет типа 0xFFFF, затем попробуйте выравнивание по центру и любой другой тип. FWIW, выровненный по центру, дает лучшие результаты EMC, если вы управляете трехфазным двигателем.

Я подозреваю, что вам следует изучить и прочитать лист данных, чтобы узнать, как выводить ШИМ. Вам нужно, чтобы понять это, если вы собираетесь стать порядочным инженером. Будучи ложкой, код, который он сделает, не поможет.

+0

user2447233 спасибо, что нашли время и отвечая на мой запрос, обычно, если мы делаем это с помощью ИС, для генерации PWM сначала мы берем синусоидальную волну (или генерируем ее), пусть говорят 50 Гц, тогда мы берем треугольную волну, скажем, 3 кГц, а затем мы сравниваем их и получить сигнал PWM, наконец, мы отправим этот сигнал ШИМ на H-Bridge. , что большая теория часть я знаю, и я уже реализованы те же с помощью ИС, но вместо того, чтобы использовать ИС (или OpAmp) я хочу использовать микроконтроллер для генерации ШИМ, а затем подавать сигнал ШИМ для H-моста, Так что я не могу генерировать сигнал PWM непосредственно из atmega32 ?? – Atmega32

+0

или мне нужно сначала генерировать синусоидальный сигнал с частотой 50 Гц с использованием atmega32, как вы объяснили, используя синусоидальную таблицу, и аналогичным образом генерировать треугольную волну и подавать эту волну в компаратор для генерации ШИМ, а затем подавать эту ШИМ на h-мост – Atmega32

+0

Единственный способ, которым вы могли бы использовать хорошую чистую синусоидальную волну от микроэлемента, - это микроконтроллер на ЦАП. Вы отправляете таблицы значений синуса в ЦАП точно так же, как и для PWM. Mega32 не имеет ЦАП, но есть некоторые мегаблоки, у которых есть один, некоторый xmegas, у которых есть до четырех (и есть управление DMA), и множество ARM, которые это сделают. Я не понимаю теорию, лежащую в основе настройки синус/треугольник, которую вы используете, поэтому не можете комментировать это, но если бы у вас был двойной ЦАП, вы могли бы так легко манипулировать амплитудой с ОУ. – DiBosco

0

Я считаю, что способ, я может генерировать ШИМ путем установки опорного значения OCR1A = RAND (0,255); (С помощью случайной функции), так что каждый раз, когда петли запуска он изменит свое эталонное значение и сравнить его с треугольной волной или пандуса волну за счет увеличения значения TCNT0 от 0 до 255, а затем обратно в 0, в противном случае уменьшить его снова от 255 до 0 в для генерации треугольной волны. так что таким образом я могу получить сигнал различного рабочего цикла, который я хочу как PWM.

Любое предложение будет оценено