IGBT驱动电路_驱动程序
在《igbt是什么_工作原理_驱动电路》中,讲了一些基本的知识,这里咱们动点真格的,下面是公交车上用的驱动电机的IGBT,我看了一下,牌子是SEMICONDOCTOR,不知道是不是ON的产品,知道的,请在文章后面留个言。型号是FFNUJ117171 1X1N400V.属于single swtich IGBT(半桥型有2个IGBT,这个是1个IGBT)模块。
igbt模块如下:
igbt驱动电路板如下所示:
该驱动电路采用STC12C5410AD作为主控,P1.0负责接收电位计电压,P3.7负责产生PWM信号,驱动TC4427A输出PWM波形。P3.7引脚产生的是0V和5V的PWM信号,不足以驱动IGBT,所以我们采用了TC4427A芯片,来增强驱动能力,经过TC4427A以后,PWM的高低电平为0V和15V,正好满足上面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文件)