数控直流电源(基于STM32F407)

2023-12-14 07:30

本文主要是介绍数控直流电源(基于STM32F407),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数控直流电源

本次所实现的功能是:将220V交流电转化输出为5到15V的直流电压,而且可以通过单片机(我这里用的是STM32F407),经过按键对输出电压进行递增或递减。默认状态下(即单片机复位之后整个系统,注意是整个系统输出是5V,此时单片机对应的IO口输出的其实是0V,这个一会儿会具体讲到)例如,你想输出6V电压,那么就按一下递增的对应的按键,输出就会由默认的5V上升到6V(此时对应的IO口输出是1V),因为我这里设置的是每按一次递增按键,输出就增加1V。

实测精准稳定,那我就屁话不多说,直接上仿真电路图和代码,时间有限,我就只讲解关键部分,对于基础较好的同学来说已经绰绰有余了。对于某些大佬来说,还可以在我这个基础上做任何你想要的改动,这些都是很nice的。想要完整电路图和代码的同学可直接可加我微信:wpt666aaa 或QQ:2036795517,这个很方便的。

讲之前的吐槽

本人做这个实验前前后后花了将近我三天的宝贵青春,基本上都泡在了实验室(当然,还是要运动一下,中间踢了场足球)。电路仿真和代码都好说,只要你明白原理,半天的时间即可弄好。关键也是最麻烦和最容易出错的地方就是实物的搭建。有的时候气的我只想剁手,本身左手就有点先天性抖动(本人的肾没问题,这个大家就不要去纠结了),可能是早上就喝了一杯绿豆汤,两眼昏花,我把本身要接电源的地方,接到了一个并没有用到的引脚上,烧了,我认了。仿真的时候对应的起比例放大作用的电阻是310K,接实物的时候硬是调试到了340K,这可是孩子一个个往上加的阻值,本身手就有点儿抖,累到吐血,成功的时候差点晕过去,不是兴奋的,而是累的,幸亏回光返照了一会儿,让我有力气走到宿舍睡个觉。

去TMD的人生。。。还是睡觉最舒服。

模块讲解

7805

7805芯片
引脚图和功能,网上一搜一大堆,我这里只强调一下功能,他的目的就是不管你在VI口输入多大的电压(当然,要在他允许的电压范围之内,我此次实验仿真输入的大约是23.77V,接实物调试时接入24V即可),在VO口和GND口的输出压差都会保持5V,记好,是压差。比如,我在GND输入0V,那么VO口就输出5V,在GND输入1V,那么VO口就输出6V,在GND输入10V,那么VO口就输出15V。
显示电压值
C3和R1是用来滤波的,是一个简单又经典的RC滤波器。

变压器及整形

变压器
这里首先强调,注意!注意!注意!220V高电压,不要拿生命开玩笑,不要买质量不好的变压器。变压加一个整形,这个没什么好说的。我的建议是在实物连接时,把这个省去,直接向VIN口输入一个直流电压值(你根据自己的情况设定,这里我之前提到了,我输入的是24V),我实物连接的时候是直接输入的是24V,并没有用这个变压器,关键老师也不太允许。哈哈哈。最后再强调一下,一定要注意安全。万万不可大意,最好直接像我一样接入直流电。

电压放大电路

很简单,有模电基础的一看就懂,没模电基础的,了解一下集成运放(反比例运算),看完之后,电路你也一看就懂。
运放
这上面整个部分的作用就是将从图中R2左端输入电压(也就是我们单片机对应IO口要接并且输出的地方)放大将近3倍多一点儿(你们根据阻值自己可以算,也可以根据需要放大的比例自己去调)。我希望各位不太明白的仁兄好好研究一下这个部分,这个部分是核心。而且这个是不难的。

STM32单片机输出部分

先配两张图。
在这里插入图片描述
在这里插入图片描述
最下面一行显示的就是PA4引脚的输出电压值,每按一次递增按键,单片机输出增加0.322V,而我们想要按一次增加1V,所以设计了刚才提到的放大电路,放大倍数大概3倍多一点儿,因为3X0.322已经接近 1 了,所以放大三倍多一点儿即可。

