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

一、项目背景

最近购入的 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

相关推荐
智者知已应修善业3 小时前
【51单片机计时器1中断的60秒数码管倒计时】2023-1-23
c语言·经验分享·笔记·嵌入式硬件·算法·51单片机
heisd_14 小时前
使用STM32CubeMX创建新的工程,使用vscode进行编码和调试
vscode·stm32·嵌入式硬件
范纹杉想快点毕业5 小时前
ZYNQ7045芯片中UART实现RS422通信详解,50000字解析,C语言,嵌入式开发,软件开发
c语言·笔记·stm32·单片机·嵌入式硬件·mcu·fpga开发
与你诗画5 小时前
电路中的 ”CT“
单片机·嵌入式硬件
沐欣工作室_lvyiyi7 小时前
基于单片机的盲人智能水杯(论文+源码)
单片机·嵌入式硬件·物联网·毕业设计·智能水杯
brave and determined7 小时前
硬件-电容学习DAY20——从零到精通的电容实战指南
单片机·嵌入式硬件·滤波·储能·硬件设计·电路设计·电容核心功能
是大强8 小时前
嵌入式开发中用于调试的技术Semihosting
单片机·嵌入式硬件
RaLi和夕9 小时前
嵌入式学习笔记4.STM32中断系统及外部中断EXTI
笔记·stm32·单片机·学习
瓢儿菜20189 小时前
【Proteus8.17仿真】 STM32仿真 0.96OLED 屏幕显示ds1302实时时间
stm32·单片机·嵌入式硬件
10001hours9 小时前
(基于江协科技)51单片机入门:8.DS1302
科技·嵌入式硬件·51单片机