реклама на сайте
подробности

 
 
> Синхронизовать с заданной фазой два таймера Atmega328p, можно ли такое реализовать
iiv
сообщение Jul 10 2012, 08:19
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем привет,

есть Atmega328p, на первом таймере которой реализовано управление полным мостом вот такой функцией:

Код
void SetTimer1(uint2 PlusTime, uint2 MinusTime, uint2 OffTime)
// PlusTime  the total time in 1/8uS of positive current,
// MinusTime the total time in 1/8uS of negative current,
// OffTime   the total time in 1/16uS of off currect between positive and negative stages
// hence the total length of the operation is PlusTime+MinusTime+OffTime
// _____<PlusTime/2>------------------------------------------------------------------<PlusTime/2+MinusTime+2*OffTime>_____
// -----------------------<PlusTime/2+OffTime>_____<PlusTime/2+OffTime+MinusTime>------------------------------------------
// Total: PlusTime+MinusTime+2*OffTime
{ if(PlusTime || MinusTime)
   { uint2 ocr1b=PlusTime+OffTime;
     uint2 icr1=ocr1b+MinusTime;
     OCR1A=PlusTime;
     OCR1B=ocr1b;
     ICR1=icr1;
   } else
   { OCR1A=0;
     OCR1B=0xffff;
     ICR1=0xffff;
   }
}


void IniTimer1()
{
   TCCR1B=(1<<WGM13)|(1<<CS10);
   TCCR1A=(1<<COM1A0)|(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
   SetTimer1(0, 0, 0);
   TCNT1=0;
}


все классно работает, но вот возникло желание добавить еще одну функциональность. Надо чтобы на еще одной ноге была 1 с точно той же частотой, но с отдельно заданными скважностью (PWM) и задержкой (Phase).

То есть

Код
OC1A: _----------_________
OC1B: _________----------_
XXXX: ___----____________
Phase:<->
PWM:      <->


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

Как я понимаю, мне надо каким-то образом настроить два таймера, например, 1-ый и 2-ой на одну частоту (вроде проблем нет), и засинхронизовать из так, чтобы их фазы были бы сдвинуты на нужное число тиков. У меня есть работающий код для полного моста, я могу настроить другой таймер с заданной скважностью, но не понимаю как засинхронизовать их фазы. Посоветуйте, пожалуйста, реально ли это, и если да, то как?

Спасибо

ИИВ
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 14:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016