DIY三通道程控直流电源

一、缘起

  前段时间桌面上一直用着的IT6322突然坏了,于是一直缺多通道的直流电源用,本来想直接再买一台,可是转念一想正好趁此机会DIY一台。毕竟作为硬件狗,DIY一台电源也是检验自己能力的一种方式。

二、成品效果展示

1、电源参数

1)、通道1和通道2输出电压0-36V,电流0-4A。通道3输出电压0-8V,电流0-4A。3个通道的电压分辨率都为0.01V,电流分辨率都为0.001A。电源支持恒压模式和恒流模式,且自动切换。
2)、3个通道完全隔离,可以随意进行串联或并联,得到80V,4A或36V,8A的输出能力。
3)、电源具有过流保护、过压保护、过热保护功能。
3)、支持按键、触摸屏、旋钮输入。可以保存10组参数,进行快速输出。参数有掉电自动保存功能。
4)、具有延时输出功能和输出定时功能。
5)、具有波形输出功能,可以输出正弦波、方波、三角波、指数波等。

2、电源外观

在这里插入图片描述
详细的展示视频可以看这儿:https://www.bilibili.com/video/BV1554y1v7A9/
同时电源其他参数的测试视频也在这个视频后面。可以自己去看。

三、制作过程

1、方案选择

  首先是确定大体的电路方案。因为要实现多个通道的串联、并联输出,于是3个通道要完全隔离,每个通道的采用独立的ADC和DAC分别控制输出电压与电流和测量输出电压与电流 ,然后ADC和DAC再通过隔离芯片与单片机进行通信。   
  输出电压与电流的控制有两种方案,一种是实时采集电压和电流,然后通过软件PID来调节;还有一种是直接使用硬件比较设置电压与输出电压,然后硬件电路自己调节。第一种调试起来会麻烦很多,因为怕时间耗费过多,所以直接采用第二种方案。   
  然后供电方案也有两种,一种是采用工频变压器供电,即直流电源。一种是采用开关电源供电。开关电源供电的效率比较高,散热压力小,但是纹波大,电路更复杂。工频变压器供电的纹波小,但是效率低,重量比较大。因为我是制作的实验室电源,对于电源的效率、重量并不太关心,反而对纹波要求比较高,于是选择第一种方案。   
  接下来就是选择芯片并绘制原理图了。因为输出电压范围为0-36V,精度0.01V,36/4096=0.0087V,因此ADC和DAC采用12位的就足够了。每路要进行电压和电流的分别控制,因此需要两个通道,最好直接选择双通道的ADC和DAC。经过选型,最后确定DAC采用DAC7612,ADC采用MCP3202。   
  因为要驱动TFT、触摸屏、控制3片DAC和ADC、继电器、按键、旋钮、风扇等,64个IO都不够,只有选100个引脚的单片机了,然后Flash需要大一点的,可以直接保存GUI用到的字库、图片,就不需要再加外挂Flash了。同时单片机RAM也得大一点,给显示缓存用,这样就不用再外挂一片SDRAM了,最后选择Flash有1M,RAM有96KB的GD32F103VGT6。

2、供电电路

  三个输出通道各自隔离,自成一个系统,因此电源也是3个隔离的系统。每个通道的模拟电路需要正负12V、正5V、正4.1V的电源,单片机的供电也是一个隔离的系统需要正12V、正5V、正3.3V,USB通信接口也需要一个隔离正5V电源。因此一共是5个互相隔离的电源系统。
  电压通过变压器得到,输入交流电压,经过整流桥、大电容滤波得到直流电。然后采用直流稳压芯片LM7812来得到正12V、采用LM7912来得到负12V、采用LM7805来得到正5V、采用LM317来得到正4.1V、采用AMS1117来得到正3.3V。电路图如下:
在这里插入图片描述
  上面原理图的最上面那个光耦电路是过零检测电路,用于检测输入交流的过零点。检测到了过零点可以用来进行掉电保存数据和控制继电器在过零点动作,因为过零点时,交流电压最小,此时电流也最小,以保护继电器的触点,达到延长继电器寿命的作用。

3、MCU电路

  单片机的电路部分其实没什么好说的,就是GD32F103VGT6的最小电路,但是要注意引脚分配,比如编码旋钮的A、B线要接到定时器的通道1和2。掉电检测信号线也要接到定时器上。
在这里插入图片描述
  单片机周围有用于保存参数的EEPROM、用于驱动散热风扇和继电器的ULN2003、用于检测散热器温度的LM35:
在这里插入图片描述

4、DAC、ADC和隔离电路

在这里插入图片描述
  通过数字隔离芯片SI8660和高速光耦6N137来隔离通道1的系统和单片机系统的通信信号线。

5、模拟电路部分

在这里插入图片描述
  借鉴春风电源的电路,采用电压控制回路和电流控制回路并联的方式来实现恒压、恒流的自动切换。具体原理如下:
  1)、首先通过继电器来选择输入的交流电压,输入的交流电压有4档:9V、18V、27V、36V。根据设置的输出电压来控制继电器,进而控制输入的电压值。