这里单片机PA4引脚输出电压范围:0~3.222V
单片机输出口每次按键,增加或减少0.322V
这个系统输出口每次按键,增加或减少 1 V
对应系统电压输出范围:5~15V
放大倍数:3倍多一点(我本人自己调试出来的,具体自己计算,这里我就不多说了)

主函数部分

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "dac.h"
#include "key.h"int main(void)
{ u16 adcx;float temp;u8 t=0;	 u16 dacval=0;u8 key;	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);      //初始化延时函数uart_init(115200);		//初始化串口波特率为115200LED_Init();					//初始化LED LCD_Init();					//LCD初始化KEY_Init(); 				//按键初始化Dac1_Init();		 		//DAC通道1初始化	POINT_COLOR=RED; LCD_ShowString(30,130,200,16,16,"WK_UP:+  KEY1:-");	 POINT_COLOR=BLUE;//设置字体为蓝色      	 LCD_ShowString(30,150,200,16,16,"DAC VAL:");	      LCD_ShowString(30,170,200,16,16,"DAC VOL:0.000V");	      DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//初始值为0	while(1){t++;key=KEY_Scan(0);			  if(key==WKUP_PRES){		 if(dacval<4000)dacval+=400;DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值}else if(key==2)	{if(dacval>400)dacval-=400;else dacval=0;DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值}	 if(t==10||key==KEY1_PRES||key==WKUP_PRES) 	//WKUP/KEY1按下了,或者定时时间到了{	  adcx=DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值LCD_ShowxNum(94,150,adcx,4,16,0);     	   //显示DAC寄存器值temp=(float)adcx*(3.3/4096);			         //得到DAC电压值adcx=temp;LCD_ShowxNum(94,170,temp,1,16,0);     	   //显示电压值整数部分temp-=adcx;temp*=1000;LCD_ShowxNum(110,170,temp,3,16,0X80);   	   //显示电压值的小数部分		LED0=!LED0;	   t=0;}	    delay_ms(10);	 }	
}

dac.c部分

//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void Dac1_Set_Vol(u16 vol)
{double temp=vol;temp/=1000;temp=temp*4096/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐数据格式设置DAC值
}

以上是主要代码部分,其实代码部分我也只是改了一下步进值(即每按一次按键的电压改变值,我把他调到了0.322V),至于范围的改动我还不算是太明白,当然了,软件上我改动不了太多,那我就从硬件上改,我还会继续研究这个问题,再发一篇文章讨论一下这个问题。各路大佬也可以在评论区多多指导建议。需要完整代码的加我联系方式,电路图也是的,微信:wpt666aaa 或QQ:2036795517,这个很方便的。

晒一下图,有些凌乱

目的有两个,第一,抱怨一下,是真的累。第二,希望能激发一下大家的思路。(各位仁兄就不要吐槽我的面包板电路接的有多丑了,哈哈哈哈哈)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
丑是丑了点儿,不过功能稳定,数值准确,这就够了,我也就睡个好觉了。哈哈哈哈哈。

最后的最后

你只有看懂了,才能拿来用,所以最好不要放过任何一个疑问,说不定这个疑问就是解决问题的关键。

最后的最后,支持还是要支持一下的,请求各路英雄豪杰多多打赏,多多关注,多多点赞,我是只发布高质量文章的李白有点儿黑。

这篇关于数控直流电源(基于STM32F407)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491667

相关文章

西门子数控软件6FC系列

西门子数控软件6FC系列是一款功能强大的数控解决方案,广泛应用于工业自动化领域。以下是对西门子数控软件6FC系列的详细介绍: 一、产品概述         西门子数控软件6FC系列属于SINUMERIK数控系统,是西门子工业软件部提供的重要产品之一。该系列软件旨在为企业提供高效、精确的机床自动化解决方案,满足从单件生产到大批量生产,从简单工件到复杂工件的各种生产需求。 二、主

MATSUSADA松定电源 直流电源维修PK350-1.1

大多数电源不能工作都是因为电源启动电阻损坏,或芯片性能下降。当R断路后无灾,PW组件无法工作,需更换与原来功率阻值相同的电阻。当PM组件启动电流增加后,可减小R值到FWM组件能正常工作为止。 应用领域:从用于研究开发的仪器到正式量产、检查、售后服务都涉及。而且,对于业内的半导体设备、充电电池、液晶、PDP、电镀、化工、EV等领域。 松定电源维修时,PW模块为UC3843,检测未发现其他异常

