设计项目实例71-基于STM32的数控电压源(BUCK电路、旋转编码器、阿里云)

设计项目实例59-基于ESP32的温室大棚环境监测系统的设计与实现(风扇驱动、光敏模块、DHT11温湿度)

  • 前提说明
  • 需知
    • 项目设计要求
    • 项目提供资料
    • main.c代码
    • 项目3D图

前提说明

电子开发合作请私信联系,商业/非商业项目均可洽谈,价格友好,负责可靠。
目前已开发项目三百余单,不限时售后,直到项目完结。
在这里插入图片描述

需知

对此项目有需求请私信联系我,备注对应项目名称号(非免费,伸手党勿扰,价格公道,售后负责)
所有项目均有个人验证无误后发出,保证不坑害任何一位朋友,个人有接单渠道,不缺钱,随缘分享案例+和有需求的朋友合作。

项目设计要求

主控电路通过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、售后(分单资料售卖或售后指导设计两种,不同的价格,优质的服务提供给想设计出来这款作品的朋友们)

main.c代码

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;
			}
		}
	}
}

项目3D图

设计项目实例71-基于STM32的数控电压源(BUCK电路、旋转编码器、阿里云)_第1张图片

你可能感兴趣的:(stm32,阿里云,单片机)