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

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

Добавлено: Пн янв 19, 2015 12:25:37
Aice
Добрый день всем. Возникла у меня срочная нужда в двухканальном шим контроллере со сдвигом фазы на 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
zero648
Тут лучше использовать два разных таймера, например 1й и 3й. Каналом А задавать частоту ШИМ режим PWM с потолком OCR1A и OCR3A, а каналом В задавать скважность.

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

Добавлено: Пн янв 19, 2015 14:10:01
Engineer_Keen
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
Aice
Сделал как вы написали, большое спасибо
Изображение

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

Добавлено: Ср май 30, 2018 01:00:15
Twit
То же пытаюсь получить в одном из каналов ШИМ со здвигом фазы на 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
Starichok51
задай
// OC0A output: Inverted PWM
// OC0B output: Inverted PWM
и будет тебе нужный переворот фазы на 180 градусов.

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

Добавлено: Ср май 30, 2018 19:39:35
Ivanoff-iv
вроде один выход должен быть инверсным, а второй не инверсным, и ту величину (Х), которую надо в ШИМ отправить в регистр неинверсного выхода пишешь как есть, а в регистр инверсного 255-Х.