基于 STM32 的 PC ARGB 风扇控制器设计与实现

发布于:2025-05-22 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、项目背景

        最近购入的 X99 系列主板,没有风扇的 ARGB 彩灯接口,并且在 Ubuntu 系统上 4pin 的风扇接口调速也是非常的难用,sensor 扫描不到传感器,于是决定手搓一个风扇控制器,来实现转速自定义和彩灯控制。

        我控制的风扇仅限于机箱的通风风扇,CPU的风扇一定还是要电脑自动控制,要么就开满转速!!!

        这里先上一个最终的效果图:

二、单片机工作逻辑

        开发板我使用 STM32F103C6T6A 的最小系统板,这样塞进机箱也不占空间,并且买了一个电源的转接线:

        这里转出来的黄线是 12V,红线 5V,直接从电源给单片机供电,更稳定耐用,风扇接到这里的 12V,不接主板,电压稳定并且可以防止 PWM 线与主板冲突。

        单片机部分的控制有很多开源代码和课程,这里我使用的是 B 站 UP 主的代码:

源码地址:

【WS2812】串行控制全彩色LED | 波特律动https://docs.keysking.com/docs/stm32/example/Misc_AmbientLight建议可以先看一遍课程,学习 WS2812B 的控制逻辑。

        对于风扇转速的控制就简单多了,只需要输出一路普通的 25KHz 的 PWM 波形即可,根据占空比即可控制转速。由于 WS2812B 所需的频率和风扇所需的频率不同,所以必须使用不同的定时器来控制。代码这里就不多赘述,读者可以自行参考我的源码。

        主要讲一下彩灯的效果,我目前实现了三种模式,分别是彩虹跑马灯,单色呼吸灯和单色常亮。可以调整颜色的跳跃幅度,实现更丰富的彩虹色,也可以设置颜色的显示间隔,调整显示的变换速度。

彩虹跑马灯

        实现原理就是相邻灯珠的颜色需要阶梯式显示,通过 step 参数进行控制,间隔越大显示颜色越丰富。

        每次显示的颜色采用正弦函数实现周期性变换,phase 参数用于控制取色的相位。

        这里还使用到了速度转为延时的函数,用于控制肉眼所见的颜色变换速度,延时越长,颜色变换越慢:

单色呼吸灯

        这部分主要是通过递增和递减 RGB 三原色的值实现,彩虹色的呼吸灯感觉怪怪的,变了好像又没变,于是只做了单色的呼吸灯。为了简单明了,我使用多层循环实现,方便理解,参数同上,详细可看注释:

单色模式

        这部分主要是为了开发阶段调试用的,干脆就保留了,有时候一直保持一个色也挺好看的:

        底层的设置函数这里就不详细展开了,大家看完课程再来看我的源码就会一目了然。

三、PC 端控制 APP

通信方式

        开发阶段考虑过要不要增加无线控制器,这样还可以使用手机进行控制。不过对于我使用的最小尺寸板来说,增加的外设也是需要串口来进行通信,对于蓝牙和 WIFI 模块还得封装 AT 指令,干脆就直接串口接 PC,远程 PC 再控制岂不是也挺方便。

        单片机的串口我直接放在机箱内部,因为刚好主板的前置 USB3.0 接口空闲,于是我买了一个转接模块:

        直接插上 USB 转串口模块,在机箱内部实现通信。

APP使用

        APP 使用 C 程序编写,根据命令行传参进行数据帧的封装,并调用串口完成一次数据的发送和返回命令的接收:

        目前支持设置模式,设置颜色变换速度,设置颜色变换步幅,设置单色模式下的 RGB 颜色值以及设置风扇的转速。例如,设置模式为 1,会显示封装后的数据帧,然后会打印单片机端返回的信息:

数据帧定义

        对于数据帧的定义相对简单,就是按照

帧头,数据长度,命令类型,数据,帧尾

的方式进行封装和拆包,其中数据长度不包含命令类型,因为它始终都占用 1 字节。详细的实现原理可以查看源码。

四、总结

        项目总体不是很难,适合刚学完单片机课程的同学,我这里主要是闲着没事,想尝试自己 DIY 一下自己的新组装的个人服务器(其实大部分是二手的,俗称垃圾佬),平时编译代码用的。最后放一个机箱内部实拍,没有做美化,不难看就行,就叫他七彩小狗吧:

        希望可以帮助有需要的人,也算是为开源社区做贡献吧!

Github 链接

1125962926/PC-ARGB-Fan-Controller: Design and Implementation of PC ARGB Fan Controller Based on STM32https://github.com/1125962926/PC-ARGB-Fan-Controller


网站公告

今日签到

点亮在社区的每一天
去签到