电子开发合作请私信联系,商业/非商业项目均可洽谈,价格友好,负责可靠。
目前已开发项目三百余单,不限时售后,直到项目完结。
对此项目有需求请私信联系我,备注对应项目名称号(非免费,伸手党勿扰,价格公道,售后负责)
所有项目均有个人验证无误后发出,保证不坑害任何一位朋友,个人有接单渠道,不缺钱,随缘分享案例+和有需求的朋友合作。
主控电路通过12V电源适配器进行供电,通过LM2595S5.0电压转换芯片将12V转换为5V给STM32F103C8T6主控单元进行供电。
12V同时给半桥驱动电路中的IR2104S芯片进行供电,其中半桥驱动芯片的LO端口输出与输入互补的PWM信号,HO端口输出与输入相同的PWM信号,通过自举二极管和自举电容进行充电,实现HO端口驱动MOS上管的功能。
MOS管选用IRF3205型号,导通电阻mΩ级别,发热低,损耗低。输入输出采用电容进行储能,选用104电容进行滤波。温湿度监测选用DHT11模块进行监测,蜂鸣器选用3.3V有源蜂鸣器进行播报。
旋转编码器选用EC11编码器,通过检测A相和B相的脉冲差从而判断编码器是否转动,转动方向为正转还是反转从而实现功能的选择以及恒定电压,恒定电流的目标值改变。
主控拓扑结构选用BUCK降压拓扑,输入采用24V直流稳压电源输入,输入连接继电器保护电路,当检测到异常状况(过压或者过流),自动断开继电器,实现电路保护功能。
电压电流信号通过OPA2188芯片、INA213电流放大芯片实现,通过电流流经采样电阻转换成采样电压,放大50倍后送入电路内部进行检测,实现电流转换成电压在进行采集。负载选用电阻性负载进行测试。
输出电流可调0-2A,输出电压可调0-20V。采集到的电压电流信号送入PID闭环函数中,作为反馈输入,进行闭环调节,最终实现恒定电压电流的追踪,通过均值滤波的方式实现电压电流信号的平均滤波,提高电压电流检测的稳定性。
1、原理图源文件(嘉立创标准版,可导为专业版)
2、PCB源文件(嘉立创标准版,可导为专业版)
3、代码(有注释,规范设计,详情可看我其他单模块设计实例,keil5 MDK)
4、售后(分单资料售卖或售后指导设计两种,不同的价格,优质的服务提供给想设计出来这款作品的朋友们)
int main(void)
{
u8 key;
Delay_Init(); //延时功能初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
Usart1_Init(9600); //串口1功能初始化,波特率9600
BEEP_Init(); //BEEP初始化
SW_Init( ); //继电器初始化
KEY_Init(); //按键初始化
DHT11_Init(); //DHT11模块初始化
TIM2_ENABLE(); //TIME2初始化
OLED_Init(); //初始化OLED
BUCK_PWM_Init(); //BUCK电路初始化,20KHz工作频率,带中断。
init_buck_PID(); //初始化PID
Init_adc(); //ADC初始化
loop:
SW_ON; //断开继电器
work_mode=1;
pid_mode=0;
OLED_Clear(); //OLED清零
qidong_view(); //启动界面
while(1)
{
key=KEY_Scan(0); //扫描按键
if(key==SW_PRES)
{
work_mode=2; //进入到模式选择界面
moshi_view();
sw_status=0;
BEEP_OFF;
break;
}
Delay_Ms(50);
}
while(1)
{
//工作在模式选择界面的时候
if(work_mode==2)
{
key=KEY_Scan(0);//扫描按键
if(pid_status==0)
{
OLED_ShowString(112,3,"<-",16);
OLED_ShowString(112,5," ",16);
}
else
{
OLED_ShowString(112,3," ",16);
OLED_ShowString(112,5,"<-",16);
}
if(key==SW_PRES)
{
work_mode=3;
if(pid_status==0)hengya_view();//恒压工作界面和模式
else hengliu_view();//恒流工作界面和模式
}
}
//电压或者电流调节
else if(work_mode==3)
{
key=KEY_Scan(0);
if(pid_status==0)
{
OLED_ShowNum(72,3,Target_V,2,16);
OLED_ShowNum(96,3,(u16)(Target_V*100)%100,2,16);
}
else if(pid_status==1)
{
OLED_ShowNum(72,3,Target_I,2,16);
OLED_ShowNum(96,3,(u16)(Target_I*100)%100,2,16);
}
if(key==SW_PRES)
{
SW_OFF;
work_mode=4;
pid_mode=1;
protect_status=0;
canshu_view();
}
}
else if(work_mode==4)
{
key=KEY_Scan(0);
DC_P=DC_V*DC_I;
OLED_ShowNum(72,0,DC_V,2,16);
OLED_ShowNum(96,0,(u16)(DC_V*100)%100,2,16);
OLED_ShowNum(72,2,DC_I,2,16);
OLED_ShowNum(96,2,(u16)(DC_I*100)%100,2,16);
OLED_ShowNum(72,4,DC_P,2,16);
OLED_ShowNum(96,4,(u16)(DC_P*100)%100,2,16);
OLED_ShowNum(40,6,Temp,2,16);
OLED_ShowNum(104,6,Humi,2,16);
if(key==SW_PRES)
{
pid_mode=0;//失能PID
pid_status=0;//PID工作状态复位为电压环
goto loop;
}
if((DC_V>V_yuzhi)||(DC_I>I_yuzhi))
{
SW_ON;BEEP_ON;
protect_status=1;
sw_status=0;
pid_mode=0;//失能PID
pid_status=0;//PID工作状态复位为电压环
goto loop;
}
else if(global_control==0)
{
SW_ON;BEEP_OFF;
protect_status=1;
sw_status=0;
pid_mode=0;//失能PID
}
else
{
pid_mode=1;
SW_OFF;BEEP_OFF;
protect_status=0;
sw_status=1;
}
}
}
}