当前位置:网站首页>数控直流电源
数控直流电源
2022-08-05 05:15:00 【李白有点儿黑】
数控直流电源
本次所实现的功能是:将220V交流电转化输出为5到15V的直流电压,而且可以通过单片机(我这里用的是STM32F407),经过按键对输出电压进行递增或递减。默认状态下(即单片机复位之后整个系统,注意是整个系统输出是5V,此时单片机对应的IO口输出的其实是0V,这个一会儿会具体讲到)例如,你想输出6V电压,那么就按一下递增的对应的按键,输出就会由默认的5V上升到6V(此时对应的IO口输出是1V),因为我这里设置的是每按一次递增按键,输出就增加1V。
实测精准稳定,那我就屁话不多说,直接上仿真电路图和代码,时间有限,我就只讲解关键部分,对于基础较好的同学来说已经绰绰有余了。对于某些大佬来说,还可以在我这个基础上做任何你想要的改动,这些都是很nice的。想要完整电路图和代码的同学可直接可加我微信:wpt666aaa 或QQ:2036795517,这个很方便的。
讲之前的吐槽
本人做这个实验前前后后花了将近我三天的宝贵青春,基本上都泡在了实验室(当然,还是要运动一下,中间踢了场足球)。电路仿真和代码都好说,只要你明白原理,半天的时间即可弄好。关键也是最麻烦和最容易出错的地方就是实物的搭建。有的时候气的我只想剁手,本身左手就有点先天性抖动(本人的肾没问题,这个大家就不要去纠结了),可能是早上就喝了一杯绿豆汤,两眼昏花,我把本身要接电源的地方,接到了一个并没有用到的引脚上,烧了,我认了。仿真的时候对应的起比例放大作用的电阻是310K,接实物的时候硬是调试到了340K,这可是孩子一个个往上加的阻值,本身手就有点儿抖,累到吐血,成功的时候差点晕过去,不是兴奋的,而是累的,幸亏回光返照了一会儿,让我有力气走到宿舍睡个觉。
去TMD的人生。。。还是睡觉最舒服。
模块讲解
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);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_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,这个很方便的。
晒一下图,有些凌乱
目的有两个,第一,抱怨一下,是真的累。第二,希望能激发一下大家的思路。(各位仁兄就不要吐槽我的面包板电路接的有多丑了,哈哈哈哈哈)



丑是丑了点儿,不过功能稳定,数值准确,这就够了,我也就睡个好觉了。哈哈哈哈哈。
最后的最后
你只有看懂了,才能拿来用,所以最好不要放过任何一个疑问,说不定这个疑问就是解决问题的关键。
最后的最后,支持还是要支持一下的,请求各路英雄豪杰多多打赏,多多关注,多多点赞,我是只发布高质量文章的李白有点儿黑。
边栏推荐
- Day1:用原生JS把你的设备变成一台架子鼓!
- spingboot 容器项目完成CICD部署
- ECCV2022 | RU & Google propose zero-shot object detection with CLIP!
- Flink Broadcast 广播变量
- [Pytorch study notes] 9. How to evaluate the classification results of the classifier - using confusion matrix, F1-score, ROC curve, PR curve, etc. (taking Softmax binary classification as an example)
- 如何编写一个优雅的Shell脚本(二)
- 02.01-----The role of parameter reference "&"
- 全尺度表示的上下文非局部对齐
- 解决端口占用问题
- Flink EventTime和Watermarks案例分析
猜你喜欢

Facial Motion Capture 调研

A deep learning code base for Xiaobai, one line of code implements 30+ attention mechanisms.

The difference between the operators and logical operators

神经网络也能像人类利用外围视觉一样观察图像

Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor

Flink Broadcast 广播变量

Pandas(五)—— 分类数据、读取数据库

用GAN的方法来进行图片匹配!休斯顿大学提出用于文本图像匹配的对抗表示学习,消除模态差异!

MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations

flink on yarn 集群模式启动报错及解决方案汇总
随机推荐
Mysql-连接https域名的Mysql数据源踩的坑
学习总结day5
【After a while 6】Machine vision video 【After a while 2 was squeezed out】
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
《基于机器视觉测量系统的工业在线检测研究》论文笔记
MySql之索引
【数据库和SQL学习笔记】9.(T-SQL语言)定义变量、高级查询、流程控制(条件、循环等)
[Remember 1] June 29, 2022 Brother and brother double pain
MySQL
[Go through 11] Random Forest and Feature Engineering
Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总
大型Web网站高并发架构方案
[Practice 1] Diabetes Genetic Risk Detection Challenge [IFLYTEK Open Platform]
CVPR 2020 - 频谱正则化
SQL(1) - Add, delete, modify and search
学习总结week2_1
Tensorflow steps on the pit notes and records various errors and solutions
【零基础开发NFT智能合约】如何使用工具自动生成NFT智能合约带白名单可Mint无需写代码
2022年中总结关键词:裁员、年终奖、晋升、涨薪、疫情
Detailed explanation of BroadCast Receiver (broadcast)