欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
正點(diǎn)原子stm32mini開發(fā)板做2015年國賽題目雙向DCDC程序
[打印本頁]
作者:
zhf1234
時(shí)間:
2019-1-7 10:25
標(biāo)題:
正點(diǎn)原子stm32mini開發(fā)板做2015年國賽題目雙向DCDC程序
電壓采集曲線擬合
0.png
(30.71 KB, 下載次數(shù): 55)
下載附件
2019-1-13 02:12 上傳
PID參數(shù)調(diào)整
0.png
(6.75 KB, 下載次數(shù): 67)
下載附件
2019-1-13 02:12 上傳
單片機(jī)源程序如下:
#include "stm32f10x.h"
#include "key.h"
#include "timer.h"
#include "Filter.h"
#include "sys.h"
#include "PWM_OUTPUT.h"
#include "led.h"
#include "12864.h"
#include "adc.h"
#include "delay.h"
#include "SHOW.h"
#include "PID.h"
#define uchar unsigned char
/**********************************************************/
//全局宏定義說明
#define ERROR 0
#define TURE 1
#define Medium_High 3840
#define HIGHT_LIMIT 4320 //90%
#define LOW_LIMIT 2640 //55%
#define Init_Uset 3600 //初始目標(biāo)值3600
#define initial_value 60.0
#define start 2
#define end 0
#define target_index 15
/**********************************************************/
//外部函數(shù)調(diào)用說明:
void system_init(void);
void Query_button(void); //鍵盤掃描函數(shù)
extern __IO uint16_t ADC_ConvertedValue[BUF_SIZE];
extern u32 Adc_Feedback(float *QUEUE, u8 chip);
extern void PID_init(PID *pp, float Kp, float Ki, float Kd);
extern PID Voltage_PID;
extern void TIM2_In_Init(u16 arr,u16 psc); // 定時(shí)器TIM2
extern void TIM4_In_Init(u16 arr,u16 psc); // 定時(shí)器TIM2
extern void LCD_refresh(void); // 顯示刷新掃描函數(shù)
void Set_mode(void); // 模式選擇
void Increase_current(void); // 加電流
void Current_reduction(void); // 減電流
extern void EXIT_PB4_Config(void);
/**********************************************************/
/**********************************************************/
//變量定義
u8 Integral_judge; //積分分離式的標(biāo)志
u16 NUM_Fliter = 450; //濾波次數(shù)設(shè)置
int U_Set = 300; //設(shè)定目標(biāo)值
float QUEUE[20] = {0,0};
float ADC_add,filter_Value,filter_Value_End; // 采樣值,與濾波值
u8 Step_into_target_marks=0; // 步進(jìn)目標(biāo)值標(biāo)志位
float fsc = initial_value,*Duty = &fsc;
u16 CCR1_Val = 0;
u16 CCR1_Val_init = 2520;
SqQueue Q; // ADC采樣值序列
int aim_value ;
u8 Key_symbol1=0,Key_symbol2=0,Key_symbol3=0; // 按鍵標(biāo)志 key1 key2 key3
extern float Pv,Kp,Ki,Kd;
u8 real_time_control_lcd=0;
u8 PID_control_sign=end; // PID開啟標(biāo)志位
u8 Refresh_LCD1=0,Refresh_LCD2=0,Refresh_LCD3=0; // LCD1,LCD2,LCD3 三塊屏幕刷新標(biāo)志
int adjust_current[21]={1659,1735,1811,1889,1966,2045,2124,2203,
2283,2364,2445,2527,2609,2692,2775,2859,2944,3029,3115,3201,3289};//恒流數(shù)組
int Point_target=0;
u16 Ini_value_tim2=10-1,Divid_tim2_val=72-1; // 定時(shí)器2裝載初始值和分頻值 10us//PID調(diào)整量,PID設(shè)定值
/**********************************************************/
int main()
{
U_Set = adjust_current[0] ; //設(shè)定初始目標(biāo)值U_Set
PWM_set(Duty); //PWM輸出
system_init(); //系統(tǒng)參數(shù)初始化
Get_Adc(); //獲取adc值
Set_Up_QUEUE( &Q ); //建立一個(gè)空隊(duì)列
// ADC_add=Update_QUEUE(20,1); //取得隊(duì)列
ADC_add = Update_QUEUE_1(20,1); //取得隊(duì)列
filter_Value = filter1(QUEUE,ADC_add,20); //濾波
aim_value=Adc_Feedback(QUEUE,1); //顯示當(dāng)前的采樣值
PID__init(&Voltage_PID, &Kp, &Ki, &Kd);
while (1)
{
/* while(flag==1&&flag1==1)
{
check(); //掃描按鍵
if (rcvF == 1)
{
rcvF=0;
keyHandle(keyVal);
PWM_set(Duty);
flag=0;
}
}*/
// aim_value = Adc_Feedback(QUEUE,1);
// filter_Value_End = AA_Filter(&Q,QUEUE,1); //兩次濾波,顯示 實(shí)際值
// string_display = conversion_of_number_systems(filter_Value_End, string_display) ;
// Write_add(2,1);
// displaychar(string_display);
if( PID_control_sign == start ) //開PID
{
while( U_Set-aim_value>=2 || U_Set-aim_value <= -2) //PID算法
{
Pv=PID_Feedback(U_Set, aim_value);
CCR1_Val=CCR1_Val + Pv/0.36; //0。36
if( CCR1_Val >= Medium_High ) //80%
CCR1_Val = Medium_High;
else if( CCR1_Val <= LOW_LIMIT ) //40%
CCR1_Val = LOW_LIMIT;
TIM3->CCR2 = CCR1_Val;
aim_value = Adc_Feedback(QUEUE,1);
}
}
aim_value=Adc_Feedback(QUEUE,1); //顯示當(dāng)前的采樣值
}
return 0;
// string_display = conversion_of_number_systems(2, string_display) ;
// displaychar(string_display);
}
/*名稱:system_init()
*輸入:無
*輸出:無
*說明:各個(gè)模塊初始化
*/
void system_init()
{
NVIC_Configuration(); // 2位搶占優(yōu)先級(jí),8位響應(yīng)優(yōu)先級(jí)
delay_init(); // 延時(shí)初始化
Lcd_Init_IO(); // 12864初始化
Lcd_Init();
EXIT_PB4_Config(); // 開PB4中斷
Key_IO_Init(); // 按鍵IO初始化
ADC1_Init(); // ADC初始化
TIM2_In_Init(Ini_value_tim2,Divid_tim2_val);
TIM4_In_Init(Ini_value_tim2,Divid_tim2_val);
}
/*
* 函數(shù)介紹 : 按鍵掃描
* 輸入?yún)?shù) : 無
* 輸出參數(shù) : 無
* 返回值 : 無
*/
void Query_button()
{
if(Key_symbol1 == 1) // 按鍵0按下
{
PID_control_sign=end; // 關(guān)PID
Step_into_target_marks=1; // 開啟步進(jìn)目標(biāo)標(biāo)志位
Set_mode(); // 設(shè)定模式
Key_symbol1 = 0; // 清標(biāo)志位1
Refresh_LCD1 =0; // 屏幕顯示關(guān)
LCDclear(); // LCD清屏
}
if(Key_symbol2 == 1) // 按鍵1按下
{
Increase_current(); // 加電流
Key_symbol2 = 0; // 清標(biāo)志位2
}
if(Key_symbol3 == 1) // 按鍵2按下
{
Current_reduction(); // 減電流
Key_symbol3 = 0; // 清標(biāo)志位2
}
}
/*
* 函數(shù)介紹 : Increase_current() 電流加0.05A 以及步進(jìn)調(diào)整電流2A
* 輸入?yún)?shù) : 無
* 輸出參數(shù) : 無
* 返回值 : 無
*/
void Increase_current()
{
if( Step_into_target_marks==1 ) //開啟步進(jìn)目標(biāo)值模式
{
if(U_Set>HIGHT_LIMIT)
{
Step_into_target_marks=0; //關(guān)閉步進(jìn)目標(biāo)值模式
U_Set = Init_Uset; //目標(biāo)值恢復(fù)初始值
TIM3->CCR2 = U_Set; // 更新PWM值
PID_control_sign=start; //開PID
Point_target=0;
}
else
{
U_Set = U_Set+target_index; //步進(jìn)目標(biāo)值
TIM3->CCR2 = U_Set; // 更新PWM值
}
}
else //步進(jìn)電流模式
{
if(Point_target == 21) //達(dá)到兩A停止
{
Point_target = 20;
}
else
{
U_Set = adjust_current[Point_target] ; //PID目標(biāo)值調(diào)整
Point_target++; //自加0.05A
}
}
}
/*
* 函數(shù)介紹 : Set_mode() 選擇模式充電,放電自動(dòng)
* 輸入?yún)?shù) : 無
* 輸出參數(shù) : 無
* 返回值 : 無
*/
void Set_mode()
{
}
/*
* 函數(shù)介紹 : LCD是否需要刷新判斷 并響應(yīng)程序
* 輸入?yún)?shù) : 無
* 輸出參數(shù) : 無
* 返回值 : 無
*/
void LCD_refresh()
{
}
/*
* 函數(shù)介紹 : Current_reduction() 電流減0.05A
* 輸入?yún)?shù) : 無
* 輸出參數(shù) : 無
* 返回值 : 無
*/
void Current_reduction()
{
if(Step_into_target_marks==1) //開啟步進(jìn)目標(biāo)值模式
{
if(U_Set <LOW_LIMIT )
{
Step_into_target_marks=0; // 清步進(jìn)目標(biāo)值模式
U_Set = Init_Uset; // 目標(biāo)值恢復(fù)初始值
TIM3->CCR2 = U_Set; // 更新PWM值
PID_control_sign =start; //開PID
Point_target=0; // 準(zhǔn)備步進(jìn)調(diào)整電流
}
else
{
U_Set=U_Set-target_index;
TIM3->CCR2 = U_Set; // 更新PWM值
}
}
else //開啟步進(jìn)電流模式
{
if(Point_target == -1)
{
Point_target = 0;
}
else
{
U_Set = adjust_current[Point_target] ; // PID目標(biāo)值調(diào)整
Point_target--; // 減0.05A
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
雙向DC-DC(old version).7z
(208.92 KB, 下載次數(shù): 95)
2019-1-13 02:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
shui0419
時(shí)間:
2022-8-28 02:24
感謝樓主分享,要是有個(gè)原理圖就好了
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1