12V500w车载工频逆变器制作

 时间:2024-10-19 05:18:35

在现代工业的迅速发展下,电子元件越来越便宜,DIY也越来越简单,下面我将分享我给朋友做的车载逆变器制作过程,希望对逆变器发烧友们的有用

工具/原料

烙铁,mos管

方法/步骤

1、首先要准备一个变压器,我的变压器是功放里面拆出来的,双输出32V,500W,将次级拆出来

12V500w车载工频逆变器制作

12V500w车载工频逆变器制作

2、拆除次级后用毛巾包住手(有手套的最好用手套),将铜丝稍微拟直,因为等会儿要重新制作变压器,逆变变压器的电压利用率是很低的,比如要绕12V的变压器,则只需要绕12V的一半电压,这样在满载的情况下输出才有充分的余量,

12V500w车载工频逆变器制作

3、将铜丝拟直后,下面就要开始绕变压器了,根据输入电流计算,这里我将之前的铜丝对折为4根,12V变压器要根据实际情况来绕,绕好后通电大约5.8V左右就行

12V500w车载工频逆变器制作

12V500w车载工频逆变器制作

4、绕好变压器后,需要用胶带缠绕一下,这里我因为冤铘讵柘没有高温胶带,则用空调铜管的缠绕带,由于我的变压器是环变,漏感是比较小的,由于是硅钢片上芟坳葩津,到20K的载波时损耗太大,需要外加一个电感来滤掉这个高频载波,这里我用一个铁硅铝磁环,绕了8圈,注意:环变一定要加这个磁环,不然空载电流相当大,方形变压器则可以不用。

12V500w车载工频逆变器制作

方法/步骤2

1、变压器绕好后,下面就是功率主板了,刚好以前做实验的时候留了几块在身边,好多东西搬家的时候都搞丢了,由于没有TO-247的MOS管,在电子垃圾堆里翻到5个75NF75,500W满载大概50多A,75A的管子将就着用了,

12V500w车载工频逆变器制作

12V500w车载工频逆变器制作

2、焊接了一上午,终于焊接好了

12V500w车载工频逆变器制作

3、下面就是比较关键的东西踮碚牢邗了,正弦波驱动板,这里我用的单片机产生SPWM,单片机采用比较便宜的STM8S003F,通过IR211S驱动MOS管,显示器采用74HC595扩展做的穰惩较瘁动态扫描显示,采用2个3位数码管,分别轮流显示输出电压,电流,电池电压,频率。调制方式采用双极性调制,因为单极性的输出过零点会有个毛刺,双极性的输出则很干净,空载电流也一样

12V500w车载工频逆变器制作

12V500w车载工频逆变器制作

方法/步骤3

1、装好后的整机

12V500w车载工频逆变器制作

2、这是通电的测试,13V下空载电流0.55A,损耗还是比较大的,

12V500w车载工频逆变器制作

12V500w车载工频逆变器制作

12V500w车载工频逆变器制作

