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

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 13
Зарегистрирован: Пн янв 19, 2015 11:50:25

Сообщение 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:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Тут лучше использовать два разных таймера, например 1й и 3й. Каналом А задавать частоту ШИМ режим PWM с потолком OCR1A и OCR3A, а каналом В задавать скважность.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Aice писал(а):как оказалось штатные средства не позволяют выполнить толком вообще ничего...
Это какие средства?
Aice писал(а):Покурив Гугл нашел возможность повысить частоту, перевел шим в режим phase-correct PWM.
Мудрое решение, действительно
Aice писал(а):весь код состоит из 10 строк.
Чтобы получить такое:
СпойлерИзображениеИзображение
Нужно один из выходов ШИМ инвертировать, т.е. добавить например (жирным):
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00) | _BV(COM0B0) ;
Только при загрузке значений ШИМ в регистр OCR0B записывать тоже инверсное значение (256-X)
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Родился
Сообщения: 13
Зарегистрирован: Пн янв 19, 2015 11:50:25

Сообщение Aice »

Сделал как вы написали, большое спасибо
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 1
Зарегистрирован: Ср май 30, 2018 00:45:35

Сообщение 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;
Реклама
Модератор
Аватара пользователя
Сообщения: 19060
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

задай
// OC0A output: Inverted PWM
// OC0B output: Inverted PWM
и будет тебе нужный переворот фазы на 180 градусов.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

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

Вернуться в «AVR»