51单片机输出两路频率为30KHz带死区的PWM用于驱动半桥逆变电路的程序
时间: 2023-05-26 07:07:36 浏览: 184
本程序是在STC89C51单片机上编写的,使用了中断方式产生PWM波形,并带有死区控制功能。
代码如下:
```c
#include <reg52.h>
#include <intrins.h>
sbit INA=P2^0; //半桥逆变电路的控制信号
sbit INB=P2^1;
unsigned int PWM_H=1000; //高电平时间
unsigned int PWM_L=1000; //低电平时间
unsigned int dead_time=300; //死区时间
unsigned int cnt=0; //计数器
void Timer0_Init() //定时器0初始化
{
TMOD |= 0x01; //设置为模式1(16位定时器)
TH0 = 0xFC; //重载初值
TL0 = 0x18; //重载初值
ET0 = 1; //允许定时器0中断
TR0 = 1; //启动定时器0
EA = 1; //开启总中断
}
//定时器0中断服务函数
void Timer0_isr() interrupt 1
{
TH0 = 0xFC; //重载初值
TL0 = 0x18; //重载初值
cnt++;
if(cnt<=PWM_H) //输出高电平
{
INA = 1;
INB = 0;
}
else if(cnt<=PWM_H+dead_time) //死区时间
{
INA = 0;
INB = 0;
}
else if(cnt<=PWM_H+PWM_L+dead_time) //输出低电平
{
INA = 0;
INB = 1;
}
else //复位计数器
{
cnt = 0;
}
}
void main()
{
Timer0_Init();
while(1);
}
```
具体实现方法是,在定时器中断函数中判断计数器的值,在不同的时间段内输出不同的控制信号,实现PWM波形带死区的输出。其中,定时器0的频率需要根据所需的PWM频率进行计算,并根据占空比等参数进行调整。
需要注意的是,在半桥逆变电路中,控制信号的输出需要切换到不同的GPIO口上,并配合输出信号的频率和占空比实现电压的控制。同时,需要在两路输出之间插入一定的时间间隔,避免两者同时导通,短路损坏电路。在本程序中,该时间间隔被定义为死区时间,可以根据具体应用需求进行调整。
阅读全文