这是我基于stm32f334做的一个双路直流稳压电源
原创
单片机源程序如下:
- #include "Adjusted duty cycle.h"
- #include "user.h"
- int set_b1=0,set_b2=0;
- int set_b=0,set_c=0;
- int V_shu=10,I_shu=10;
- int a=0,b=0;
- uint32_t ADC_Value[3];
- int set_V[11]={0,5},set_I[11]={0,5};
- int set_V1[5]={0},set_I1[5]={0};
- double ad1,ad2;
- double SET_I=0.5,SET_V=5;//设置电压电流
- extern uint32_t pwm;
- void pwM1(int a)
- {
- HRTIM_CompareCfgTypeDef pwm;
- pwm.CompareValue = a;
- if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, &pwm) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- }
- void set_key(void)
- {
- a =__HAL_TIM_GET_COUNTER(&htim2);
- b=__HAL_TIM_GET_COUNTER(&htim3);
- //显示设置电流电压
- OLED_ShowString(0,0,"set_V:");
- OLED_ShowString(0,2,"set_I:");
- OLED_ShowNum(48,0,set_V[0],1,16,set_V1[0]);
- OLED_ShowNum(48,2,set_I[0],1,16,set_I1[0]);
- OLED_ShowString(56,2,".");
- OLED_ShowNum(56,0,set_V[1],1,16,set_V1[1]);
- OLED_ShowNum(64,2,set_I[1],1,16,set_I1[1]);
- OLED_ShowString(64,0,".");
-
- OLED_ShowNum(72,0,set_V[2],1,16,set_V1[2]);
- OLED_ShowNum(72,2,set_I[2],1,16,set_I1[2]);
- OLED_ShowNum(80,0,set_V[3],1,16,set_V1[3]);
- OLED_ShowNum(80,2,set_I[3],1,16,set_I1[3]);
-
- // 选择电压位
- if(set_b==1)
- {
- set_b=0;
- if(set_b1==1)
- {
- set_V1[0]=1;
-
- V_shu=0;
- }
- else if(set_b1==2)
- {
- set_V1[0]=0;
- set_V1[1]=1;
- // set_V[4]=a;
- V_shu=1;
- }
- else if(set_b1==3)
- {
- set_V1[1]=0;
- set_V1[2]=1;
- //set_V[4]=a;
- V_shu=2;
- }
- else if(set_b1==4)
- {
- set_V1[2]=0;
- set_V1[3]=1;
- //set_V[4]=a;
- V_shu=3;
- }
- else if(set_b1>=5)
- {
- set_V1[3]=0;
- set_b1=0;
- SET_V=set_V[0]*10+set_V[1]+set_V[2]*0.1+set_V[3]*0.01;
- V_shu=10;
- }
- }
- //选择电流位
- if(set_c==1)
- {
- set_c=0;
-
- if(set_b2==1)
- {
- set_I1[0]=1;
- // set_I[4]=b;
- I_shu=0;
-
- }
- else if(set_b2==2)
- {
- set_I1[0]=0;
- set_I1[1]=1;
- // set_I[4]=b;
- I_shu=1;
- }
- else if(set_b2==3)
- {
- set_I1[1]=0;
- set_I1[2]=1;
- // set_I[4]=b;
- I_shu=2;
- }
- else if(set_b2==4)
- {
- set_I1[2]=0;
- set_I1[3]=1;
- //
- I_shu=3;
- }
- else if(set_b2>=5)
- {
- set_I1[3]=0;
- set_b2=0;
- I_shu=10;
- SET_I=set_I[0]+set_I[1]*0.1+set_I[2]*0.01+set_I[3]*0.001;
- }
- }
-
-
- set_vi();
-
- set_I[4]=b;
- set_V[4]=a;
- }
- void set_vi()
- {
-
- //设置电压
- if(__HAL_TIM_GET_COUNTER(&htim2)>a)
- {
- for(int i=0;i<100;i++)
- {
- for(int j=0;j<100;j++)
- ;
- }
-
- set_V[V_shu]++;
- if(set_V[0]>3)
- {
- set_V[0]=0;
- }
- if(set_V[V_shu]>9)
- {
- set_V[V_shu]=0;
- }
-
-
- a =__HAL_TIM_GET_COUNTER(&htim2);
- }
- else if(__HAL_TIM_GET_COUNTER(&htim2)<a)
- {
-
- for(int i=0;i<100;i++)
- {
- for(int j=0;j<100;j++)
- ;
- }
-
- set_V[V_shu]--;
- if(set_V[V_shu]<0)
- {
- set_V[V_shu]=9;
- }
- if(set_V[0]<0)
- {
- set_V[0]=3;
- }
- if(set_V[0]>3)
- {
- set_V[0]=0;
- }
- if(set_V[V_shu]>9)
- {
- set_V[V_shu]=0;
- }
-
-
-
- a =__HAL_TIM_GET_COUNTER(&htim2);
-
- }
-
-
- //设置电流
- if(__HAL_TIM_GET_COUNTER(&htim3)>b)
- {
- for(int i=0;i<100;i++)
- {
- for(int j=0;j<100;j++)
- ;
- }
- set_I[I_shu]++;
-
- if(set_I[I_shu]>9)
- {
- set_I[I_shu]=0;
- }
- if(set_I[0]<0)
- {
- set_I[0]=0;
- }
- if(set_I[0]>3)
- {
- set_I[0]=3;
- }
-
-
- b=__HAL_TIM_GET_COUNTER(&htim3);
- }
- else if(__HAL_TIM_GET_COUNTER(&htim3)<b)
- {
- for(int i=0;i<100;i++)
- {
- for(int j=0;j<100;j++)
- ;
- }
-
- if(set_I[I_shu]<0)
- {
- set_I[I_shu]=9;
- }
- if(set_I[I_shu]>9)
- {
- set_I[I_shu]=0;
- }
- if(set_I[0]<0)
- {
- set_I[0]=0;
- }
- if(set_I[0]>3)
- {
- set_I[0]=3;
- }
-
- set_I[I_shu]--;
- b=__HAL_TIM_GET_COUNTER(&htim3);
- }
-
- }
- void ADC_VI()
- {
- // for(int i=0;i<3;i++)
- // {
- // HAL_ADC_Start(&hadc2);
- // HAL_ADC_PollForConversion(&hadc2,50);
- // ADC_Value[i] = HAL_ADC_GetValue(&hadc2);
- // }
- // HAL_ADC_Stop(&hadc2);
- // HAL_Delay(10) ;
- //
- // ad1=(double)ADC_Value[1]*(3.0/4096)*10;//电压
- // ad2=(double)ADC_Value[2]*(3.0/4096);//电流
- // ad1 = ad1+0.062*ad1 - 1.0747-0.2;
- // // ad2 =ad2 +0.0062*ad2-0.10747;
- // ad2=ad2+0.06;
- OLED_ShowString(0,4,"V:");
- OLED_ShowString(0,6,"I:");
- OLED_ShowString(32,4,".");
- OLED_ShowNum(16,4,ad1,2,16,0);
- OLED_ShowNum(40,4,(ad1-(int)ad1)*10000,4,16,0);
- // OLED_ShowNum(0,4,ad1,4,16,0);
- OLED_ShowNum(16,6,ad2,2,16,0);
- OLED_ShowNum(80,4,ADC_Value[1],4,16,0);
- //OLED_ShowNum(80,6,ADC_Value[2],4,16,0);
- OLED_ShowNum(80,6,pwm,5,16,0);
- OLED_ShowNum(40,6,(ad2-(int)ad2)*10000,4,16,0);
- OLED_ShowString(32,6,".");
-
-
- PWM_set();
- }
复制代码
所有资料51hei提供下载:
DY_3.7z
(3.98 MB, 下载次数: 51)
|