广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    12V500w车载工频逆变器制作

    来源:网络收集  点击:  时间:2024-03-14
    【导读】:
    在现代工业的迅速发展下,电子元件越来越便宜,DIY也越来越简单,下面我将分享我给朋友做的车载逆变器制作过程,希望对逆变器发烧友们的有用工具/原料more烙铁,mos管方法/步骤1/4分步阅读

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

    2/4

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

    3/4

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

    4/4

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

    方法/步骤21/3

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

    2/3

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

    3/3

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

    方法/步骤31/3

    装好后的整机

    2/3

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

    3/3

    下面则是你们最关心的了--程序,我采用的IAR的编译器,

    下面是主函数:

    //采用双极性方式调制,载波20K

    #include IOSTM8S103F3.h

    #include APP.h

    /*

    采用2个共阴三段数码管做显示(SM320281)

    74hc595高位(bit7)接数码管a,最低位接小数点(spi采用高位在前,低位在后)

    管脚定义:

    Poin1:FAN+ poin20:VFB

    poin2:TFB poin19:50HZ/60HZ(引脚悬空默认50HZ输出)

    poin3:IFB poin18:NC

    poin4:RST poin17:SPI_RCK

    poin5:NC poin16:SPI_DI

    poin6:HZ_out poin15:SPI_SCK

    poin7:GND poin14:SPWM_P

    poin8:VCAP poin13:SPWM_N

    poin9:3.3V poin12:NC

    poin10:LED- poin11:SPWM_EN

    */

    #define u8 unsigned char

    #define u16 unsigned int

    #define u32 unsigned long

    #define LED PA_ODR_ODR3 //LED-指示输出PA3

    //#define HZ_out PA_ODR_ODR2 //基准方波输出

    #define HZ_out PD_ODR_ODR1 //基准方波输出

    #define SST_Tset 1

    #define FQ PD_IDR_IDR2 //PD2

    #define num50hz 416//50hz

    u8 ADC_flag;

    u16 ADC_Value,ADC_VFB,ADC_TFB,ADC_IFB,IFB_temp;

    u8 sin_error;

    u16 cont;

    u8 ms_10,t,d;

    u8 dis;//第一页显示缓存

    u8 dis_2;//第二页显示缓存

    u16 sin_num_max; //点数最大值

    u8 page_cnt;

    int sin_b;

    const u8 logo_tab={//3个点在数码管上循环

    0x01,0x01,0x01,0x00,0x00,0x00,//1

    0x00,0x01,0x03,0x00,0x00,0x00,//2

    0x00,0x00,0x07,0x00,0x00,0x00,//3

    0x00,0x00,0x06,0x00,0x00,0x02,//4

    0x00,0x00,0x04,0x00,0x00,0x06,//5

    0x00,0x00,0x00,0x00,0x00,0x0E,//6

    0x00,0x00,0x00,0x00,0x08,0x0C,//7

    0x00,0x00,0x00,0x08,0x08,0x08,//8

    0x00,0x00,0x00,0x18,0x08,0x00,//9

    0x00,0x00,0x00,0x38,0x00,0x00,//10

    0x10,0x00,0x00,0x30,0x00,0x00,//11

    0x30,0x00,0x00,0x20,0x00,0x00,//12

    0x31,0x00,0x00,0x00,0x00,0x00,//13

    0x21,0x01,0x00,0x00,0x00,0x00,//14

    };

    const u8 sin_50={ //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,

    };

    const u8 tab_wei={0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};//6个位选,第一位为电压显示最高位(595—bit5)

    const u8 tab_num={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x39,0xB9,0x76};//14个数,最后一位清空不显示

    const u8 Error_tab={0x6D,0x6D,0x78,0x79,0x70,0x70};//故障代码显示(SSt,Err)

    void System_Init(void)

    {

    //启用内部高速晶振且无分频16MHz

    CLK_ICKR|=0x01; //开启内部HSI

    while(!(CLK_ICKR0x02));//HSI准备就绪

    CLK_SWR=0xe1; //HSI为主时钟源

    CLK_CKDIVR=0x00; //HSI不分频

    //启用内部高速晶振且无分频16MHz

    CLK_SWCR|=0x02; //开启切换

    CLK_ICKR|=0x01; //开启内部HSI

    while(!(CLK_ICKR0x02));//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_out

    PA_CR1|= 0x0C;

    PA_CR2=0;

    //FQ频率选择

    PD_DDR|= 0x02;//PD2上拉输入模式,PD1输出

    PD_CR1|= 0x06;

    //PD_CR2=0;

    }

    extern u8 Last_temp; //保存最新的温度值

    int main()

    {

    System_Init();//系统初始化,打开内部RC=16Mhz

    Timer1_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_Tset0)

    ms_10=0;

    while(1)

    {

    //IWDG_KR = 0xaa;//喂狗

    HC595_Send_16bit(tab_wei,logo_tab); //旋转循环显示---

    if(++d5)d=0;

    if(cont==104)//最大值开启采样

    {

    ADC_VFB=ADC_Convert_8(VFB);//得到输出结果

    if(ms_10=7)//软启动延时计数器

    {

    sin_b+=2; //增大正弦调制度

    if(++t13)t=0;//旋转计数器

    ms_10=0;

    if(ADC_VFB=600)//600*(3.3/1024)=1.9V,大于此值后跳出软启动

    {

    //软启动成功

    break;

    }

    else if(sin_b=254)//软启动失败

    {

    sin_b = 10;//减小幅度

    for(;;)//死循环

    {

    if(ADC_flag0)

    {

    ADC_VFB=ADC_Convert_8(VFB);//得到输出结果

    ADC_flag=0;

    }

    //打开模拟调节器

    if(ADC_VFB250)sin_b--;//减小幅度

    else if(ADC_VFB246)sin_b++;//增大幅度

    //限制数据

    if(sin_b=254)sin_b = 254;

    else if(sin_b=10)sin_b = 10;

    //屏幕显示故障

    HC595_Send_16bit(tab_wei,Error_tab);

    if(++d5)d=0;

    // IWDG_KR = 0xaa;//喂狗

    }

    }

    }

    }

    }

    #else

    sin_b=100;//初始化SPWM调制度

    #endif

    ADC_flag=0;//清除标志

    ADC_Value=0;

    ADC_VFB=0;

    t=0;

    while(1)

    {

    //VFB稳压处理

    if(ADC_flag0)//完成采样

    {

    ADC_Value+=ADC_Convert_8(VFB);//得到输出结果

    IFB_temp+=ADC_Convert_8(IFB);

    if(++t64)//正弦波45度处连续采样64次

    {

    t=0;

    ADC_flag=0;

    ADC_VFB=ADC_Value6;//求平均值后得到正弦波有效值

    ADC_IFB=IFB_temp6;

    //if((TIM1_SR10x80)0)

    sin_b+= PIDCalc(ADC_VFB);//增量PID

    //else sin_b=100;//短路后减低幅度

    if(sin_b=253)sin_b=253;//限幅

    else if(sin_b10)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_temp0x7F)30)//25度

    TIM2_CCR1L = (Last_temp0x7F) 2;//控制风扇转速 *4

    else

    TIM2_CCR1L=0;//关闭风扇

    }

    //LED闪烁指示,查看CPU运行速度

    if(ms_10=15)

    {

    ms_10=0;

    if((TIM1_SR10x80)0)LED=0;

    else LED=~LED;

    if(++page_cnt=100)page_cnt=0;//轮换显示//翻页计数器

    }

    //电压,电流,温度,频率刷屏显示处理

    if(page_cnt50)

    {

    if(d==4) HC595_Send_16bit(tab_wei,tab_num]|0x80);//数码管第5位显示小数点

    else HC595_Send_16bit(tab_wei,tab_num]);

    }

    else if(page_cnt=50)

    HC595_Send_16bit(tab_wei,tab_num]);

    if(++d5)d=0;

    // IWDG_KR = 0xaa;//喂狗

    }

    // return 0;

    }

    //end main

    #pragma vector=TIM1_OVR_UIF_vector//TIM1更新中断

    __interrupt void TIM1_OVR_UIF(void)

    {

    u8 PWM_P = 255 - sin_50;

    TIM1_CCR4L=ALU(sin_50,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

    u8 Last_temp; //保存最新的温度值

    union change{ // 两个单字节结合一个双字节:

    u16 two;u8 one;}ss;

    const u8 Temp_table={//NTC10K温度表(-10~99度)供电5V,上拉NTC10k,下拉1.3K

    9,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迭代================================

    signed char PIDCalc(u16 NextPoint)

    {

    int iError;

    static int ek1,ek_d;

    static int ek2,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 (iErrorProportion) //E项

    + (ek1Integral) //E项

    + (ek_dDerivative); //E项

    }

    //=======================同周期乘法器========================

    u8 ALU(u8 multiplier, u16 multiplicand)

    {

    u16 product = 0;

    u8 t=0;

    do{

    if(multiplier 1)product += multiplicand;

    else product +=0;

    multiplicand = 1;

    multiplier = 1;

    } while(++t8);

    return product8;

    }

    /***********************************************

    **函数名称:u8 Temp_search(u8 k)

    **功 能:温度搜索

    **参 数:无

    **输入:ADC采样值

    **返回值 :10进制,带符号的温度值(0x80):1:为正温度(含0)“0”为负温度

    **调用 :

    ***********************************************/

    u8 Temp_search(u8 t_new)//搜索

    {

    u8 i;

    if(t_new=Temp_table)

    {

    while(1)

    {

    if(t_new=Temp_table)//判断数据是否超出范围,超出后显示100度

    {

    i= 99;//返回最大温度值

    break;

    }

    else

    {

    for(;t_new=Temp_table;Last_temp++);//t_new大于数组表则退出循环

    i= Last_temp;

    break;

    }

    }

    }

    else //小于最低温度后

    {

    while(1)

    {

    if(t_newTemp_table)//比最低温度还要小时

    {

    i=0;

    break;

    }

    else

    {

    for(;t_newTemp_table;Last_temp--);//寻找最低匹配温度

    i= Last_temp;

    break;

    }

    }

    }

    if(i=Temp_min){i=i-Temp_min; return (i|0x80);}//大于Temp_min则对应的温度为正温度数,最高位为1则为正,包含特殊0

    else {i=Temp_min-i;return i;}//显示负温度

    }

    void ADC_Init(void)

    {

    ADC_CSR=VFB; //选择通道 AIN3/PD2,VFB

    ADC_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;// /18

    ADC_CR2=0x38; // 数据排列,右对齐

    ADC_TDRL=0x01;//禁止施密特出发

    }

    u16 ADC_Convert_8(u8 k)//连续转换8次

    {

    u8 i;

    u16 result=0;

    ADC_CSR=k;//获取通道

    ADC_CR1|=0x01;//低功耗唤醒ADC

    for(i=0;i8;i++)

    {

    ADC_CR1|=0x01;//开启转换

    while(!(ADC_CSR 0x80)); // 等待转换结束

    ADC_CSR=0xef;//清除标志

    s1=ADC_DRL;//防止数据错乱,先读低位在读高位

    s0=ADC_DRH;

    result+=s2;//累计

    }

    return result3;

    }

    void Timer2_Init(void)//PWM控制风扇转速

    {

    PD_DDR|= 0x10;//PD4输出模式,FAN

    PD_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.8Khz

    TIM2_CCR1H = 0;//

    TIM2_CCR1L = 0;//(0-255)

    TIM2_CR1=0x01;//使能计数器

    }

    void Timer1_Init(void)//PWM输出配置

    {

    PC_DDR|= 0x18;//Pc3,7为输出模式

    PC_CR1|= 0x18;//推挽输出

    PC_CR2 = 0;

    //TIM1_CH3,TIM1_CH4输出SPWM

    TIM1_PSCRH=0;//预分频

    TIM1_PSCRL=2;//Fs = 16Mhz/(2+1)=5.3Mhz

    TIM1_ARRH=0;//设定重装载值

    TIM1_ARRL=0xFF;//最大PWM分辨率为8bit,载波 = 5.3Mhz/255 = 20.9Khz

    #if (Unipolar_Choice0)

    TIM1_CR1|=0xA0;//使能影子寄存器,选择中心对齐模式

    #else

    TIM1_CR1|=0x80;//使能影子寄存器,选择边沿对齐模式

    #endif

    TIM1_EGR|=0x01;//产生一个更新事件,使预分频设置有效

    TIM1_CCR3H=0;//占空比

    TIM1_CCR4H=0;//占空比

    TIM1_CCR3L=0;//关闭输出

    TIM1_CCR4L=0;

    TIM1_CCMR3=0x68;//PWM模式1

    TIM1_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;//向上计数,缓存,使能

    }

    void HC595_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;//256

    SPI_DR=0;//发送空

    SPI_CR1|=0x40;//开启SPI

    SPI_RCK=0;

    }

    void HC595_Send_16bit(u8 duan,u8 data_i)//发送16bit数据(高位在前,低位在后)

    {

    SPI_RCK=0;

    //======================== num

    while(!(SPI_SR0x02));//等待发送完成

    SPI_DR=duan;//发送数据

    //======================== duan

    while(!(SPI_SR0x02));//等待发送完成

    SPI_DR=data_i;//发送数据

    while(SPI_SR0x80);//查看是否忙

    //=================================end

    while(!(SPI_SR0x02));//等待发送完成

    while(SPI_SR0x80);//查看是否忙

    SPI_RCK=1;//595输出使能开,输出数据

    return;

    }

    extern u8 dis;//第一页显示缓存

    extern u8 dis_2;//第二页显示缓存

    extern u16 ADC_VFB,ADC_TFB,ADC_IFB;

    //extern u8 sin_error;

    //extern u8 HZ_50_60;

    void Dispaly_KEX_DEC(void)//16进制转换到10进制

    {

    u16 temp;

    temp=ADC_VFB;//输出电压计算

    temp+=ADC_VFB2;//*320

    temp=4;//temp/1024

    dis=temp/100;

    temp = temp-(dis*100);

    dis = temp/10;

    dis = temp%10;

    if(dis==0)dis=10;//不显示

    //=====================================================

    temp= ADC_IFB*55;//输出电流转换,外部采样电阻0.03/2 = 0.015R

    //temp+= ADC_IFB2;//*220-

    temp=4;//temp/1024

    dis=temp/100;

    temp = temp-(dis*100);

    dis = temp/10;

    dis = temp%10;

    if(dis==0)dis=10;//不显示

    //======================================================

    dis_2= Temp_search(ADC_TFB2);//温度转换

    if(dis_20x80)//正温度

    dis_2 = 11;//显示C

    else//负温度

    dis_2 = 12;//显示C.

    dis_2=0x7F;//出去温度符号位

    dis_2 = dis_2/10;//得到温度高位

    dis_2 = dis_2%10;//得到温度低位

    if(dis_2==0)dis_2=10;//不显示

    //======================================================

    //频率显示

    //if(HZ_50_600)//60hz

    //dis_2=6;//显示6

    //else

    dis_2=5;

    dis_2=0;

    dis_2=13;//显示H

    return;

    }

    void IWDG_Init(void) //配置并启动看门狗

    {

    IWDG_KR = 0xcc;//启动独立看门狗

    IWDG_KR = 0x55;//写入解锁

    IWDG_PR = 0x06;//256分频

    IWDG_RLR = 0xff;//设置重载寄存器

    IWDG_KR = 0xaa;//锁定并刷新

    }

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_350673.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 21:20:45  耗时:0.025
    0.0249s