数控走心机的功能

走心机,这一精密加工设备,在机械加工领域扮演着举足轻重的角色。其全称为走心式数控车床,也可称为主轴箱移动型数控自动车床、经济型车铣复合机床或者纵切车床。它集多种加工功能于一身,能够同时完成车、铣、钻、镗、攻、雕刻等多种复合加工任务,特别适用于精密五金、轴类异型非标件的批量加工。 走心机的核心功能主要包括以下几个方面: 高效复合加工能力:走心机通过其独特的设计,能够在一次装卡中完成大部分甚至全部加工

【学习笔记】STM32F407探索者HAL库开发(三)IO分配

【学习笔记】STM32F407探索者HAL库开发(三)IO分配 1 STM32F407 IO资源分配表2 STM32F407ZGT6 引脚定义3 IO分配的重要性3.1 硬件设计优化3.2 软件编程3.3 系统性能提升 4 F1/F7/H7芯片的IO分配差异4.1 引脚数量和分组4.2 功能模式4.2.1 输入模式4.2.2 输出模式4.2.3 复用功能模式 4.3 电气特性:4.4 复用功

STM32F405自制板子使用正点原子的STM32F407代码调试问题解决方法

我自己做了一块STM32F405RGT6的简单板子,打算使用正点原子的STM32F407的源代码,代码经过稍作改动后,编译无错误,但是发现程序无法调试,出现的问题是:点击debug后,工具栏的运行按键是灰色的。看了下程序,停在了system_stm32fxx.c文件的第393行,我将ST官方提供的源代码打开做了一下对比,发现原子哥的代码多出了几行:  //    PWR->CR |=

【学习笔记】STM32F407探索者HAL库开发(二)STM32F4最小系统设计

【学习笔记】STM32F407探索者HAL库开发(二)STM32F4最小系统设计 0 什么是最小系统1 电源电路1.1 数字部分电源1.2 模拟部分电源1.3 参考电压1.4 VBAT 2 复位电路3 BOOT启动电路(F4)4 晶振电路4.1 低速晶振4.2 高速晶振 5 下载调试电路6 串口一键下载电路7 最小系统的设计意义7.1 降低开发成本和风险7.2 提高开发效率7.3 便于故障排

STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3)

STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3) 简介 实验 3:在搭建好 tcp 服务器,并拟定好协议的前提下,接收每一个 bin 文件的块,配置到 fpga。 原理图 fpga fpga1 stm32 接线总结 // fpga引脚 stm32引脚// 用不到D_OUT#define PROGRAM_B PB0#defi

STM32F407系统时钟配置

STM32F407系统时钟配置 时钟树 方法一,采用官方库提供的配置(这里外部晶振25MHz,系统配置为168MHz) STM32F4启动与STM32F10X不同,时钟已经默认配置好启动代码,文件:startup_stm32f4xx.s Reset handler Reset_Handler PROC EXPORT Reset_Handler [W

lvgl的应用:移植MusicPlayer(基于STM32F407)

目录 概述 1 软硬件环境 1.1 UI开发版本  1.2 MCU开发环境 1.3 注意点 2  GUI Guider开发UI 2.1 使用GUI Guider创建UI 2.2 GUI Guider编译项目和测试 2.2.1 GUI Guider编译项目 2.2.2 编译 2.3  了解GUI Guider生成代码 3  移植项目 3.1 Keil中加载代码 3.2 调

什么是中断?STM32F407中断处理

什么是中断? 中断(Interrupt)是一种处理器处理异步事件的方法。当某个事件(如外部设备的信号、定时器溢出等)发生时,处理器可以暂停当前正在执行的任务,去处理这个事件,然后再返回继续执行原来的任务。中断可以有效提高系统的响应速度和处理效率,是嵌入式系统中非常重要的机制。 中断的工作原理 中断的基本工作流程如下: 中断触发:某个事件(例如按键按下、传感器信号到达等)触发中断。中断请求: