Как сгенерировать ШИМ с задержкой?

Я реализую изолированный повышающий преобразователь. Мне нужно сгенерировать ШИМ-сигнал для переключателей, указанных на рисунке ниже. Мне трудно понять схему. Схема ШИМ выглядит следующим образом: вначале все четыре переключателя остаются включенными, затем переключатели 1, 4 остаются включенными, а переключатели 2, 3 замкнуты, как показано на рисунке. Пожалуйста, помогите мне начать работу над этой проблемой. Как я могу генерировать этот тип ШИМ? Затем, в более позднее время, ШИМ должен быть смещен на некоторое время рабочего цикла для Q2, Q3. Я сбит с толку. Как я могу добавить некоторую задержку или сдвинуть ШИМ? Я использую микроконтроллер pic18f45k22 и инструмент программирования MikroC.

Изолированный повышающий преобразователь

 ШИМ для переключателей


person Misal313    schedule 25.12.2015    source источник
comment
Вы должны точно сказать, какой микроконтроллер вы используете.   -  person David Grayson    schedule 25.12.2015
comment
Я использую pic18f45k22. @ Дэвид Грейсон   -  person Misal313    schedule 25.12.2015


Ответы (1)


Я не знаю, критична ли продолжительность времени «выключения», но предположим, что соотношение метки/пространства составляет 1:3, как это предлагается на вашей временной диаграмме,

Q1,Q4   1011101110111
Q2,Q3   1110111011101

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

void timer_interrupt() {
    static int operation = 0;               // is initialised only once
    clear_timer_status();               // acknowledge the interrupt
    switch (operation) {
        case 0: Q14_off();
                break;
        case 1: Q14_on();
                break;
        case 2: Q23_off();
                break;
        case 3: Q23_on();
                break;
    }
    operation = (operation + 1) % 4;    // advance to next operation
}

Если вы хотите меньшее соотношение метка/промежуток, вы можете сделать это аналогичным образом. Предположим, вам нужно соотношение 1:7, представленное

Q1,Q4   101111111011111110
Q2,Q3   111110111111101111

теперь в этом случае скорость таймера должна составлять одну восьмую цикла, но не каждое прерывание будет иметь действие

void timer_interrupt() {
    static int operation = 0;               // is initialised only once
    clear_timer_status();               // acknowledge the interrupt
    switch (operation) {
        case 0: Q14_off();
                break;
        case 1: Q14_on();
                break;
        case 4: Q23_off();
                break;
        case 5: Q23_on();
                break;
    }
    operation = (operation + 1) % 8;    // advance to next operation
}

Есть и другие способы сделать это: например, массив выходных битовых шаблонов, который вы ищете как pattern[operation]

person Weather Vane    schedule 27.12.2015