如何生成带延迟的PWM?

时间:2015-12-25 18:42:29

标签: microcontroller electronics mikroc

我正在实施一个隔离升压转换器。我必须为下图给出的开关生成PWM信号。我很难理解这种模式。 PWM模式如下:在开始时,所有四个开关保持接通,然后开关1,4保持接通,而开关2,3闭合,如图所示。请帮我解决这个问题。如何生成这种类型的PWM?然后,在稍后的时间,PWM应该以Q2,Q3的一些占空比时间移位。我很迷惑。如何添加延迟或移位PWM?我使用的是pic18f45k22微控制器,编程工具是MikroC。

Isolated Boost Convertor

 PWM for Switches

1 个答案:

答案 0 :(得分:1)

我不知道" off"的长度是多少?时间至关重要,但假设时间图中建议的标记/空间比为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]的输出位模式数组