Микросекундная пауза в ШИМ на таймере T0.

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
AlFedorov
Сообщения: 31

Сообщение AlFedorov » 04 июн 2014, 16:10

Здравствуйте, уважаемые форумчане! Помогите пожалуйста разобраться.

Запускаю микроконтроллер atmega8515 (в редакторе code vision avr) в режиме шим-модуляции.
Вывожу шим на ножку OC0/T0. Работаю на частоте 1 МГц.

Выставляю вручную число в регистре сравнения OCR0 и регулирую скважность шим-сигнала.
Программка простейшая:

#include <mega8515.h>

void main(void)
{
DDRB = 0b00000001; // Настраиваем 0-пин порта B на вывод сигнала (для ШИМа).

TCCR0 = 0b01111001; // TCCR0=0b01 11 1 001 - настраиваем таймер на режим Fast PWM.

while(1) // Бесконечный цикл.
{
OCR0 = 0; // Выставляем вручную значение в регистре сравнения. Чем ближе к 0, тем шире импульс и короче пауза.
}

}



При OCR0 = 0 скважность, по идее, должна отсутствовать, и должен идти сплошной сигнал (максимальная мощность).
Однако через каждые 254 микросекунды сплошной сигнал прерывается на 1 микросекунду (1 такт микроконтроллера).

Погонял программу в AVR Studio. Оказалось, при сбросе счетного регистра (который длится как раз 1 такт) порт почему-то отключается, и тут же включается снова.

Подскажите пожалуйста, отчего такое происходит? Может какие-то дополнительные настройки режима требуются?

Хочу использовать шим-модуляцию для управления киловаттными электродвигателями через мощные мосфет-транзисторы. Поэтому любые подобные провалы сигнала (на такой большой мощности и на такой высокой частоте) приведут к ненужному открыванию транзисторов и к дополнительному перегреву.

ИзображениеШИМ в режиме сравнения.JPG

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 04 июн 2014, 17:46

Так оно и будет. Где-то в эррате это написано и там предлагается решение - просто настраивать ножку как вывод и выдавать постоянно логическую 1.

AlFedorov
Сообщения: 31

Сообщение AlFedorov » 05 июн 2014, 19:46

Спасибо большущее, Сергей!
Решил проблему перенастройкой с режима Fast PWM на решим шима с коррекцией фазы Phase Correct PWM, вот так:
TCCR0 = 0b01110001;
У него проблем с выбросами нет.

Вернуться в «Микроконтроллеры и ПЛИС»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей