标题: 基于stm32f334做的一个双路直流稳压电源程序 [打印本页]

作者: dscs    时间: 2019-3-15 17:18
标题: 基于stm32f334做的一个双路直流稳压电源程序
这是我基于stm32f334做的一个双路直流稳压电源
原创

单片机源程序如下:
  1. #include "Adjusted duty cycle.h"
  2. #include "user.h"

  3. int set_b1=0,set_b2=0;
  4. int set_b=0,set_c=0;
  5. int V_shu=10,I_shu=10;



  6. int a=0,b=0;

  7. uint32_t ADC_Value[3];

  8. int set_V[11]={0,5},set_I[11]={0,5};
  9. int set_V1[5]={0},set_I1[5]={0};
  10. double ad1,ad2;
  11. double  SET_I=0.5,SET_V=5;//设置电压电流
  12. extern uint32_t  pwm;


  13. void  pwM1(int a)
  14. {
  15.         HRTIM_CompareCfgTypeDef  pwm;
  16.                 pwm.CompareValue = a;
  17.          if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, &pwm) != HAL_OK)
  18.   {
  19.     _Error_Handler(__FILE__, __LINE__);
  20.   }
  21. }
  22. void set_key(void)
  23. {
  24.                         a        =__HAL_TIM_GET_COUNTER(&htim2);
  25.                         b=__HAL_TIM_GET_COUNTER(&htim3);
  26.                 //显示设置电流电压
  27.                         OLED_ShowString(0,0,"set_V:");
  28.                         OLED_ShowString(0,2,"set_I:");
  29.                         OLED_ShowNum(48,0,set_V[0],1,16,set_V1[0]);
  30.                         OLED_ShowNum(48,2,set_I[0],1,16,set_I1[0]);
  31.                 OLED_ShowString(56,2,".");
  32.                         OLED_ShowNum(56,0,set_V[1],1,16,set_V1[1]);
  33.                         OLED_ShowNum(64,2,set_I[1],1,16,set_I1[1]);
  34.                         OLED_ShowString(64,0,".");
  35.                
  36.                         OLED_ShowNum(72,0,set_V[2],1,16,set_V1[2]);
  37.                         OLED_ShowNum(72,2,set_I[2],1,16,set_I1[2]);
  38.                         OLED_ShowNum(80,0,set_V[3],1,16,set_V1[3]);
  39.                         OLED_ShowNum(80,2,set_I[3],1,16,set_I1[3]);
  40.        
  41.                 //        选择电压位
  42.         if(set_b==1)
  43.         {
  44.                 set_b=0;
  45.                 if(set_b1==1)
  46.                 {
  47.                         set_V1[0]=1;
  48.                        
  49.                         V_shu=0;
  50.                 }
  51.                 else if(set_b1==2)
  52.                 {
  53.                         set_V1[0]=0;
  54.                         set_V1[1]=1;
  55.                         //        set_V[4]=a;
  56.                         V_shu=1;
  57.                 }
  58.                 else if(set_b1==3)
  59.                 {
  60.                         set_V1[1]=0;
  61.                         set_V1[2]=1;
  62.                                 //set_V[4]=a;
  63.                         V_shu=2;
  64.                 }
  65.                 else if(set_b1==4)
  66.                 {
  67.                         set_V1[2]=0;
  68.                         set_V1[3]=1;
  69.                                 //set_V[4]=a;
  70.                         V_shu=3;
  71.                 }
  72.                 else if(set_b1>=5)
  73.                 {
  74.                         set_V1[3]=0;
  75.                         set_b1=0;
  76.                         SET_V=set_V[0]*10+set_V[1]+set_V[2]*0.1+set_V[3]*0.01;
  77.                         V_shu=10;
  78.                 }
  79.         }
  80.         //选择电流位
  81.         if(set_c==1)
  82.         {
  83.                 set_c=0;
  84.        
  85.                                 if(set_b2==1)
  86.                 {
  87.                         set_I1[0]=1;
  88.                 //        set_I[4]=b;
  89.                         I_shu=0;
  90.                        
  91.                 }
  92.                 else if(set_b2==2)
  93.                 {
  94.                         set_I1[0]=0;
  95.                         set_I1[1]=1;
  96.                         //        set_I[4]=b;
  97.                                 I_shu=1;
  98.                 }
  99.                 else if(set_b2==3)
  100.                 {
  101.                         set_I1[1]=0;
  102.                         set_I1[2]=1;
  103.                         //        set_I[4]=b;
  104.                                 I_shu=2;
  105.                 }
  106.                 else if(set_b2==4)
  107.                 {
  108.                         set_I1[2]=0;
  109.                         set_I1[3]=1;
  110.                         //       
  111.                                 I_shu=3;
  112.                 }
  113.                 else if(set_b2>=5)
  114.                 {
  115.                         set_I1[3]=0;
  116.                         set_b2=0;
  117.                         I_shu=10;
  118.                         SET_I=set_I[0]+set_I[1]*0.1+set_I[2]*0.01+set_I[3]*0.001;
  119.                 }
  120.         }
  121.                
  122.                
  123.                  set_vi();
  124.                
  125.                 set_I[4]=b;
  126.                 set_V[4]=a;
  127. }



  128. void set_vi()
  129. {
  130.                        
  131.         //设置电压
  132.                 if(__HAL_TIM_GET_COUNTER(&htim2)>a)
  133.                 {       
  134.                         for(int i=0;i<100;i++)
  135.         {
  136.                 for(int j=0;j<100;j++)
  137.                         ;
  138.         }
  139.                        
  140.                         set_V[V_shu]++;
  141.                         if(set_V[0]>3)
  142.                         {
  143.                                 set_V[0]=0;
  144.                         }
  145.                         if(set_V[V_shu]>9)
  146.                         {
  147.                                 set_V[V_shu]=0;
  148.                         }
  149.                        
  150.                        
  151.                 a        =__HAL_TIM_GET_COUNTER(&htim2);
  152.                 }
  153.                 else if(__HAL_TIM_GET_COUNTER(&htim2)<a)
  154.                 {
  155.                        
  156.                         for(int i=0;i<100;i++)
  157.         {
  158.                 for(int j=0;j<100;j++)
  159.                         ;
  160.         }
  161.                        
  162.                         set_V[V_shu]--;
  163.                         if(set_V[V_shu]<0)
  164.                         {
  165.                                 set_V[V_shu]=9;
  166.                         }
  167.                         if(set_V[0]<0)
  168.                         {
  169.                                 set_V[0]=3;
  170.                         }
  171.                                 if(set_V[0]>3)
  172.                         {
  173.                                 set_V[0]=0;
  174.                         }
  175.                         if(set_V[V_shu]>9)
  176.                         {
  177.                                 set_V[V_shu]=0;
  178.                         }
  179.                        
  180.                                
  181.                        
  182.                         a        =__HAL_TIM_GET_COUNTER(&htim2);
  183.                        
  184.                 }
  185.                
  186.                
  187.                 //设置电流
  188.                 if(__HAL_TIM_GET_COUNTER(&htim3)>b)
  189.                 {
  190.                         for(int i=0;i<100;i++)
  191.         {
  192.                 for(int j=0;j<100;j++)
  193.                         ;
  194.         }
  195.                         set_I[I_shu]++;
  196.                        
  197.                         if(set_I[I_shu]>9)
  198.                         {
  199.                                 set_I[I_shu]=0;
  200.                         }
  201.                         if(set_I[0]<0)
  202.                         {
  203.                                 set_I[0]=0;
  204.                         }
  205.                                 if(set_I[0]>3)
  206.                         {
  207.                                 set_I[0]=3;
  208.                         }
  209.                        
  210.                        
  211.                         b=__HAL_TIM_GET_COUNTER(&htim3);
  212.                 }
  213.                 else if(__HAL_TIM_GET_COUNTER(&htim3)<b)
  214.                 {
  215.                         for(int i=0;i<100;i++)
  216.         {
  217.                 for(int j=0;j<100;j++)
  218.                         ;
  219.         }
  220.                        
  221.                         if(set_I[I_shu]<0)
  222.                         {
  223.                                 set_I[I_shu]=9;
  224.                         }
  225.                         if(set_I[I_shu]>9)
  226.                         {
  227.                                 set_I[I_shu]=0;
  228.                         }
  229.                                 if(set_I[0]<0)
  230.                         {
  231.                                 set_I[0]=0;
  232.                         }
  233.                                 if(set_I[0]>3)
  234.                         {
  235.                                 set_I[0]=3;
  236.                         }
  237.                        
  238.                         set_I[I_shu]--;
  239.                                 b=__HAL_TIM_GET_COUNTER(&htim3);
  240.                 }
  241.        
  242. }
  243. void ADC_VI()
  244. {
  245. //                for(int i=0;i<3;i++)
  246. //        {

  247. //        HAL_ADC_Start(&hadc2);

  248. //        HAL_ADC_PollForConversion(&hadc2,50);

  249. //        ADC_Value[i] = HAL_ADC_GetValue(&hadc2);

  250. //                }

  251. //        HAL_ADC_Stop(&hadc2);

  252. //        HAL_Delay(10) ;
  253. //               
  254. //                        ad1=(double)ADC_Value[1]*(3.0/4096)*10;//电压
  255. //                        ad2=(double)ADC_Value[2]*(3.0/4096);//电流
  256. //                        ad1 = ad1+0.062*ad1 - 1.0747-0.2;
  257. //                //        ad2 =ad2 +0.0062*ad2-0.10747;
  258. //                        ad2=ad2+0.06;
  259.                         OLED_ShowString(0,4,"V:");
  260.                         OLED_ShowString(0,6,"I:");
  261.                         OLED_ShowString(32,4,".");
  262.                         OLED_ShowNum(16,4,ad1,2,16,0);
  263.                         OLED_ShowNum(40,4,(ad1-(int)ad1)*10000,4,16,0);
  264.                 //        OLED_ShowNum(0,4,ad1,4,16,0);
  265.                         OLED_ShowNum(16,6,ad2,2,16,0);
  266.                         OLED_ShowNum(80,4,ADC_Value[1],4,16,0);
  267.                         //OLED_ShowNum(80,6,ADC_Value[2],4,16,0);
  268.                         OLED_ShowNum(80,6,pwm,5,16,0);
  269.                         OLED_ShowNum(40,6,(ad2-(int)ad2)*10000,4,16,0);
  270.                         OLED_ShowString(32,6,".");
  271.                
  272.                
  273.                 PWM_set();
  274. }       
复制代码

所有资料51hei提供下载:
DY_3.7z (3.98 MB, 下载次数: 51)




作者: admin    时间: 2019-3-16 01:01
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
作者: 梦想天空    时间: 2019-6-14 15:20
你好,请问有原理图吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1