IGBT驱动电路_驱动程序

在《igbt是什么_工作原理_驱动电路》中,讲了一些基本的知识,这里咱们动点真格的,下面是公交车上用的驱动电机的IGBT,我看了一下,牌子是SEMICONDOCTOR,不知道是不是ON的产品,知道的,请在文章后面留个言。型号是FFNUJ117171 1X1N400V.属于single swtich IGBT(半桥型有2个IGBT,这个是1个IGBT)模块。

igbt模块如下:

igbt

igbt驱动电路板如下所示:

igbt_stc12c5410ad

该驱动电路采用STC12C5410AD作为主控,P1.0负责接收电位计电压,P3.7负责产生PWM信号,驱动TC4427A输出PWM波形。P3.7引脚产生的是0V和5V的PWM信号,不足以驱动IGBT,所以我们采用了TC4427A芯片,来增强驱动能力,经过TC4427A以后,PWM的高低电平为0V和15V,正好满足上面IGBT的驱动要求。

驱动板原理图如下所示,(下载完整版电路图,请点击:IGBT

igbt驱动电路

驱动程序:

/**************************************************************
功能:电位计调节PWM占空比输出
原理:MCU采集电位计电压,根据电压控制占空比值,线性变化
硬件:3位数显模块,主频12MHz
日期:2013年11月17日
作者:Ration
**************************************************************/
#include <stc12c5608ad.h>
#include <intrins.h> 

#define uint? unsigned int?? ? // 宏定义uint (0~65535)
#define uchar unsigned char? // 

sbit STB =P3^2;??????? // 定义片选通讯口
sbit CLK =P3^3;??????? // 定义时钟通讯口
sbit DIO =P3^4;??????? // 定义数据输入/输出通讯口
sbit CheSu = P3^7;??? // 车速信号输出引脚

void delay1(int ms)?? ?? // 延时子函数,用于模拟时序中高低电平的保持时间,非精确的定时
{
?unsigned char y;
? while(ms--)
?{
? for(y = 0; y<100; y++)
? {
?? _nop_();
?? _nop_();
?? _nop_();
?? _nop_();
? }
?}
}

void delay_ms(uint cyc)
{
?? ?uint ii,jj;

?? ?for(jj=1;jj<=cyc;jj++)
?? ?{
?? ??? ?for(ii=0;ii<942;ii++)
?? ??? ?{
?? ??? ??? ?_nop_();
?? ??? ?}
?? ?}
}

void ADC_INIT()
{
??? ?P1M0=0x01;?? ??? ??? ??? ??? ?//设置P1.0为高阻输入,以准备AD
?? ?P1M1=0x00;
? ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源?? ?? ??? ?
?? ?delay1(10);
?? ?delay1(10);
?? ?ADC_CONTR = ADC_CONTR&0xe7; //1110,0000 清ADC_FLAG,ADC_START位和低3位}?? ?
}

//====================================*/?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? 
//???????????? 模数转换函数(10位)?? ??? ??? ? ??? ??? */
//================================*/

unsigned int adpro()
{
??? ?unsigned int adbuf;
??? ?ADC_DATA = 0;?????????????? //清A/D转换结果寄存器
?? ?ADC_LOW2 = 0;
?? ?ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换
?? ?delay1(10);
?? ?do{ 
?? ??? ?; 
?? ??? ??? ?}?? ?
? while((ADC_CONTR&0x10)==0);?? //0001,0000等待A/D转换结束
?? ?ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D转换
?? ?adbuf=0;
?? ?adbuf = ((adbuf|ADC_DATA)<<2)|(ADC_LOW2&0x03); 
?? ?if(adbuf>1024) adbuf=1024;
??? ?return adbuf;
}

void PWM_INIT()
{
?? ?TMOD=0X02;???? // 定时器0工作于8位自动重载模式
?? ?TH0=0xfc;
?? ?TL0=0xfc;
?? ?TR0=1;
??? ?CMOD=0x04;?? ??? ?// CPS1 = 0 CPS0 = 1,选择PCA的时钟源为定时器0的溢出
?? ?CL=0;?? ??? ??? ?// PCA计数器清零
?? ?CH=0;
?? ?CCAP0H=0;??? // 初始化占空比为0%
?? ?CCAPM0=0x42;?? ?// 把P3.7脚做为DAC1的输出引脚
?? ?CR=1;?? ??? ??? ?// PCA模块开始计时
}

void main()
{
?? ?uint buf;
?? ?uchar duty;
?? ?float temp;

?? ?ADC_INIT();
?? ?PWM_INIT();
?? ?init_TM1620();
?? ?duty=0;
?? ?led_xian(duty);

?? ?while(1)
?? ?{
?? ??? ?buf=adpro();? // 采集ADC的输入值,范围0~1023
?? ??? ?buf=buf-100;
?? ??? ?temp=(float)buf/3;
?? ??? ?buf=(uchar)temp;
?? ??? ?CCAP0H = 256-buf; 
?? ??? ?delay_ms(100);
?? ?} 
}

驱动板原理图PCB下载地址:STC板子接口原理图(点击下载,Altium Designer文件)