• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【原创】基于STM32的数控直流电源

    参赛类型:数字电源类

 

 

数控直流电源

目录

1、介绍                                         …………      

2、整体方案                                   …………         

3、硬件电路                                    …………        

4、软件                                        …………        

5、心得小结                                    …………        

6、附录:    1、元器件                             …………        

      2、电路图                             …………

      3、代码                                …………

 

1、介绍:

这个数控直流电源,是基于CORTEX_M3的STM32F103ZET6芯片的一个制作。它的能实现0~9.9V的电压变化,每次变化为0.1V。它采用了内部的12位DAC和12位的ADC,精度比普通的8位ADC高出16倍,在实际的测试中,本制作的精度达到0.01V。本制作可以实现按键加减电压大小、按键自动调节电压、输入数值控制输出电压、输出幅值频率可调的三角波功能。同时,本制作采用320*240的LCD液晶显示,并且在显示的基础上,制作了完整的用户界面,大大方便了用户的使用。

2、整体方案:

 

方案介绍:

     本方案围绕stm32芯片,由供电模块、液晶显示模块、报警模块、负载电流检测模块、电源产生模块、按键模块构成。

    电源模块:我采用的是桥式整流结合三端稳压芯片的处理方法。由此得到单片机使用的5v电源和驱动运算放大器的12V电源。

     电源发生模块:这个系统由LM358运算放大器和stm32芯片内部12位DAC组成。

 负载电流检测模块:这个模块由stm32内部12位ADC和自制的1欧姆康铜电阻组成。

      

液晶显示模块:主要有320*240LCD组成,负责显示参数和提供用户服务界面。

     过流报警模块:这个部分由蜂鸣器和红色的LED指示灯组成。负责当发生过流现象时,给用户报警。

     按键模块:这是本系统    的用户控制方式。

3、硬件电路

   (1)、stm32f103zet6单片机最小系统:

      

这款ST公司生产的基于cortex_m3内核的芯片,在当今的电子产品领域占有很大的市场。这块32位芯片,有 144个引脚、512K的rom、2路ADC支持16通道,2路DAC,14个定时器,spi通信、i2c通信、串口通信方式。对于本系统,这个芯片的已经足够。

 

  

(2)、电源电路

    

在这个部分,我主要采用桥式整流,使用了四个耐压1000v的in4007,将双24V的变压器得到的副边电压进行整流,再由1000uf电容和LM7815和LM2940稳压得系统所需的5V和12V电源。

(3)、电源产生电路和检测电路

在运算放大器部分,我选择的是带宽1M的LM358,采用1k的精密电阻,将DA得到的电源放大4倍,再经过一级的放大器 跟随电路输入到负载电路之中。

负载串联了1欧姆的康铜电阻,康铜电阻的温漂小,直接AD测量两端的电压便可得到负载的电流状况。

(4)、显示电路:

  

采用的是lil9320驱动的320*240方案。

(5)、报警电路和按键电路灯省略。

4、软件部分:

                      主体程序流程图

 

        

在程序设计部分,主要设计ADC和DAC以及定时器中断和外部触发中断的使用。

5、心得小结

在本次设计中,前期我花费了大量的时间查阅论文和思考放大电路设计上,而最后经过试验,还是选择了简单而实用的放大器加更随器的方案。在设计过程中遇到过很麻烦的事,当时网购了DAC7512的12位DAC芯片,发现是很小的贴片,经过较长时间搞定之后,一次使用过程中,这块芯片坏了。于是,不得不转到当前采用的方案上。

这个教训,让我明白实践和试验的重要性,少走弯路,多做实用的事。

6、附录:

1、元器件清单:stm32f103zet6单片机最小系统,320*240tft lcd,24V变压器、按键模块、LM7805、LM7815、LM2940等

2、原理图:

   3、源程序:

主函数部分:

int main(void)

{

while(1)    //主循环

{

  DAC->DHR12R1 =0;

  ili9320_Chinese_str((320-16*17)/2,50,17,Chinese_Table_16x16_nan,charColor,Blue);

  ili9320_Chinese_str(70,90,3,Chinese_Table_16x16_ti,charColor,Blue);

  ili9320_Chinese_str(140,90,8,Chinese_Table_16x16_shu,charColor,Blue);

  ili9320_Chinese_str((320-16*15)/2,200,15,Chinese_Table_16x16_zun,charColor,Blue);

 if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

  {

Delay_ARMJISHU(100);

while(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5));

ili9320_Clear(Blue); 

exit_2=1;

  while(exit_2)  //按*键进入  功能循环

  {

     DAC->DHR12R1 = 0;

 

    ili9320_Chinese_str(0,10,6,Chinese_Table_16x16_1,charColor,Blue);

 ili9320_Chinese_str(0,40,6,Chinese_Table_16x16_2g,charColor,Blue);

 ili9320_Chinese_str(0,70,6,Chinese_Table_16x16_3,charColor,Blue);

 ili9320_Chinese_str(0,100,3,Chinese_Table_16x16_4,charColor,Blue);

//  ili9320_Chinese_str(0,130,2,Chinese_Table_16x16_5,charColor,Blue);

  //功能一:手动加减电压值

   if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))  

     {

 Delay_ARMJISHU(200);

 if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))

   {

        while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12));

ili9320_Clear(Blue);

exit=1; 

    while(exit)

{

      ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);

ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);

a1=(vol+1)%10;

  a2=(vol+1-a1)/10;

  ili9320_PutChar_num(176,50,a2,charColor,Blue);

  ili9320_DrawPoint(200,50,charColor,Blue);//画一个点

      ili9320_PutChar_num(224,50,a1,charColor,Blue);

  if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))          //+

   {

Delay_ARMJISHU(300);

if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))

{

       if(vol<99)

   {

           vol=vol+1;

    }

   while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8));

       }

}

  if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9))    //-

   {

Delay_ARMJISHU(300);

if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9))

{

       if(vol>3)

    {

    vol=vol-1;

        while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9));

   }

}

        

       }

   DAC->DHR12R1 = (vol*40950-230)/1304; 

 //检测过流

   ADCConvertedValueLocal = ADCConvertedValue;

       Precent = (ADCConvertedValueLocal*100/0x1000); //算出百分比

      Voltage = Precent*33;

  while(Voltage>500)

ili9320_Clear(Blue); 

while(1)

{

ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);

       

DAC->DHR12R1 = 0; 

a1=0;

    a2=0;

    ili9320_PutChar_num(176,50,a2,charColor,Blue);

    ili9320_DrawPoint(200,50,charColor,Blue);//画一个点

        ili9320_PutChar_num(224,50,a1,charColor,Blue);

ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);

ili9320_Chinese_str((320-16*10)/2,200,10,Chinese_Table_16x16_x,charColor,Blue);

GPIO_SetBits(GPIO_DAC,DS1_PIN|DS2_PIN);    //所有引脚置高电平

}

}

//退出按键,在所有的功能中都使用这种退出方法

if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

  {

     Delay_ARMJISHU(300);

  if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

   {

 while(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5));

 exit=0;

 vol=0;

 ili9320_Clear(Blue); 

}

  

  }

}

   }

 

      }

//功能2:自动加减电压值  (6号按键)

if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6))

  {

        Delay_ARMJISHU(200);

if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6))

       {

    exit=1;  

while(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6));

 /*-----------功能2的定时器初始化------------*/

  Timer_Config();

  NVIC_Config();

   TIM_Cmd(TIM2,DISABLE);  //起初是关闭的,当进入功能2后打开 

ili9320_Clear(Blue);

while(exit)

{

        vol=vol_21;

                        ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);

ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);

a1=(vol+1)%10;

  a2=(vol+1-a1)/10;

  ili9320_PutChar_num(176,50,a2,charColor,Blue);

  ili9320_DrawPoint(200,50,charColor,Blue);//画一个点

      ili9320_PutChar_num(224,50,a1,charColor,Blue);

//自加扫描

 if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)&counter21)

     {

    flag2=1;

     Delay_ARMJISHU(200);

         if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))

  {

   TIM_Cmd(TIM2,ENABLE); 

counter21=0;   

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8));

}

            }

if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)&!counter21)

     {

     Delay_ARMJISHU(200);

         if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))

  {

TIM_Cmd(TIM2,DISABLE); 

counter21=1;

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8));

}

            }

                 //自减扫描

  if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)&counter22)

     {

    flag2=0;

     Delay_ARMJISHU(200);

         if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9))

  {

   TIM_Cmd(TIM2,ENABLE); 

counter22=0;   

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9));

}

            }

if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)&!counter22)

     {

     Delay_ARMJISHU(200);

         if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9))

  {

TIM_Cmd(TIM2,DISABLE); 

counter22=1;

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9));

}

            } 

   DAC->DHR12R1 = (vol*40950-230)/1304; 

//检测过流

ADCConvertedValueLocal = ADCConvertedValue;

       Precent = (ADCConvertedValueLocal*100/0x1000); //算出百分比

      Voltage = Precent*33;

    while(Voltage>500)

 

ili9320_Clear(Blue); 

    while(1)

{

ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);

DAC->DHR12R1 = 0; 

a1=0;

     a2=0;

     ili9320_PutChar_num(176,50,a2,charColor,Blue);

ili9320_DrawPoint(200,50,charColor,Blue);//画一个点

ili9320_PutChar_num(224,50,a1,charColor,Blue);

ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);

ili9320_Chinese_str((320-16*10)/2,200,10,Chinese_Table_16x16_x,charColor,Blue);

 GPIO_SetBits(GPIO_DAC,DS1_PIN|DS2_PIN);    //所有引脚置高电平

}

}

//退出按键,在所有的功能中都使用这种退出方法

if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

  {

     Delay_ARMJISHU(100);

  if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

   {

 while(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5));

 exit=0;

 TIM_Cmd(TIM2,DISABLE);

 vol=0;

 vol_22=0;

 ili9320_Clear(Blue);

}

  

  }

}

}

      }

//功能3:输入电压数值    7号功能键

if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7))

  {

     Delay_ARMJISHU(100);

 if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7))

 {

  exit=1;

   while(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7));

     ili9320_Clear(Blue); 

while(exit)

{

  

  num31=num33;

  num32=num34;  

  ili9320_Chinese_str(10,12,12,Chinese_Table_16x16_q,charColor,Blue);

      ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);

  ili9320_DrawPoint(200,50,charColor,Blue);                 //画一个点

  ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);    //显示单位:v

  ili9320_PutChar_num(176,50,num32,charColor,Blue);     //显示十位  

  ili9320_PutChar_num(224,50,num31,charColor,Blue); //显示个位

   DAC->DHR12R1 = (vol*40950-230)/1304; 

              //先输入十位上的数键位,切换键,个位按键,确认键

  

   if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9))

   {

     Delay_ARMJISHU(300);

  if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9))

  {

   while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9));

 counter_3++;

  

  }

 

      }

      

 if((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)))

   {

     Delay_ARMJISHU(300);

  if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))

  {

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8));

if(!(counter_3%2))

{

    if(num33<10)  num33=num33+1;

if(num33>=10)  num33=0;

}

if(counter_3%2)

{

if(num34<10)  num34=num34+1;

if(num34>=10)  num34=0;

}

  }

  }

 

   

    if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10))                     //确认键 

  {

     Delay_ARMJISHU(300);

  if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10))

  {

   while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10));

   vol=num32*10+num31;

  }

      }

                      

//退出按键,在所有的功能中都使用这种退出方法

if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

  {

     Delay_ARMJISHU(300);

  if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

   {

 while(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5));

 exit=0;

 ili9320_Clear(Blue);

 num31=0;

 num32=0; 

 vol=0;

 num33=0;

 num34=0;

}

  

  }

//检测过流

     ADCConvertedValueLocal = ADCConvertedValue;

       Precent = (ADCConvertedValueLocal*100/0x1000); //算出百分比

      Voltage = Precent*33;

    while(Voltage>500)

    ili9320_Clear(Blue); 

    while(1)

{

DAC->DHR12R1 = 0; 

a1=0;

     a2=0;

ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);

     ili9320_PutChar_num(176,50,a2,charColor,Blue);

ili9320_DrawPoint(200,50,charColor,Blue);//画一个点

