類似15年國賽電源題目,兩路DC-DC電壓控制,電流成比例
單片機源程序如下:
- #include "stm32f10x.h"
- #include "BSP_Config.H"
- #include "oled.h"
- #include "pwm_output.h"
- #include "adc.h"
- #include "stdio.h"
- #include "pid.h"
- #include "key.h"
- /*---------------變量區------------------*/
- /*sprintf顯示所用數組*/
- u8 dataStr[30];
- /*DMA存儲的值,volatile類型*/
- extern __IO u16 ADC_ConvertedValue[50][3];
- float Current;
- /*ADC濾波后原始數據*/
- u16 ADC_Data_raw[3]={0,0,0};//adc原始數據
- u8 Load_flag=0;
- extern u8 mode;//按鍵設置模式
- extern float adc[3];
- float PID1,PID2,PID3,Cur1,Cur2,Vol;
- u16 pid_except=2480;
- u16 pid_except1=2480;
- /*---------------變量區------------------*/
- int main(void)
- {
- SystemInit();
- SysTick_init(); //延時初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- TIM1_Mode_Config(6000-1,0);
- TIM3_Mode_Config(6000-1,0);
- SPI2_Init(); //初始化SPI硬件口
- KEY_Init();
- OLED_Init(); //初始化OLED
- TIM2_base();//初始化定時器,定時器中斷中處理adc讀數
- ADC1_Init();
-
- while (1)
- {
-
- if(mode==0)
- {
- Current=(0.9341*(float)ADC_Data_raw[1]-11.4)/4096*3.3;
- if(Current>2.5)
- {
- OLED_Clear();
-
- OLED_ShowString(40,32,"Warning");
- TIM1->CCR2=0;
- delay_ms(5000);
- TIM1->CCR2=PID1;
- delay_ms(500);
- OLED_Clear();
- }
- else if(Current<=2.5)
- {
-
- PID1=Pid_TIM1_control(pid_except);
- TIM1->CCR2=PID1;
- sprintf((char *)dataStr,"V:%1.3fv A1-9",adc[0]*4);// a1
- //sprintf(dataStr,"V:%1.3fv (PA1)",(float)ADC_ConvertedValue[0][0]/4096*3.3);// a1
- OLED_ShowString(1,0,dataStr);
- sprintf((char *)dataStr,"A:%1.3fa (PA4)",Current);
- OLED_ShowString(1,16,dataStr);
- sprintf((char *)dataStr,"w:%1.3f",Current*adc[0]*4.0);//
- OLED_ShowString(1,32,dataStr);
- sprintf((char *)dataStr,"e:%4d",pid_except);//功率
- OLED_ShowString(1,48,dataStr);
- sprintf((char *)dataStr,"m:%d",mode);
- OLED_ShowString(90,48,dataStr);
- } //else if
- //TIM3->CCR1=PID2;
- }//if(mode==0)
- else
- {
- PID2=Pid_TIM1_control((0.9773*(float)ADC_Data_raw[1]-47.5)*1.07);
- TIM1->CCR2=PID2;
- PID3=Pid_TIM3_control(pid_except1);
- TIM3->CCR1=PID3;
- //// Cur1=(0.9341*(float)ADC_Data_raw[0]+8.688)/4096*3.3;
- Cur1=(0.9341*(float)ADC_Data_raw[0]-11.4)/4096*3.3;
- Cur2=(0.9773*(float)ADC_Data_raw[1]-47.5)/4096*3.3;
- Vol=(float)ADC_Data_raw[2]/4096*3.3*4;
-
- sprintf((char *)dataStr,"A:%1.3fa",Cur1);
- OLED_ShowString(1,0,dataStr);
- sprintf((char *)dataStr,"A:%1.3fa",Cur2);
- OLED_ShowString(1,16,dataStr);
- sprintf((char *)dataStr,"V:%1.3fv",Vol);
- OLED_ShowString(1,32,dataStr);
- sprintf((char *)dataStr,"e:%1.2f",(float)pid_except1/4096*3.3);
- OLED_ShowString(80,32,dataStr);
- sprintf((char *)dataStr,"P:%1.3fw",Vol*(Cur1+Cur2));
- OLED_ShowString(1,48,dataStr);
- sprintf((char *)dataStr,"m:%d",mode);
- OLED_ShowString(90,48,dataStr);
- }
- key_scan();
- }//while(1)
- }
復制代碼
所有資料51hei提供下載:
并聯 -隨動 - mode.7z
(180.3 KB, 下載次數: 33)
2019-6-29 21:34 上傳
點擊文件名下載附件
|