Обсуждаем контроллеры компании Atmel.
Ответить

Шим. Сдвиг фазы на 180 градусов на АТмега 2560

Пн янв 19, 2015 12:25:37

Добрый день всем. Возникла у меня срочная нужда в двухканальном шим контроллере со сдвигом фазы на 180 градусов, приобрёл для этого ардуину мега 2560, но как оказалось штатные средства не позволяют выполнить толком вообще ничего...
Максимум что получилось это одно канальный шим с частотой 490 Гц, при необходимых 32 кГц. Покурив Гугл нашел возможность повысить частоту, перевел шим в режим phase-correct PWM. Накидал вот такой код:
Код:
int _gtv1 = 50;
void setup()
{
TCCR0B = TCCR0B & 0b11111000 | 0x01;
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS00);
}
void loop()
{
analogWrite(13, _gtv1);
analogWrite(4, _gtv1);
}

И вот что получилось:
Изображение
А мне необходимо наподобие:
ИзображениеИзображение
Так как я вообще не программист для меня это тёмный лес :shock: и хз как это выполнить.
Читал что есть готовые решения на тиньке, и что весь код состоит из 10 строк.
Может кто ткнёт носом в готовый проект или подскажет пару волшебных строк)
Взять tl494 и т.д. за 40 рублей в ближайшем магазине не предлагайте)
Заранее Очень Приочень Благодарен всем откликнувшимся :beer:

Re: Шим. Сдвиг фазы на 180 градусов на АТмега 2560

Пн янв 19, 2015 13:13:01

Тут лучше использовать два разных таймера, например 1й и 3й. Каналом А задавать частоту ШИМ режим PWM с потолком OCR1A и OCR3A, а каналом В задавать скважность.

Re: Шим. Сдвиг фазы на 180 градусов на АТмега 2560

Пн янв 19, 2015 14:10:01

Aice писал(а):как оказалось штатные средства не позволяют выполнить толком вообще ничего...

Это какие средства?
Aice писал(а):Покурив Гугл нашел возможность повысить частоту, перевел шим в режим phase-correct PWM.

Мудрое решение, действительно
Aice писал(а):весь код состоит из 10 строк.

Чтобы получить такое:
СпойлерИзображениеИзображение

Нужно один из выходов ШИМ инвертировать, т.е. добавить например (жирным):
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00) | _BV(COM0B0) ;
Только при загрузке значений ШИМ в регистр OCR0B записывать тоже инверсное значение (256-X)

Re: Шим. Сдвиг фазы на 180 градусов на АТмега 2560

Пн янв 19, 2015 21:23:02

Сделал как вы написали, большое спасибо
Изображение

Re: Шим. Сдвиг фазы на 180 градусов на АТмега 2560

Ср май 30, 2018 01:00:15

То же пытаюсь получить в одном из каналов ШИМ со здвигом фазы на 180.

Не совсем понимаю, куда записывать значения 255-Х и откуда брать этот Х
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,031 kHz
// Mode: Fast PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Non-Inverted PWM
// Timer Period: 36,409 ms
// Output Pulse(s):
// OC0A Period: 36,409 ms Width: 0 us
// OC0B Period: 36,409 ms Width: 0 us
TCCR0A|=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

Re: Шим. Сдвиг фазы на 180 градусов на АТмега 2560

Ср май 30, 2018 18:54:58

задай
// OC0A output: Inverted PWM
// OC0B output: Inverted PWM
и будет тебе нужный переворот фазы на 180 градусов.

Re: Шим. Сдвиг фазы на 180 градусов на АТмега 2560

Ср май 30, 2018 19:39:35

вроде один выход должен быть инверсным, а второй не инверсным, и ту величину (Х), которую надо в ШИМ отправить в регистр неинверсного выхода пишешь как есть, а в регистр инверсного 255-Х.
Ответить