在这里插入图片描述
  输入电压经过整流桥和大电容被滤波成直流电。
  2)、功率部分。输入的直流电流过功率管被调整为设置电压值的直流电,然后输出。
在这里插入图片描述
  3)、电压反馈部分。功率管是如何来调整电压的呢?这就要用到电压反馈电路了。首先输出电压值经过U2B组成的同比例放大电路,把0-36V的范围缩小12.4倍:

在这里插入图片描述
  缩小后的电压再和DAC的输出电压做对比,经过积分电路把误差累积输出,输出信号再经过三极管增大驱动能力后直接通往功率管的栅极。
  4)、电流反馈部分。首先是采样电阻:
在这里插入图片描述
  采样电流信号经过U2C电路放大:
在这里插入图片描述
  再和DAC的输出做对比,经过积分电路累积出驱动信号,经过三极管放大,驱动功率管:
在这里插入图片描述
  5)、通道输出开关。使用光耦来控制通道的输出与否。当光耦打开,驱动信号才有效,才能驱动功率管打开。
在这里插入图片描述

6、显示板电路

在这里插入图片描述
  显示板就要简单很多了。主要有液晶电路、触摸屏驱动电路、HC165构成的按键电路、HC595构成的IO驱动电路、编码旋钮电路、USB通信隔离电路。

7、电源结构设计与配件选择

  原理图设计好了,接下来需要确定好元器件和配件,进而确定电源的内部结构和整机大小。
  首先考虑电源主板的散热设计,功率管上的最大压降为81.414=11.312V,每个通道最大电流为4A,于是3个通道耗散在散热器上的最大功率为81.41443=135.744W,因此散热器要足够大,而且风扇要用高风量的。最后借鉴IT6322的方法,使用60的方形散热器,然后风扇直接固定到散热器的一头,达到最好的散热效果。散热器直接固定到PCB上,同时靠边放置,剩下的位置用来摆放元器件。如果一张PCB放不下可以考虑上下两层。底板是功率板,顶板是控制板,这样结构要清晰一些,也能节省不少空间。
  把变压器的设计图纸发给厂家,厂家估算出变压器的尺寸为高70mm,直径130mm。因此功率板暂时采用的设计为:
在这里插入图片描述
  接下来考虑显示板的结构,首先确定配件。接线柱确定为:
在这里插入图片描述
  编码旋钮和旋钮帽确定为:
在这里插入图片描述在这里插入图片描述
  电源开关确定为:
在这里插入图片描述
  按键的选择可是颇费心思,如果用硬质的按键+键帽,那就直接有现成的,也好购买和设计。比如:
在这里插入图片描述在这里插入图片描述
  可是硬质按键的操作体验比不上仪器上常用的硅胶按键,一般硅胶按键都是开模定制的,很难找到通用的,好不容易在淘宝里找到了几个符合我的要求的,可是按键高度不统一,而且一个按键是配合轻触开关使用的,另一个是自带导电黑粒的,不好统一画板:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
  于是又继续找,后面突然想到遥控器上面的硅胶按键可以用,于是买了两个遥控器回来:
在这里插入图片描述
  把遥控器拆开,把硅胶按键取下来试了一下,感觉还是不行,又找了一圈,没办法只好将就用原来的方向键。因为方向键和透光按键的高度不同,同时还考虑到他们固定的问题,于是首先画了3块固定小板:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
  有了固定板和单独的触控板就可以解决按键高度不统一的问题了。但是方向键是配合轻触开关使用的,于是再专门给它配导电黑粒:
在这里插入图片描述
  把导电黑粒粘到方向按键上,都装配好后,试了一下,效果不错,这样一来功率板和操作面板的所有东西都确定好了,也就是整体的结构和物料都确定好了,接下来就可以画PCB了。

  经过了一段时间的努力画好了两张PCB,同时把3D封装也加上了:
