在写PWM风扇驱动之前:如何透过FG信号,获取风扇转速?

一、前言

  • PWM风扇也是日常SOC智能设备开发中常见的外围小设备,而对于驱动工程师而言,主要工作就是实现风扇的控制驱动,除了设定风扇的速度之外,还要获取风扇的转速信息,而PWM风扇就
    是一个可以通过FG信号线反馈转速信息的设备。
  • 本文即基于全志H713平台,介绍一下FG信号线的用法,以及PWM风扇转速获取的算法。

二、风扇规格

2.1 线序

  • 从风扇规格书中,可得知YELLOW黄色线为FB线
  • 根据规定线序,接好线
    在这里插入图片描述

2.2 FG 信号说明

  • 下图就是风扇规格书中的FG信号的说明,可以看到最下方有四个公式
  • 对于新手而言,最开始看到下面公式会有些疑惑,后续我们可以猜猜(推导)下公式的具体含义
    在这里插入图片描述

三、FG公式推导

  • FG 信号是由风扇,根据其转速反馈的一个方波频率信号,从图中可知,风扇转一圈的周期 T=T1+T2+T3+T4
  • 假设方波的频率为 f, 则 f = 1 / T
  • N = R.P.M ,此处的R.P.M代表的是每分钟的转速,例如风扇每分钟转60圈,则N = R.P.M = 60 rpm,所以N就是转速
  • 下面就是一些公式的推导和验证,通过自己推导,就可以 理解最终 N = FG * 30 的含义
N=R.P.M  电机铭牌中_R.P.M_就是指电机的额定转速,单位是:转/分。
• T = T1+T2+T3+T4, 可知 T 代表周期
• N / 60= 每秒钟 n 转, 即 HZ (用 f 表示) 
• 60秒 / N = 1 / n = 1 / f   = T 周期
• 如按上升沿次数计算,一个周期里面有 2个上升沿,如1秒钟内有 a 个上升沿,a其实就是FG,我们可以通过下面来验证:
  • 则 f = a / 2 =>  T = 2 / a  ==> T = 2 / FG  ==>  FG = 2 / T = 1 / (2T) 
  • 则 频率 f = 1 / T , 转速 N = fx60秒 =  60秒 x  (1/ T) = 60 / ( 2/ FG) = FGx30 , 即 N = FGx30
  • 综上,可得知FG = 1秒内出现的上升沿的次数,即上升沿中断的次数,
  • 之后可通过 N = FG x 30 得出风扇的R.P.M, 每分钟转速

四、软件算法解析

  • 此软件算法已集成在全志公版代码之中,此处仅贴出必要部分做讲解

4.1 HZ 的概念

  • Jiffy是在<linux/jiffies.h>中声明的内核时间单位。
  • 为了理解Jiffy,需要引入一个新的常量HZ,它是jiffies在1s内递增的次数,每个增量被称为一个Tick。
  • 在全志内核中 #define HZ 1000 ,它代表的含义是1秒内有1000个Tick

4.2 算法

  • 从FG信号的原理,我们如何进行编码呢?
  • 答案是,我们只需要统计1秒内,或者说单位时间内 FG信号的上升沿次数就可以了,也就是利用中断触发的次数来统计,每次有FG的上升沿到来时,就将 nFgCount + 1
  • 比如,设定1个定时器,这个定时器每秒钟触发1次,每次触发,都读取nFgCount ,将其除以2就是频率f
  • 下面,演示的就是这个算法

//(1)FG信号的中断处理函数,每次给自己+1
static irqreturn_t pulse_handler(int irq, void *dev_id)
{
	struct pwm_fan_ctx *ctx = dev_id;
        //每次FG引脚的中断触发,让pluses + 1
	atomic_inc(&ctx->pulses);

	return IRQ_HANDLED;
}

//(2)定时器的中断处理函数,每次触发,先获取pulse,用完后又将ctx->pulses归零,方便统计单位时间内次数
static void sample_timer(struct timer_list *t)
{
	struct pwm_fan_ctx *ctx = from_timer(ctx, t, rpm_timer);
	unsigned int delta = ktime_ms_delta(ktime_get(), ctx->sample_start);
	int pulses;

	if (delta) {                
		pulses = atomic_read(&ctx->pulses);//1秒内发生的脉冲次数
		atomic_sub(pulses, &ctx->pulses);// 归零

                //此处delta的理论值应该是1000ms,但会有些小小误差
                //可见此处,最终计算每分钟转速的公式: RPM=FGx30
		ctx->rpm = (unsigned int)(pulses * 1000 * 60) /
			(ctx->pulses_per_revolution * delta);

		ctx->sample_start = ktime_get();
	}
        
	mod_timer(&ctx->rpm_timer, jiffies + HZ);//设置+HZ后超时,继续触发sample_timer函数
}


//(3)最后,来看一下这个风扇设备的Probe过程,其中绑定了中断和中断处理函数,初始化了计时器
static int pwm_fan_probe(struct platform_device *pdev)
{	
        …… 略 ……
	//从DTS中解析中断 FG信号线的中断,interrupts 
	ctx->irq = platform_get_irq_optional(pdev, 0);
	if (ctx->irq == -EPROBE_DEFER)
		return ctx->irq;
        …… 略 ……
        timer_setup(&ctx->rpm_timer, sample_timer, 0);//初始化定时器和定时函数
        …… 略 ……

	of_property_read_u32(dev->of_node, "pulses-per-revolution", &ppr);
	ctx->pulses_per_revolution = ppr;//获取一个周期有几个pulses,PWM风扇一般为2个,具体见规格书
	if (!ctx->pulses_per_revolution) {
		dev_err(dev, "pulses-per-revolution can't be zero.\n");
		return -EINVAL;
	}

	if (ctx->irq > 0) {
		ret = devm_request_irq(dev, ctx->irq, pulse_handler, 0,
				       pdev->name, ctx);//绑定FG中断响应函数
		if (ret) {
			dev_err(dev, "Failed to request interrupt: %d\n", ret);
			return ret;
		}
		ctx->sample_start = ktime_get();//初始化开始时间
		mod_timer(&ctx->rpm_timer, jiffies + HZ);//定时器开始计时,+HZ 后响应定时中断
	}
        …… 略 ……

        //此处,将fan注册为 cooling device, 并提供了查询和设置当前风扇转速等级的函数,供Thermal使用
       ctx->pwm_fan_state = ctx->pwm_fan_max_state;
	if (IS_ENABLED(CONFIG_THERMAL)) {
		cdev = devm_thermal_of_cooling_device_register(dev,
			dev->of_node, "pwm-fan", ctx, &pwm_fan_cooling_ops);
		if (IS_ERR(cdev)) {
			ret = PTR_ERR(cdev);
			dev_err(dev,
				"Failed to register pwm-fan as cooling device: %d\n",
				ret);
			return ret;
		}
		ctx->cdev = cdev;
		thermal_cdev_update(cdev);
	}
}

五、篇尾

谢谢关注~

