发作品签到
标准版

桌面可调电源

工程标签

4.7k
0
0
0

简介

数控电源模块,开发板,使用STM32F103降低开发成本,开关频率40k,能实现基本的恒流恒压。

简介:数控电源模块,开发板,使用STM32F103降低开发成本,开关频率40k,能实现基本的恒流恒压。

开源协议

Public Domain

创建时间:2023-03-19 18:51:28更新时间:2023-03-20 09:25:13

描述

题目要求

输入10-40V,电流0-10A,文波100mV,开关频率40K

题目分析

提示:对整个题目或对主要部分题目内容进行分析说明

 

提示:总体设计方案框图
列:
image.png

原理图设计说明

提示:说明作品中模块的设计原理图,需要配上原理图,最好是有实物图一起,每个模块都需要说明,如不需要设计的,请说明获取来源。

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("\r\n输出电流:%f A\r\n",(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

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
VID_20230317_090200[1].mp4
148
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航