1904 基于STM32单片机的数控直流电源设计【毕设课设】

摘要

本报告详细描述了基于STM32单片机的数控直流电源的设计过程。该电源具有输出电压0V~30.0V可调、恒压模式步进控制、最大输出电流1.5A、LCD1602显示、按键控制、温度检测报警、输出过流保护以及恒流恒压切换等功能。通过本设计,我们实现了一个功能丰富、性能稳定的数控直流电源。

一、引言

随着电子技术的快速发展,数控直流电源在科研、教学和工业生产等领域的应用越来越广泛。传统的直流电源调节精度低、操作不便,难以满足现代电子设备的需求。因此,设计一款基于STM32单片机的数控直流电源具有重要的实用价值和意义。

二、系统总体设计

本系统以STM32单片机为核心控制器,通过变压器将220V市电降至安全电压,再经过整流、滤波和稳压电路得到稳定的直流输出电压。系统通过按键控制输出电压的步进增减,并通过LCD1602液晶显示屏实时显示输出电压和电流。同时,系统还具备温度检测和过流保护功能,确保电源的安全可靠运行。

三、硬件设计

  1. STM32单片机:作为系统的核心控制器,负责接收按键输入、控制输出电压、显示数据以及处理温度检测和过流保护等功能。

  2. 电源电路:通过变压器将220V市电降至安全电压,再经过整流、滤波和稳压电路得到稳定的直流输出电压。

  3. 按键电路:采用“加、减”两键控制输出电压的步进增减,同时设置模式切换键实现恒流恒压模式的切换。

  4. LCD1602显示电路:用于实时显示输出电压和电流,方便用户观察电源的工作状态。

  5. 温度检测电路:采用温度传感器检测关键器件的温度,当温度超过设定值时触发声光报警。

  6. 过流保护电路:通过电位器调节过流保护阈值,当输出电流超过设定值时自动切断输出,保护电源和负载设备。

四、软件设计

  1. 初始化:对STM32单片机进行初始化,包括GPIO口、定时器、中断等配置。

  2. 按键处理:通过轮询方式检测按键状态,根据按键的不同执行相应的功能,如输出电压步进增减、模式切换等。

  3. LCD显示:实时将输出电压和电流数据发送至LCD1602显示屏进行显示。

  4. 温度检测与报警:定时读取温度传感器数据,当温度超过设定值时触发声光报警。

  5. 过流保护:通过电位器设定过流保护阈值,当输出电流超过该值时切断输出,并通过LCD显示错误信息。

五、测试结果与分析

经过实际测试,本系统能够稳定输出0V~30.0V的直流电压,恒压模式步进控制准确,纹波小于30mV,最大输出电流达到1.5A。LCD1602显示屏能够实时显示输出电压和电流,按键控制方便快捷。同时,系统的温度检测和过流保护功能有效,确保了电源的安全可靠运行。

六、结论与展望

本设计成功实现了一款基于STM32单片机的数控直流电源,具有输出电压可调、步进控制、液晶显示、温度检测和过流保护等功能。在实际应用中,该电源能够满足多种电子设备的需求,具有较高的实用价值。未来,可以考虑进一步优化电源的性能和稳定性,增加更多的功能,如远程控制、通信接口等,以满足更广泛的应用场景。
 


#include <string.h>
#include "Hal_key/hal_key.h"
#include "Hal_Usart/hal_uart.h"
#include "Hal_Watchdog/hal_watchdog.h"
#include "delay/delay.h"
#include "myiic.h"
#include "SHT2x.h" 
#include "LCD1602.h" 
#include "adc.h"
#include "main.h"

/* 用户区当前设备状态 */
u16 Board_Temp=0;  		//板上元件温度
u16 Model=0;    			//模式  0:电压模式   1:电流模式
u16 In_Voltage=0;  		//输入电源电压
u8  Beep_Flag=1; 			//温度报警开关,默认打开 1
unsigned char LCD1602_Table[]="0123456789";

unsigned int  DA_Date=0;  			//传入TLC5615的值
u16  DA_Current=0; 		//设置电流时,传入DA值
u16 DATA = 0;
u16  Out_Voltage=0; 		//输出电压(mV)
unsigned char Short_Flag=0;  		//过流标识. 1:过流
u16  Out_Current=0; 		//输出电流
u16  Set_Current=0; 		//设置输出电流