1、FG转速信号  FG(Frequency Generator)功能也是我们常说的Tach Out,此功能的作用主要是从风扇内部输出一个方波信号,而信号的频率代表风扇转速。常规四极风扇转速=FG频率*30。也就是说通过读取FG信号就可以读取风扇转速。     风扇转速是指风扇扇叶每分钟旋转的次数,单位是rpm。风扇转速由电机内线圈的匝数、工作电压、风扇扇叶的数量、倾角、高度、直径和轴承系统共同决定。转速风扇质量没有必然的联系。风扇转速可以通过内部的转速信号进行测量,也可以通过外部进行测量(外部测量是用其它仪器看风扇转的有多快,内部测量则直接可以到BIOS里看,也可以通过软件看。内部测量相对来说误差大一些)。。。。。。。。。。。。。。。。。。为什么风扇FG转速反馈的信号显示出的转速与厂家出具规格不同 (avcfan.cn)        散热风扇FG转速反馈)信号通常是通过一个脉冲信号来反映风扇转速,这个信号的频率通常与风扇转速成正比。风扇运行时,转子的N、S极切换会产生高低电平变化,转速越快,电平变化也就越快。不同厂家可能使用不同的磁极对数,这也会影响转速的显示。例如,如果一个厂家使用4个磁极对数,而另一个厂家使用6个磁极对数,那么在相同的FG信号频率下,实际转速可能会有所不同。。。。。。。。。。。。。。。。。。cr Kimi:《FG与Tach Out》FG(Frequency Generator)通常指的是频率发生器,它是一种能够产生特定频率信号的设备。在不同的应用领域,频率发生器可以用于多种目的,比如测试、测量或控制。**Tach Out**(Tachometer Output)则是一种输出信号,通常用于转速表(Tachometer)或其他测量设备,用来指示旋转设备的转速。Tach Out信号通常是通过测量旋转设备上的脉冲信号来确定转速的。### FG(Frequency Generator)的功能:1. **产生特定频率的信号**:频率发生器能够产生一个稳定的频率信号,这个信号的频率可以根据需要进行调整。2. **测试和校准**:在测试和校准设备时,频率发生器可以提供稳定的参考信号,帮助确定被测设备的准确性和稳定性。3. **控制和同步**:在需要同步多个设备或系统时,频率发生器可以作为控制信号源,确保所有设备按照相同的频率运行。### Tach Out的功能:1. **转速测量**:Tach Out信号通常与旋转设备的转速成正比,通过测量这个信号的频率,可以确定设备的转速。2. **反馈控制**:在一些控制系统中,Tach Out信号可以作为反馈信号,用于调节设备的运行速度,确保其在设定的转速范围内运行。3. **诊断和监控**:Tach Out信号也可以用于诊断和监控设备的状态,通过监测转速的变化,可以及时发现设备可能存在的问题。在某些情况下,频率发生器(FG)和Tach Out可能会结合使用。例如,在电机控制系统中,频率发生器可以产生控制信号来调节电机的转速,而Tach Out信号则可以提供实时的转速反馈,确保电机运行在预期的速度范围内。这种应用在变频器、伺服控制系统等领域非常常见。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。1.1、转速FG信号计算具体得参考具体型号风机的数据手册:根据风扇数据手册公式可以得到风机转速频率范围:这样可以与实测风机转速的频率进行对比参考,在风扇近满功率运行时,fg转速信号卡示波器看频率在333Hz左右。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。另外一款风扇数据手册会标注在特定频率下的转速:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。1.2、FG信号采集硬件电路具体得参考具体型号风机的数据手册:1.3、转速FG信号应用注意事项? 1. 散热风扇上拉电阻所接电压不可超出内部三极管的Vce max值。2. 散热风扇上拉电阻阻值限制Ic电流 最大值 10mA以内。3.散热风扇 报警信号高平与上拉电压有关,注意不超出MCU I/O限值。4.散热风扇 检测到的方波信号需要计算才能得出当前转速,计算方法查产品规格书。2、PWM调速信号2.1、PWM调速控制原理关于服务器风扇的接口信号_tach信号-优快云博客。。。。2.2、PWM调速硬件电路具体电路设计得参考具体型号风机的数据手册:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。来自网上电路:常用4线风扇接口定义_4线风扇引脚定义-优快云博客直流风机驱动控制电路设计指引 - 360文库 (so.com)散热风扇——四线PWM调速风机异常分析_信号 (sohu.com)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。2.3、隔离缓冲方案?3、DC工业风扇选型以下来自:kimi尼得科(NIDEC):尼得科株式会社提供多种直流轴流风扇,适用于各种应用场景。他们的产品信息可以在尼得科的官方网站上找到,包括不同尺寸和规格的风扇 。尼得科/NIDEC 官方网站 (nidec-group.cn)CUI Devices:提供高性能直流轴流风扇,尺寸范围从20mm至172mm,风量从0.33 CFM至382 CFM,适用于IT和电信设备、工业、医疗设备等高要求应用场景,并有多种型号具有IP68防护等级    直流风扇 |热管理 |CUI 设备 (cuidevices.com)美蓓亚三美(MinebeaMitsumi):美蓓亚三美集团的NMB品牌风扇电机/散热风扇以其高品质滚珠轴承和空气动力学设计而著称,广泛应用于5G通讯、AI人工智能等领域 21。DC直流风扇电机-风扇电机-美蓓亚三美 (minebeamitsumi.com.cn)
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿迷创客

感谢!您的支持是我写作的动力~

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

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

打赏作者

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

抵扣说明:

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

余额充值