LinFan是我做的一个高效的FPGA热管理系统,提供温度检测、风扇控制、RPM反馈、OLED显示等功能。它可以作为更复杂的嵌入式系统的基础模块。
它是一种基于可编程硬件FPGA的硬件控制器,可以实现自动热控制,帮助释放FPGA项目的性能。它是基于FPGA(Zynq XC7Z020)开发的智能热管理系统,旨在优化IC器件的散热效果,提高系统稳定性和性能。传统的商用热管理系统通常依靠EC(嵌入式控制器)来控制风扇速度,而LinFan则使用可编程硬件FPGA来实现自动热控制,可以作为一个IP核添加到更大的FPGA项目中,使项目的性能得到充分释放。
这个项目名为“灵泛”,在长沙话里的意思是“聪明”。此外,LinFan还包含英语单词“Fan,风扇”。
这个项目在github上已经开源,目录中有更详细的原理技术文档:https://github.com/gfdbat/LinFan_v0
也可以参考我的知乎:https://zhuanlan.zhihu.com/p/28973242254
在FPGA上尝试Linfan
首先需要确保:
- 配备XADC的AMD Xilinx FPGA
- 4针PWM调速风扇
- 4针IIC接口OLED显示屏(分辨率128*64,我项目中的控制器为SH1106)
- [可选]4个七段数码管,
请按照以下步骤操作:
- 创建一个Vivado项目,并将RTL代码添加到该项目中(顶部模块:embedded_ctrl.v)
- 设置时钟限制。PL的时钟需要设置为50MHz。
- 设置引脚约束以约束风扇的TACH和PWM接口,以及屏幕IIC接口的SCL和SDA接口。确保TACH、SCL和SDA接口配置为PULLUP模式。
- 重要提示:根据你的OLED控制器用户手册,修改OLED_data_gen.v中的OLED初始化命令
- 最后,生成比特流!
如果你想配置一些参数:
- 目标片上温度(默认40℃)
- 在embedded_ctrl.v中,更改cooler_ctrl_tempTarget实例中的temp_target
- 风扇开始运行的阈值(默认值为实际温度和预设温度之间的+-1度差)
- 在cooler_ctrl_tempTarget.v中,修改TEMP_THRESHOLD的参数(10*0.1'C==1'C)
- 写入像素的频率(默认值为200,基本上是我的OLED屏幕的极限)
- 在oled_data_gen.v中,修改WR_WAIT_TIME的参数
- PWM频率
- 在pwm_output.v中,修改分频因子(默认为20,从50MHz生成2.5MHz)
TroubleShooting
- 如果OLED显示屏在5V下不稳定,那么试试3.3V