3、下面则是你们最关心的了-颍骈城茇-程序,我采用的IAR的编译器,下面是主函数://采用双极性方式调制,载波20K#include"IOSTM8S103F3.h"#includ髫潋啜缅e"APP.h"/*采用2个共阴三段数码管做显示(SM320281)74hc595高位(bit7)接数码管a,最低位接小数点(spi采用高位在前,低位在后)管脚定义:Poin1:FAN+poin20:VFBpoin2:TFBpoin19:50HZ/60HZ(引脚悬空默认50HZ输出)poin3:IFBpoin18:NCpoin4:RSTpoin17:SPI_RCKpoin5:NCpoin16:SPI_DIpoin6:HZ_outpoin15:SPI_SCKpoin7:GNDpoin14:SPWM_Ppoin8:VCAPpoin13:SPWM_Npoin9:3.3Vpoin12:NCpoin10:LED-poin11:SPWM_EN*/#defineu8unsignedchar#defineu16unsignedint#defineu32unsignedlong#defineLEDPA_ODR_ODR3//LED-指示输出PA3//#defineHZ_outPA_ODR_ODR2//基准方波输出#defineHZ_outPD_ODR_ODR1//基准方波输出#defineSST_Tset1#defineFQPD_IDR_IDR2//PD2#definenum50hz 416 //50hz u8ADC_flag;u16ADC_Value,ADC_VFB,ADC_TFB,ADC_IFB,IFB_temp;u8sin_error;u16cont;u8ms_10,t,d;u8dis[6];//第一页显示缓存u8dis_2[6];//第二页显示缓存u16sin_num_max; //点数最大值u8page_cnt;intsin_b;constu8logo_tab[14][6]={//3个点在数码管上循环0x01,0x01,0x01,0x00,0x00,0x00,//10x00,0x01,0x03,0x00,0x00,0x00,//20x00,0x00,0x07,0x00,0x00,0x00,//30x00,0x00,0x06,0x00,0x00,0x02,//40x00,0x00,0x04,0x00,0x00,0x06,//50x00,0x00,0x00,0x00,0x00,0x0E,//60x00,0x00,0x00,0x00,0x08,0x0C,//70x00,0x00,0x00,0x08,0x08,0x08,//80x00,0x00,0x00,0x18,0x08,0x00,//90x00,0x00,0x00,0x38,0x00,0x00,//100x10,0x00,0x00,0x30,0x00,0x00,//110x30,0x00,0x00,0x20,0x00,0x00,//120x31,0x00,0x00,0x00,0x00,0x00,//130x21,0x01,0x00,0x00,0x00,0x00,//14};constu8sin_50[416]={//50HZ正弦表129,131,133,135,137,139,141,143,145,147,149,151,152,154,156,158,160,162,164,166,167,169,171,173,175,176,178,180,182,184,185,187,189,190,192,194,195,197,199,200,202,203,205,206,208,209,211,212,214,215,217,218,219,221,222,223,225,226,227,228,229,231,232,233,234,235,236,237,238,239,240,241,242,243,243,244,245,246,246,247,248,248,249,250,250,251,251,252,252,253,253,253,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,253,253,253,252,252,251,251,250,250,249,248,248,247,246,246,245,244,243,243,242,241,240,239,238,237,236,235,234,233,232,231,229,228,227,226,225,223,222,221,219,218,217,215,214,212,211,209,208,206,205,203,202,200,199,197,195,194,192,190,189,187,185,184,182,180,178,176,175,173,171,169,167,166,164,162,160,158,156,154,152,151,149,147,145,143,141,139,137,135,133,131,129,128,126,124,122,120,118,116,114,112,110,108,106,104,103,101,99,97,95,93,91,89,88,86,84,82,80,79,77,75,73,71,70,68,66,65,63,61,60,58,56,55,53,52,50,49,47,46,44,43,41,40,38,37,36,34,33,32,30,29,28,27,26,24,23,22,21,20,19,18,17,16,15,14,13,12,12,11,10,9,9,8,7,7,6,5,5,4,4,3,3,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,3,3,4,4,5,5,6,7,7,8,9,9,10,11,12,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29,30,32,33,34,36,37,38,40,41,43,44,46,47,49,50,52,53,55,56,58,60,61,63,65,66,68,70,71,73,75,77,79,80,82,84,86,88,89,91,93,95,97,99,101,103,104,106,108,110,112,114,116,118,120,122,124,126,128,};constu8tab_wei[6]={0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};//6个位选,第一位为电压显示最高位(595—bit5)constu8tab_num[14]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x39,0xB9,0x76};//14个数,最后一位清空不显示constu8Error_tab[6]={0x6D,0x6D,0x78,0x79,0x70,0x70};//故障代码显示(SSt,Err)voidSystem_Init(void){//启用内部高速晶振且无分频16MHzCLK_ICKR|=0x01;//开启内部HSIwhile(!(CLK_ICKR&0x02));//HSI准备就绪CLK_SWR=0xe1;//HSI为主时钟源CLK_CKDIVR=0x00;//HSI不分频//启用内部高速晶振且无分频16MHz CLK_SWCR|=0x02;//开启切换CLK_ICKR|=0x01;//开启内部HSIwhile(!(CLK_ICKR&0x02));//HSI准备就绪CLK_SWR=0xe1;//HSI为主时钟源while((CLK_SWCR&0x01)==0x01);//等待切换完成CLK_CKDIVR=0x00;//HSI不分频CLK_SWCR&=(~0x02);//关闭切换CLK_PCKENR1|=0xA0;//开启定时器1,2外设时钟//LED初始化PA_DDR|=0x0C;//PA3输出,LED-;PA2输出,HZ_outPA_CR1|=0x0C;PA_CR2=0;//FQ频率选择PD_DDR|=0x02;//PD2上拉输入模式,PD1输出PD_CR1|=0x06;//PD_CR2=0;}externu8Last_temp;//保存最新的温度值intmain(){System_Init();//系统初始化,打开内部RC=16MhzTimer1_Init();//SPWM初始化Timer2_Init();//FAN输出初始化ADC_Init();//ADC初始化HC595_Dispaly_Init();//初始化SPI//IWDG_Init();//看门狗初始化//IWDG_KR=0xaa;//喂狗TIM2_CCR1L=200;//开启风扇LED=0;//开启灯光asm("rim");//开中断,sim为关中断//=====================================================软启动#if(SST_Tset>0)ms_10=0; while(1) {//IWDG_KR=0xaa;//喂狗HC595_Send_16bit(tab_wei[d],logo_tab[t][d]);//旋转循环显示---if(++d>5)d=0; if(cont==104)//最大值开启采样 { ADC_VFB=ADC_Convert_8(VFB);//得到输出结果 if(ms_10>=7)//软启动延时计数器 { sin_b+=2; //增大正弦调制度if(++t>13)t=0;//旋转计数器 ms_10=0;if(ADC_VFB>=600)//600*(3.3/1024)=1.9V,大于此值后跳出软启动{//软启动成功break; } elseif(sin_b>=254)//软启动失败{sin_b=10;//减小幅度for(;;)//死循环{if(ADC_flag>0){ADC_VFB=ADC_Convert_8(VFB);//得到输出结果ADC_flag=0;}//打开模拟调节器if(ADC_VFB>250)sin_b--;//减小幅度elseif(ADC_VFB<246)sin_b++;//增大幅度//限制数据if(sin_b>=254)sin_b=254;elseif(sin_b<=10)sin_b=10;//屏幕显示故障HC595_Send_16bit(tab_wei[d],Error_tab[d]);if(++d>5)d=0;//IWDG_KR=0xaa;//喂狗}} } } }#else sin_b=100;//初始化SPWM调制度#endifADC_flag=0;//清除标志ADC_Value=0;ADC_VFB=0;t=0;while(1){//VFB稳压处理 if(ADC_flag>0)//完成采样 {ADC_Value+=ADC_Convert_8(VFB);//得到输出结果IFB_temp+=ADC_Convert_8(IFB);if(++t>64)//正弦波45度处连续采样64次{t=0;ADC_flag=0;ADC_VFB=ADC_Value>>6;//求平均值后得到正弦波有效值ADC_IFB=IFB_temp>>6;//if((TIM1_SR1&0x80)>0)sin_b+=PIDCalc(ADC_VFB);//增量PID//elsesin_b=100;//短路后减低幅度if(sin_b>=253)sin_b=253;//限幅elseif(sin_b<10)sin_b=10;IFB_temp=0;ADC_Value=0;Dispaly_KEX_DEC();//采样完成后刷新缓冲区}}//空闲处理温度(PWM控制范围:25度-60度:543)else {//30度打开风扇(NTC=10K,5V电压,下拉电阻1.3K)ADC_TFB=ADC_Convert_8(TFB);//TFB转换8次if((Last_temp&0x7F)>30)//25度TIM2_CCR1L=(Last_temp&0x7F)<<2;//控制风扇转速*4elseTIM2_CCR1L=0;//关闭风扇 }//LED闪烁指示,查看CPU运行速度 if(ms_10>=15) {ms_10=0;if((TIM1_SR1&0x80)>0)LED=0;elseLED=~LED;if(++page_cnt>=100)page_cnt=0;//轮换显示//翻页计数器 }//电压,电流,温度,频率刷屏显示处理if(page_cnt<50){if(d==4)HC595_Send_16bit(tab_wei[d],tab_num[dis[d]]|0x80);//数码管第5位显示小数点elseHC595_Send_16bit(tab_wei[d],tab_num[dis[d]]);}elseif(page_cnt>=50)HC595_Send_16bit(tab_wei[d],tab_num[dis_2[d]]);if(++d>5)d=0;//IWDG_KR=0xaa;//喂狗}//return0; }//endmain#pragmavector=TIM1_OVR_UIF_vector//TIM1更新中断__interruptvoidTIM1_OVR_UIF(void){u8PWM_P=255-sin_50[cont];TIM1_CCR4L=ALU(sin_50[cont],sin_error);TIM1_CCR3L=ALU(PWM_P,sin_error);HZ_out=(cont>=208)?1:0;//基准波输出if(++cont>=416){cont=0;ms_10++;sin_error=sin_b;//零点投放误差}if(cont==62||cont==270)ADC_flag++;//开始ADC采样64个点//IWDG_KR=0xaa;//喂狗TIM1_SR1=0;//清除更新中断return;}这里是功能模块的初始化:#include"APP.h"u8Last_temp;//保存最新的温度值unionchange{//两个单字节结合一个双字节:u16two;u8one[2];}ss;constu8Temp_table[110]={//NTC10K温度表(-10~99度)供电5V,上拉NTC10k,下拉1.3K9,9,10,10,11,12,12,13,13,14,15,15,16,17,18,19,20,21,21,22,24,25,26,27,28,29,31,32,33,35,36,38,39,41,42,44,46,48,50,51,53,55,57,59,62,64,66,68,71,73,76,78,81,83,86,89,91,94,97,100,103,105,108,111,114,118,121,124,127,130,133,136,140,143,146,149,153,156,159,162,166,169,172,175,179,182,185,188,191,195,198,201,204,207,210,213,216,219,222,225,228,231,233,236,239,242,244,247,250,252};//==================PID迭代================================//==================PID迭代================================signedcharPIDCalc(u16NextPoint){intiError;staticintek1,ek_d;staticintek2,ek3;//U(k+1)=U(k)+(KP*E(k)+KI*E(k-1)+KD*E(k-2))iError=SetPoint-NextPoint;//增量计算ek1+=iError;ek_d=ek2-ek3;ek3=ek2;ek2=iError;return(iError>>Proportion)//E[k]项+(ek1>>Integral)//E[k-1]项+(ek_d>>Derivative);//E[k-2]项 }//=======================同周期乘法器========================u8ALU(u8multiplier,u16multiplicand){u16product=0;u8t=0;do{ if(multiplier&1)product+=multiplicand; elseproduct+=0; multiplicand<<=1; multiplier>>=1;}while(++t<8);returnproduct>>8;}/*************************************************函数名称:u8Temp_search(u8k)**功能:温度搜索**参数:无**输入:ADC采样值**返回值:10进制,带符号的温度值(&0x80):"1":为正温度(含0)“0”为负温度**调用:***********************************************/u8Temp_search(u8t_new)//搜索{u8i; if(t_new>=Temp_table[Last_temp]) { while(1) { if(t_new>=Temp_table[Temp_max])//判断数据是否超出范围,超出后显示100度 { i=99;//返回最大温度值 break; } else { for(;t_new>=Temp_table[Last_temp];Last_temp++);//t_new大于数组表则退出循环 i=Last_temp; break; } } } else//小于最低温度后 { while(1) { if(t_new<Temp_table[0])//比最低温度还要小时 { i=0; break; } else { for(;t_new<Temp_table[Last_temp-1];Last_temp--);//寻找最低匹配温度 i=Last_temp; break; } } }if(i>=Temp_min){i=i-Temp_min;return(i|0x80);}//大于Temp_min则对应的温度为正温度数,最高位为1则为正,包含特殊0else{i=Temp_min-i;returni;}//显示负温度 }voidADC_Init(void){ADC_CSR=VFB;//选择通道AIN3/PD2,VFBADC_CR1=0;//Fadc=Fmast/2//ADC_CR1=0x10;///3//ADC_CR1=0x20;///4//ADC_CR1=0x30;///6//ADC_CR1=0x40;///8//ADC_CR1=0x50;///10//ADC_CR1=0x60;///12//ADC_CR1=0x70;///18ADC_CR2=0x38;//数据排列,右对齐ADC_TDRL=0x01;//禁止施密特出发}u16ADC_Convert_8(u8k)//连续转换8次{u8i;u16result=0;ADC_CSR=k;//获取通道ADC_CR1|=0x01;//低功耗唤醒ADCfor(i=0;i<8;i++){ADC_CR1|=0x01;//开启转换while(!(ADC_CSR&0x80));//等待转换结束ADC_CSR&=0xef;//清除标志s1=ADC_DRL;//防止数据错乱,先读低位在读高位s0=ADC_DRH;result+=s2;//累计}returnresult>>3;}voidTimer2_Init(void)//PWM控制风扇转速{PD_DDR|=0x10;//PD4输出模式,FANPD_CR1|=0x10;//推挽输出PD_CR2=0;TIM2_IER=0x00;//禁止中断TIM2_IER=0x00;//不使用中断//TIM2_EGR=0x01;//允许产生更新标志TIM2_CCMR1=0x68;//模式1,启用影子寄存器TIM2_CCER1=0x01;//信号输出到对应的引脚TIM2_CNTRH=0;TIM2_CNTRL=199;//计数器值TIM2_ARRH=0x00;TIM2_ARRL=0xFF;//自动重装的值(16bit寄存器)TIM2_PSCR=3;//分频值2^3,Fs=16Mhz/(255+1)/(2^3)=7.8KhzTIM2_CCR1H=0;//TIM2_CCR1L=0;//(0-255)TIM2_CR1=0x01;//使能计数器}voidTimer1_Init(void)//PWM输出配置{PC_DDR|=0x18;//Pc3,7为输出模式PC_CR1|=0x18;//推挽输出PC_CR2=0;//TIM1_CH3,TIM1_CH4输出SPWMTIM1_PSCRH=0;//预分频TIM1_PSCRL=2;//Fs=16Mhz/(2+1)=5.3MhzTIM1_ARRH=0;//设定重装载值TIM1_ARRL=0xFF;//最大PWM分辨率为8bit,载波=5.3Mhz/255=20.9Khz#if(Unipolar_Choice>0)TIM1_CR1|=0xA0;//使能影子寄存器,选择中心对齐模式#elseTIM1_CR1|=0x80;//使能影子寄存器,选择边沿对齐模式#endifTIM1_EGR|=0x01;//产生一个更新事件,使预分频设置有效TIM1_CCR3H=0;//占空比TIM1_CCR4H=0;//占空比TIM1_CCR3L=0;//关闭输出TIM1_CCR4L=0;TIM1_CCMR3=0x68;//PWM模式1TIM1_CCMR4=0x68;//PWM模式1//TIM1_CCER1=0x10;//TIM1_CCER2=0x11;//TIM1_CH3独立输出,TIM1_CH4独立输出(无死区)//TIM1_DTR=0x25;//死区控制TIM1_IER=0x01;//允许TIM1更新中断TIM1_BKR|=0xF1;//开启输出,开启刹车使能,1级锁定TIM1_CR1|=0x01;//向上计数,缓存,使能}voidHC595_Dispaly_Init(void)//595显示初始化(发送时钟:16Mhz/2=8Mhz){PC_DDR|=0xe0;//Pc5,6,7为输出模式PC_CR1|=0xe0;//推挽输出PC_CR2=0;SPI_CR2|=0xC0;//只发送模式SPI_CR1=0x04;///2//SPI_CR1=0x0C;///4//SPI_CR1=0x14;///8//SPI_CR1=0x1C;///16//SPI_CR1=0x24;///32//SPI_CR1=0x2C;///64//SPI_CR1=0x34;//128//SPI_CR1=0x3C;//256SPI_DR=0;//发送空SPI_CR1|=0x40;//开启SPISPI_RCK=0;}voidHC595_Send_16bit(u8duan,u8data_i)//发送16bit数据(高位在前,低位在后){SPI_RCK=0;//========================numwhile(!(SPI_SR&0x02));//等待发送完成SPI_DR=duan;//发送数据//========================duanwhile(!(SPI_SR&0x02));//等待发送完成SPI_DR=data_i;//发送数据while(SPI_SR&0x80);//查看是否忙//=================================endwhile(!(SPI_SR&0x02));//等待发送完成while(SPI_SR&0x80);//查看是否忙SPI_RCK=1;//595输出使能开,输出数据return;}externu8dis[6];//第一页显示缓存externu8dis_2[6];//第二页显示缓存externu16ADC_VFB,ADC_TFB,ADC_IFB;//externu8sin_error;//externu8HZ_50_60;voidDispaly_KEX_DEC(void)//16进制转换到10进制{u16temp;temp=ADC_VFB;//输出电压计算temp+=ADC_VFB<<2;//*320temp>>=4;//temp/1024dis[0]=temp/100;temp=temp-(dis[0]*100);dis[1]=temp/10;dis[2]=temp%10;if(dis[0]==0)dis[0]=10;//不显示//=====================================================temp=ADC_IFB*55;//输出电流转换,外部采样电阻0.03/2=0.015R//temp+=ADC_IFB<<2;//*220->temp>>=4;//temp/1024dis[3]=temp/100;temp=temp-(dis[3]*100);dis[4]=temp/10;dis[5]=temp%10;if(dis[3]==0)dis[3]=10;//不显示//======================================================dis_2[1]=Temp_search(ADC_TFB>>2);//温度转换if(dis_2[1]&0x80)//正温度dis_2[2]=11;//显示Celse//负温度dis_2[2]=12;//显示C.dis_2[1]&=0x7F;//出去温度符号位dis_2[0]=dis_2[1]/10;//得到温度高位dis_2[1]=dis_2[1]%10;//得到温度低位if(dis_2[0]==0)dis_2[0]=10;//不显示//======================================================//频率显示//if(HZ_50_60>0)//60hz//dis_2[3]=6;//显示6//elsedis_2[3]=5;dis_2[4]=0;dis_2[5]=13;//显示Hreturn;}voidIWDG_Init(void)//配置并启动看门狗{IWDG_KR=0xcc;//启动独立看门狗IWDG_KR=0x55;//写入解锁IWDG_PR=0x06;//256分频IWDG_RLR=0xff;//设置重载寄存器IWDG_KR=0xaa;//锁定并刷新}

怎么才能分辨喇叭线正负极? 新凯越油泵油管怎么拆 控制器倒车线接线图解 如何自制12v电瓶充电器? 怎么用万用表测量电瓶电压
热门搜索
婚礼图片唯美 导盲犬图片 殡仪馆火化死人图片 坦克图片大全 qq头像男生动漫可爱