转速探测原理:
风扇本身有一个探测点,扇叶转过半圈或者一圈后会通过反馈线发出一个脉冲信号。
风扇的反馈线连接到主板风扇探测芯片引脚上,探测芯片内部有一个counter计数器,以一定的频率增加。 通过两个脉冲间累计的counter值能够计算出风扇转一圈需要的时间,然后以60sec(一分钟)除以每圈时间,即可算出RPM。

计算实例:
以LM93芯片来说,在SPEC中他会描述counter的读取,counter增加的频率以及counter计数的含义。
从文档描述看,counter计算的含义为: 当风扇探测器探测到第一个脉冲的时候开始计算,到第二个脉冲结束的时候(也就是探测到第三个脉冲开始) 停止计数。 counter增加的频率为22.5Khz。则通过counter以及频率能够求出一个脉冲的时间为 counts * (1/22500) / 2。 一般风扇可能在转一圈的时候会发出两个脉冲, 则每圈时间花费为 (counts * (1/22500) / 2) * puls_per_rev,其中puls_per_rev代表风扇每转一圈会发出几个脉冲。每分钟的转速就是 60/(counts * (1/22500) / 2) * puls_per_rev。 最后展开为60 * 22500 * 2 / counts * puls_per_rev 如果每转一圈发出两个脉冲则计算公式为 1350000 / counts

limits寄存器
在SB710中无法读取FanSpeedLo和FanSpeedHi就是它引起的,默认情况下该值为0。
在使用中,如果FanSpeed*两个寄存器值大于limits中设置,会认为是错误,读取的值为1(1代表转速太低)。 设置了limits寄存器后,能够正常读取到FanSpeed*寄存器。
后面看了下发现这个寄存器在风扇设置中都有,如果counter的值大于这个设置的时候,芯片会产生中断报告错误给系统。 思考其目地应该是用于保护主板,因为如果counter值大于limits值的时候代表风扇转速过低了,那么对于主板是不利的。 在实际的编程中通过PWM波设置风扇转速,然后设置limits寄存器监视风扇转速是否在需求范围内, 如果因为风扇问题导致风扇转速太低的话这个时候需要通知系统进行处理,避免温度过高引起主板烧毁。



blog comments powered by Disqus