/* 按键相关定义 */
#define GPIO_KEY_NUM 2                                  ///< 定义按键成员总数
keyTypedef_t singleKey[GPIO_KEY_NUM];                   ///< 定义单个按键成员数组指针
keysTypedef_t keys;                                     ///< 定义总的按键模块结构体指针

/**@} */
u16  Volue=0;
void PID_Init(void);         //pid参数初始化
u16  PID_realize(u16 current); //pid运算
 ///****************PID用*************************/
typedef struct
{
    u16 SetSpeed;    //定义设定值
    u16 ActualSpeed; //定义实际值
    int err;         //定义偏差值
    int err_last;    //定义上一个偏差值
    u8 Kp,Ki,Kd;    //定义比例、 积分、 微分系数
    int voltage;     //定义电压值(控制执行器的变量)
    int integral;    //定义积分值
} PID ; 

PID pid; 							//声明pid结构体
 
/* PID参数初始化 */ 
void PID_Init()
{
	
    pid.SetSpeed=0;
    pid.ActualSpeed=0;
    pid.err=0;
    pid.err_last=0;
    pid.voltage=0;
    pid.integral=0;
    pid.Kp=5; //5
    pid.Ki=1; //1
    pid.Kd=0;
   
}
/* PID控制算法 */ 	
u16 PID_realize(u16 current)
{
    int index = 0 ;

    pid.SetSpeed=current;
    pid.err=pid.SetSpeed-pid.ActualSpeed;
  
 
        index=1;
        pid.integral+=pid.err;
 
    pid.voltage=pid.Kp*pid.err+index*pid.Ki*pid.integral;			//+pid.Kd*(pid.err-pid.err_last);
	  printf("pid.err=%d-%d=%d\r\n",pid.SetSpeed,pid.ActualSpeed,pid.err);
	  printf("pid.integral=%d\r\n",pid.integral);
	  printf("pid.voltage=%d\r\n",pid.voltage);	
    if(pid.voltage<0) 
			 pid.voltage=0;
		
    //pid.err_last=pid.err;
    pid.ActualSpeed=pid.voltage>>6; 
		 
	  printf("pid.ActualSpeed=%d\r\n",pid.ActualSpeed);
    return pid.ActualSpeed;

}

部分程序

 

资料下载地址:

https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8

  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言: 美国Vicor公司是现时世界最大的高密度电源模块生产商, 同时也是全球唯一能以零电压、零电流技术大批量生产电源模块的厂家。Vicor电源模块包括DC-DC、AC-DC电源模块,隔离、非隔离电源模块转换器。其中VICOR公司电源模块的核心技术是 “零电流”开关,它使变换器的工作频率达到 了1MHz,效率大于80%。 本文介绍多功能数控电源设计 从最基本的说起吧,DC-DC的变换电路有很多种,线性电源、开关电源、电荷泵,线性电源大家比较熟悉的应该就是78XX系列的芯片了,电荷泵主要用在小电流的应用中,我们也不加讨论。主要讲讲开关电源,我呢也是一个先学先卖的人,就对照资料啥的随便介绍下拉,权当是开源本设计前的一点准备工作。 开关稳压器的工作原理,就是通过控制电路来控制开关器件的通断,配合负反馈完成稳压,跟线性稳压比起来,具有效率高体积小的特点,但是输出没有线性电源稳定。开关电源的基本结构有很多种,包括BUCK、BOOST、BUCK-BOOST、CUK等非隔离式的DCDC变换器,也有Flyback、LLC等隔离式的DCDC变换器。 开源的这个设计,是以buck拓扑为核心,配合STM32F334的高级定时器的PWM、PI算法,实现的一个很简单的闭环控制,设计输入电压60V时,输出电压可调,输出电流最大5A,输出最大功率在200W左右。 数控电源系统设计框图: 首先说明我这款电压是从HP电源的基础上增加人机界面和改善栅极驱动做的,具体设计心得及电路分析详见附件内容。 数控电源程序的设计思路: 因为这款设计为了尽可能减少体积,因此使用了较大频率的PWM波,取值为250k,所采用的主控stm32f334是意法半导体专为数控电源所设计的一款MCU。STM32F334xx微控制器具有高分辨率定时器(HRTIM)外设,可产生多达10个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。(具体详见附件内容) 配置的代码和PI算法的代码部分截图展示:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值