Страница 1 из 1

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

Добавлено: Ср июн 04, 2014 17:00:29
feodorsumkin
Здравствуйте, уважаемые Коты! У меня неприятность, и я снова прибегаю к вам попрошайничать :))

Помогите пожалуйста разобраться.

Запускаю микроконтроллер 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

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

Добавлено: Ср июн 04, 2014 17:23:02
ИС-пытатель
Даташит прочтите. Все правильно там работает.

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

Добавлено: Ср июн 04, 2014 20:19:22
uk8amk
Вам следует выбирать не режим ШИМ с выравниванием по фронту, а с выравниванием по центру(Phase/Frequency correct). Он в два раза медленнее т.к. счетчик делает два прохода.

А вообще вы выбрали под задачу не самый подходящий камень. Рекомендую обратить внимание на серию AT90PWM (модуль PSC), STM8, STM32(есть Advanced control timers). Они более приспособлены под управление моторами.

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

Добавлено: Ср июн 04, 2014 20:43:10
Леонид Иванович
feodorsumkin писал(а):При OCR0 = 0 скважность, по идее, должна отсутствовать
Я же Вам ответил на изя-электроник. Это документированная особенность, которая логически вытекает из того, что в регистре сравнения можно задать только 256 различных комбинаций, а ШИМ из 256 квантов имеет 257 состояний.
feodorsumkin писал(а):Хочу использовать шим-модуляцию для управления киловаттными электродвигателями
+1 предыдущему оратору, для этих целей лучше подойдет PWM3 с его PSC. Например, там deadtime программируется, потом есть аварийное отключение.

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

Добавлено: Чт июн 05, 2014 20:47:46
feodorsumkin
Спасибо, парни!
Особенно Вам, uk8amk - действительно, в режиме шима с коррекцией фазы подобной проблемы нет:

TCCR0 = 0b01110001;

Частота при этом в два раза ниже, но мне это без разницы. Даже лучше. Мощные ключи не любят быстрых и частых переключений.

Так же спасибо за подсказки насчет чипов со встроенным PWM-модулем. Надо будет выкроить время и почитать :))

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

Добавлено: Чт июн 05, 2014 23:38:56
Леонид Иванович
8-битный Phase Correct PWM состоит из 255 квантов, а не из 256, поэтому там такой проблемы нет. Но частота в 2 раза ниже. В данной конкретной задаче важнее всего аппаратная реализация защиты, чего нет в m8515, но есть в PWM3.

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

Добавлено: Пт июн 06, 2014 08:41:32
feodorsumkin
Спасибо :)

А как там защита устроена? Типа встроенное АЦП, которое следит за током на каком-нибудь шунте или датчике Холла, и отключает чип при превышении тока? Или скважность шима уменьшает до почти нуля?

А PSC - это что такое? Извините за тупые вопросы, я пока не очень гуру в этом...

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

Добавлено: Пт июн 06, 2014 11:00:35
uk8amk
Обычно один внешний вход и несколько внутренних источников, при достижении определенного условия на которых(например изменение лог. уровня) срабатывает мертвое время, выходы отключаются и переводятся в неактивное состояние.

http://www.gaw.ru/html.cgi/txt/app/moto ... _motor.htm

В STM к примеру еще имеется функция автоперезапуска, которая используется для регулировки ШИМ(но все равно скважность меняется программно) при наступлении условия BREAK.