输入10-40V,电流0-10A,文波100mV,开关频率40K
提示:对整个题目或对主要部分题目内容进行分析说明
提示:总体设计方案框图
列:
提示:说明作品中模块的设计原理图,需要配上原理图,最好是有实物图一起,每个模块都需要说明,如不需要设计的,请说明获取来源。
CCMRAM void bcfsm(void) //CCMRAM把函数放进CCRAM内存,加速执行速度
{
static uint16_t i=0;
float temp=0.0;
Next_State=Current_State=Task_0_Initial_state;
while(1)
{
Current_State=Next_State;
switch(Current_State)
{
case Task_0_Initial_state:
{
Reset_VAR(); //复位变量
PID_INT(); //初始化补偿器
HAL_Delay(300); //等待电压电流归零
Next_State=Task_1_Get_ADC_VALUE; //下一状态:读取ADC值
read_data();//更新设置值
if(temp_u!=SET_V||temp_i!=SET_I)
{
temp_u=SET_V; temp_i=SET_I;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);//蜂鸣器
Next_State=Task_0_Initial_state;
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);//蜂鸣器
}
break;
case Task_1_Get_ADC_VALUE ://获取ADC电压
{
//判断adc是否转换完成
if(Data_update_flag==STOP) Next_State=Task_2_Vin_detc;
else{
PID_Callback();//数据处理
Iout=ADC1_RESULT[3];
// printf("
输出电流:%f A
",(float)((ADC1_RESULT[1]*3300)>>12)*0.0045002f);
Vin=ADC1_RESULT[0];
Next_State=Task_2_Vin_detc;
Data_update_flag=STOP;
}
}
break;
case Task_2_Vin_detc://检测输入电压
{
Vin_f=(float)((Vin*2500)>>12)*0.016595f; //((Vin*2500)>>12)*16.5/1000 ,16.5代表电阻分压,1000转化为V
if(Vin_f>35.0f||Vin_f<6.0f)
{
Red_ON();
ERROR_flag=START;
Next_State=Task_0_Initial_state; //下一状态:复位
break;
}
else Green_ON();//系统指示
Next_State=Task_3_Iout_detc; //低压正常,开始检测输出
}
break;
case Task_3_Iout_detc : //检测输入电流
{ //
Iout_f=(float)((Iout*2500)>>12)*0.0011428f;//((Vin*2500)/4096)/17.5/50;//17.5代表放大倍数,50代表采样电阻值//放大倍数取决于运放电路
Iin_f=(float)((ADC1_RESULT[1]*2500)>>12)*0.0011428f;//((Vin*2500)/4096)/7.407/50;//17.5代表放大倍数,50代表采样电阻值
if(Iout_f>5.0f)//////////////////////////////////////////////////////////////
{
Red_ON();
ERROR_flag=START;
// Next_State=Task_0_Initial_state;//输出电压大于14V,触发输出过压保护
break;
}////////////////////////////////////////////////////////////////////////
if(flag_start_cnt!=STOP)Next_State=Task_4_Soft_start ;
else Next_State=Task_1_Get_ADC_VALUE;
tim_f<99?tim_f++:(tim_f=0);
if(tim_f==0)/////////////////////////////////////////////////
{
read_data();//更新设置值
if(temp_u!=SET_V||temp_i!=SET_I)
{
temp_u=SET_V; temp_i=SET_I;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);//蜂鸣器
Target_voltage =SET_V*1000;////mV//1000倍缩放
Target_current =SET_I*1000;////0.25mA//4000倍缩放1000-0.25mA
// Next_State=Task_0_Initial_state;
}
else
{
showdata();
}
}
else if(tim_f==99)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);//蜂鸣
}
break;
case Task_4_Soft_start ://缓启动
{
flag_start_cnt=STOP;
TIM1->CCR1=50;//TEST
HAL_Delay(50);
/*Add your code here!*/
Green_ON();//系统指示
Next_State=Task_1_Get_ADC_VALUE;
}
break;
default: break;
}
}
}
//ADC2_RESULT[2]保存输出电压
//ADC2_RESULT[1]保存输出电流
//ADC2_RESULT[3]保存输出电流
注意安全
【stm32数控电源 开源 PID数控 立创EDA 练习项目-哔哩哔哩】 https://b23.tv/pnsa4CD
链接:https://pan.baidu.com/s/1R8dNU8cjm95QB8AFnaMQmw?pwd=agan
提取码:agan
!注意:请使用浏览器自带下载,迅雷等下载软件可能无法下载到有效资源。
欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeworld”及时沟通。
EEWorld Datasheet 技术支持