参考设计

收藏 

评论 

桌面可调电源

sigma 发布

题目要求

输入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参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld1”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeword1”及时沟通。

相关项目
电路图 更多>
下载中心 更多>
大学堂 更多>
论坛推荐 更多>
Datasheet 更多>