在这里插入图片描述
在这里插入图片描述
  接下来就是等待PCB做好,然后焊接元件来测试。   
  焊接的时候只焊了一个通道拿来验证电路设计,要是一股脑全焊完了测试才发现设计有问题,就傻眼了。   
  最后经过焊接和测试,初步确定电路设计没有大问题。只有几个小问题:
  一是单片机供电回路的12V输出和5V使用的LM7812和LM7805,因为这两个电源电流太大,导致这两个芯片发热严重,于是改为了使用LM2596和LM2315。
  二是单片机的电源上的电容太小了,导致掉电后,没有足够的电容来给单片机供电,使单片机保存掉电参数。
  三是显示板的PCB布置不太合理,导致装上机壳后,不好看。
  这几个问题都只能先采用飞板子和飞线的方法解决了。

  电源的测试和展示视频如下:
  1)、电源的内部结构展示:链接: 内部结构展示.
  2)、电源的校准功能展示:链接: 校准功能展示.
  3)、电源的输出电压和电流精度测试:链接: 电压和电流精度测试.
  4)、电源的负载调整率测试:链接: 负载调整率测试.

  目前此电源还在进一步调试和完善中,DIY教程和开源资料会在后续放出,欢迎大家关注。
  注:上面原理图中的电阻和电容在调试过程中已经有所调整,但不影响大家理解原理。

  • 13
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Python中,单通图像是由一维像素数值组成的。要将单通图像转换为三通图像,可以使用numpy库中的tile函数。tile函数可以将单通像素在第二维度(即列)方向重复三次,得到一个新的三通像素数组。 假设我们已经读取了单通图像的像素数组,其形状为(height, width)。我们可以使用下面的代码实现单通图像转换为三通图像: import numpy as np # 读取单通图像像素数组 image = np.loadtxt('path/to/image.txt') # 将像素数组在第二维度(列)方向重复三次 image_rgb = np.tile(image[:, :, np.newaxis], [1, 1, 3]) # 保存三通图像像素数组 np.savetxt('path/to/image_rgb.txt', image_rgb) 上述代码中,np.newaxis是为了将单通图像的二维数组扩展为三维数组,方便在第二维度方向上执行tile函数。tile函数的第一个参数是要重复的像素数组,第二个参数指定每个维度上的重复次数,这里我们只在第二维度方向上重复三次。最终得到的image_rgb是一个三通的像素数组,形状为(height, width, 3)。 上述代码中,txt格式是为了方便演示而采用的格式。在实际应用中,应该使用更常见的图像格式,如PNG、JPG等。常用的图像处理库,如OpenCV、PIL等也提供了单通三通的函数。 ### 回答2: Python是一种高级编程语言,常用于数据分析、机器学习、科学计算和系统编程等领域。在图像处理和计算机视觉领域中,Python也被广泛应用。在图像处理中,有时候我们需要将单通的图像转换成三通的图像,以便进行后续的处理和应用,那么该如何实现呢? 单通的图像通常是指灰度图像,每个像素只有一个灰度值。而三通的图像则是指彩色图像,每个像素有三个分量表示红色、绿色和蓝色颜色通(RGB)。因此,单通三通需要将每个像素的灰度值转换为三个分量的颜色值,并组成新的三通图像。 以下是Python实现单通三通的代码: ```python import cv2 import numpy as np #读入单通图像 gray_img = cv2.imread('gray.jpg', 0) #创建三通图像 height, width = gray_img.shape bgr_img = np.zeros((height, width, 3), np.uint8) #将单通图像的值复制到三个通中 bgr_img[:, :, 0] = gray_img # blue channel bgr_img[:, :, 1] = gray_img # green channel bgr_img[:, :, 2] = gray_img # red channel #显示原图和转换后的图像 cv2.imshow('gray image', gray_img) cv2.imshow('BGR image', bgr_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 代码中,cv2.imread()函数读入单通的灰度图像。然后创建一个三通大小相同的图像,用0初始化。接着,将原图像的灰度值复制到三个颜色通中,最后用cv2.imshow()函数显示原图和转换后的图像。需要注意的是,使用cv2.imshow()函数显示颜色图像时,颜色通的顺序应该是BGR而非RGB。因此,在代码中我们分别将灰度值赋给了蓝色通、绿色通和红色通。最终的效果可以看到,转换后的图像有三个通,但是颜色是灰度的。这是因为,每个通的值相等,表示的是相同的灰度值。 当然,还有一些其他的方法实现单通转换为三通,比如使用cv2.cvtColor()函数、numpy数组的拼接等方法,具体可以根据需求和场景选择。 ### 回答3: 在数字图像处理中,单通图像是指仅有一个颜色通的图像,常见的单通图像有灰度图像。而三通图像则是指有三个颜色通(红、绿、蓝)的图像,也称为彩色图像。 在Python中,可以利用OpenCV库来实现单通图像到三通图像的转换。以下是实现过程: 1.导入必要的库: ```python import cv2 import numpy as np ``` 2.读取单通图像: ```python img_gray = cv2.imread('gray_img.png', cv2.IMREAD_GRAYSCALE) ``` 其中,‘gray_img.png’是单通灰度图像文件名。 3.将单通图像转换成三通图像: ```python img_bgr = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR) ``` 其中,‘COLOR_GRAY2BGR’是灰度图像转彩色图像的函数,它将灰度图像转换为三通BGR图像。 4.显示结果: ```python cv2.imshow('Gray Image', img_gray) cv2.imshow('BGR Image', img_bgr) cv2.waitKey(0) cv2.destroyAllWindows() ``` 运行以上代码,即可将单通灰度图像转换为三通BGR图像,并显示两个结果。在转换后的图像中,每个像素的三个通的值相等,即R=G=B,因此图像呈现出黑白色调但有彩色效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【ql君】qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值