ili9320_PutChar_num(224,50,a1,charColor,Blue);

ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);

ili9320_Chinese_str((320-16*10)/2,200,10,Chinese_Table_16x16_x,charColor,Blue);

GPIO_SetBits(GPIO_DAC,DS1_PIN|DS2_PIN);    //所有引脚置高电平

}

}

}

  }

}

/*--------------------------------------------------功能4:三角波--------------------------------------------------------------*/

   //功能4:输出三角波    8号按键    :第一次使用的时候先输入一个值,然后确认,当确认完毕后,可以随意调节;再次按确认键停止工作

     if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8))

  {

     Delay_ARMJISHU(200);

 if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8))          

 {

     while(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8));

  exit=1;

  ili9320_Clear(Blue);

vol_ap=20;

vol_fp=10;

    

while(exit)

{

        //画波形的代码

        ili9320_Chinese_str(90,120,9,Chinese_Table_16x16_ru,charColor,Blue); 

    ili9320_Chinese_str(90,55,5,Chinese_Table_16x16_fu,charColor,Blue); //电压幅值

ili9320_Chinese_str(90,85,3,Chinese_Table_16x16_pin,charColor,Blue); //频率

ili9320_Chinese_str(165,85,1,Chinese_Table_16x16_dang,charColor,Blue); //档

   if((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)))             //设置电压值:1号按键

   {

      Delay_ARMJISHU(200);

   if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))

   {

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8));

vol_ap=vol_ap+5;

if(vol_ap>95)  vol_ap=20;

            ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);

a1=(vol_ap)%10;

  a2=(vol_ap-a1)/10;

  ili9320_PutChar_num(176,50,a2,charColor,Blue);

  ili9320_DrawPoint(200,50,charColor,Blue);//画一个点

      ili9320_PutChar_num(224,50,a1,charColor,Blue);

  }

}

    if((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)))             //设置频率:2号按键

   {

      Delay_ARMJISHU(200);

   if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9))

   {

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9));

vol_fp=vol_fp+1;

if(vol_fp>10)  vol_fp=1;

                                    ili9320_PutChar_num(140,80,vol_fp,charColor,Blue);   

                                }

}

   if((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10)))             //第一次按的时候,确认开始

    {

      Delay_ARMJISHU(200);

   if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10))

   {

while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10));

        ili9320_Clear(Blue);

ili9320_Chinese_str(20,100,16,Chinese_Table_16x16_bo,charColor,Blue); //电压幅值

  

  while(1)

  {

        while((vol_apc>vol_pre)&(vol_apc<=(vol_ap*40950/1304)))

        {

      vol_pre=vol_apc;

vol_apc=vol_apc+vol_fp;

      DAC->DHR12R1 =vol_apc;  

    }

      while(vol_apc>(vol_ap*40950/1304)) 

    {

    vol_apc=vol_apc-2*vol_fp; 

DAC->DHR12R1 =vol_apc;

}

      while((vol_apc1))

      {

vol_pre=vol_apc;

        vol_apc=vol_apc-vol_fp;

DAC->DHR12R1 =vol_apc;

      }

   while(vol_apc<=vol_fp) 

    {

    vol_apc=vol_apc+2*vol_fp;

DAC->DHR12R1 =vol_apc;

    }

         }

}

    }

 

//退出按键,在所有的功能中都使用这种退出方法

if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

  {

     Delay_ARMJISHU(300);

  if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

   {

 while(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5));

     exit=0;

   ili9320_Clear(Blue);

  TIM_Cmd(TIM3,DISABLE); 

}

  

  }

//检测过流

     ADCConvertedValueLocal = ADCConvertedValue;

       Precent = (ADCConvertedValueLocal*100/0x1000); //算出百分比

      Voltage = Precent*33;

    while(Voltage>500)

    ili9320_Clear(Blue); 

    while(1)

{

DAC->DHR12R1 = 0; 

a1=0;

     a2=0;

ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);

     ili9320_PutChar_num(176,50,a2,charColor,Blue);

ili9320_DrawPoint(200,50,charColor,Blue);//画一个点

ili9320_PutChar_num(224,50,a1,charColor,Blue);

ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue);

ili9320_Chinese_str((320-16*10)/2,200,10,Chinese_Table_16x16_x,charColor,Blue);

GPIO_SetBits(GPIO_DAC,DS1_PIN|DS2_PIN);    //所有引脚置高电平

}

}

}

}

 

      }

/*-------------------------------------------------------------------------------------------------------------------------------*/

  

   if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

  {

        Delay_ARMJISHU(100);

    if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5))

    {

 while(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5));

 exit_2=0;

 ili9320_Clear(Blue); 

 }

  

  } 

}

 

 

word文档数控直流电源 

全部回复(78)
正序查看
倒序查看
lizlk
LV.10
2
2012-04-21 10:37

老兄啊,你的图片没有传上来,请在传送之后,点击插入编辑器,这样图片才会正确显示。

这个东西是本分坛上一个很有代表性的作品,绝对支持!可是你的zip文件下来之后是个空白,什么都没有,请确认!

0
回复
nwx8899
LV.4
3
2012-04-21 10:39
@lizlk
老兄啊,你的图片没有传上来,请在传送之后,点击插入编辑器,这样图片才会正确显示。这个东西是本分坛上一个很有代表性的作品,绝对支持!可是你的zip文件下来之后是个空白,什么都没有,请确认!
不是吧 我从word ctrl+v的
0
回复
nwx8899
LV.4
4
2012-04-21 10:41
@lizlk
老兄啊,你的图片没有传上来,请在传送之后,点击插入编辑器,这样图片才会正确显示。这个东西是本分坛上一个很有代表性的作品,绝对支持!可是你的zip文件下来之后是个空白,什么都没有,请确认!
我看到的图片是显示的啊
0
回复
nwx8899
LV.4
5
2012-04-21 10:51
@lizlk
老兄啊,你的图片没有传上来,请在传送之后,点击插入编辑器,这样图片才会正确显示。这个东西是本分坛上一个很有代表性的作品,绝对支持!可是你的zip文件下来之后是个空白,什么都没有,请确认!

感谢提醒啊 没仔细看

从新编辑了一下,这下应该没啥问题了

0
回复
2012-04-21 10:59
@nwx8899
感谢提醒啊没仔细看从新编辑了一下,这下应该没啥问题了
图片和word都没问题了。
0
回复
nwx8899
LV.4
7
2012-04-21 11:03
@电源网-fqd
图片和word都没问题了。[图片]
3q3q
0
回复
2012-04-21 13:34
不明白整流部分为什么要用5只二极管
0
回复
2012-04-21 14:07
今晚我就准备准备  跟老兄学习学习
0
回复
hechaocao
LV.5
10
2012-04-22 02:41
@ycdy09@163.com
今晚我就准备准备 跟老兄学习学习
呵呵      用这个感觉  用M3有点浪费      我觉的很有可能是学生        很不错    支持!
0
回复
ctx1211
LV.7
11
2012-04-22 10:35
@hechaocao
呵呵     用这个感觉 用M3有点浪费     我觉的很有可能是学生       很不错   支持!
我也觉得是学生,好像是某年国家电子设计大赛的一个题目,呵呵
0
回复
ctx1211
LV.7
12
2012-04-22 10:37
@qinzutaim
不明白整流部分为什么要用5只二极管[图片]
4个整流,还有一个起快速关断作用吧
0
回复
IGBT2010
LV.8
13
2012-04-22 22:23

学习一下!!!

0
回复
LV.1
14
2012-04-23 14:45
@hechaocao
呵呵     用这个感觉 用M3有点浪费     我觉的很有可能是学生       很不错   支持!
严重浪费
0
回复
nwx8899
LV.4
15
2012-04-23 22:19
@qinzutaim
不明白整流部分为什么要用5只二极管[图片]

D3

1、防止反向

2、保护电电容和稳压管

总的来说增加D3可以增加电路的可靠性。C12为1000UF电容,交流输入为零时,电容电压为零,当交流市电突然加上时,次级变压器线圈需要给C12大电容充电,在此过程中LM7815也为后级电容和负载供电,这时充电浪涌电流很大,对D1、D2、D4、D5二极管的电流冲击会很大,会降低其使用寿命和可靠性,增加D3后整流电路变成3个二极管的串联,输入阻抗会增加,这样可降低电流浪涌,提高电路可靠性和使用寿命。

0
回复
nwx8899
LV.4
16
2012-04-23 22:21
@nwx8899
D31、防止反向2、保护电电容和稳压管总的来说增加D3可以增加电路的可靠性。C12为1000UF电容,交流输入为零时,电容电压为零,当交流市电突然加上时,次级变压器线圈需要给C12大电容充电,在此过程中LM7815也为后级电容和负载供电,这时充电浪涌电流很大,对D1、D2、D4、D5二极管的电流冲击会很大,会降低其使用寿命和可靠性,增加D3后整流电路变成3个二极管的串联,输入阻抗会增加,这样可降低电流浪涌,提高电路可靠性和使用寿命。
就是为了保险吧,如果为了降低成本,也可以去掉D3
0
回复
nwx8899
LV.4
17
2012-04-23 22:22
@qinzutaim
不明白整流部分为什么要用5只二极管[图片]

D3

1、防止反向

2、保护电电容和稳压管

 

0
回复
nwx8899
LV.4
18
2012-04-23 22:23
@ycdy09@163.com
今晚我就准备准备 跟老兄学习学习

恩恩

 

相互学习

0
回复
nwx8899
LV.4
19
2012-04-23 22:26
@hechaocao
呵呵     用这个感觉 用M3有点浪费     我觉的很有可能是学生       很不错   支持!

恩 没有考虑 性价比 这个问题

拿着板子 以学习为主!!!

多谢支持!

0
回复
nwx8899
LV.4
20
2012-04-23 22:27
@
严重浪费

呵呵 以学习为主

正好有这块板子让我浪费

0
回复
nwx8899
LV.4
21
2012-04-23 22:31
@ctx1211
我也觉得是学生,好像是某年国家电子设计大赛的一个题目,呵呵

恩 貌视0几年的国赛里有做电源的题,但这个跟那个没联系

本人在校参与了11年的

0
回复
nwx8899
LV.4
22
2012-04-23 22:33
@IGBT2010
学习一下!!!

恩恩 感谢支持

大家相互学习!!!

 

0
回复
nwx8899
LV.4
23
2012-04-23 22:36
@hechaocao
呵呵     用这个感觉 用M3有点浪费     我觉的很有可能是学生       很不错   支持!
感谢支持!!!
0
回复
fifasanguo
LV.5
24
2012-04-24 11:06
@nwx8899
恩恩感谢支持大家相互学习!!! 
图里面少了关键的拓扑部分啊,就是用STM32调整如何从220V输出到9V的调整部分啊,这个题目我也做过,纹波能处理好吗?单纯的用STM32的DA输出控制,不好弄吧!!!
0
回复
ludet
LV.5
25
2012-04-24 11:38
@fifasanguo
图里面少了关键的拓扑部分啊,就是用STM32调整如何从220V输出到9V的调整部分啊,这个题目我也做过,纹波能处理好吗?单纯的用STM32的DA输出控制,不好弄吧!!!

 用51也可以的

 

 

0
回复
nwx8899
LV.4
26
2012-04-24 13:03
@fifasanguo
图里面少了关键的拓扑部分啊,就是用STM32调整如何从220V输出到9V的调整部分啊,这个题目我也做过,纹波能处理好吗?单纯的用STM32的DA输出控制,不好弄吧!!!

完整的

在电源模块里

 

0
回复
nwx8899
LV.4
27
2012-04-24 13:06
@ludet
 用51也可以的  

控制器不是主要矛盾

你熟悉哪款或者你想学习那款你都可以自己随意选择的

0
回复
2012-04-24 15:37
看一下
0
回复
nwx8899
LV.4
29
2012-04-24 20:19
@电源群180281670
看一下

呵呵 常来啊

0
回复
zq2007
LV.11
30
2012-05-03 13:17
@nwx8899
呵呵常来啊[图片]
跟楼主学数控电源。
0
回复
nwx8899
LV.4
31
2012-05-03 13:56
@zq2007
跟楼主学数控电源。[图片]
大家一起学习
0
回复