lynnxh 发表于 2015-11-30 21:57:22

【原创】【Java on Pi】模拟PWM监控,调节风扇转速

本帖最后由 lynnxh 于 2015-11-30 22:00 编辑

受限于Pi的性能,java一直不是Pi 应用的开发首选,不过Pi 2 的性能跑Java已经没有问题啦,跑Eclipse都在可接受的范围内,嘿嘿。

国内Pi上玩java的太少,这里抛砖引玉一下,希望更多的码农在Pi上玩java。

嗯,废话不多说了,进入正题。

华丽的分割线----------------------------------------------------------------------------------------

首先,要有光!Pi的官方系统已经内置了JDK,输入java -version,ok!没有?apt-get install总会用吧?apt-cache search jdk,然后装吧。

其次,要有....PI4J。嗯,这个必须顶一个,实现了GPIO的控制,所以,你要有。还是apt-get install。

上面都是环境准备,好多教程,略过不表,进入正题:

我们都知道12V的电脑调速监控风扇用的是4针接口,这4针的定义请参考:
监控风扇转速就要用到SENSE的插针了。Control用来发送PWM信号,调节转速。
很明显Sense需要一个模数转换的过程,如果没有A/D卡,这个就有点复杂了,不想花钱还想要功能,就要多出点力了。模拟吧,好在风扇转速没那么快,Pi 2处理的来。
Sense的输入原理是当风扇旋转一圈,完整的输出1~4个波形。如果把Sense接到GPIO的数字口上,表现为高低电平的变化,也就是说如果我们能够监控GPIO口的电平变化情况,就可以算出1秒钟风扇转的圈数,这样就实现了转速的监控,简单吧?
代码如下:final GpioController gc = GpioFactory.getInstance();
//注意,使用时必须加高电平,Sense才会输出波形!
GpioPinDigitalInput measurePin = gc.provisionDigitalInputPin(RaspiPin.GPIO_00,"",PinPullResistance.PULL_UP);

//定义一个触发器,每当输入的电瓶变化时,计数器+1
private void initPinTrigger() throws Exception{
if(measurePin == null){
throw new Exception("Error to set Monitor , The GPIO Pin is Null !");
}
measurePin.addTrigger(new GpioCallbackTrigger(new Callable<Void>(){
@Override
public Void call() throws Exception {
count ++ ;
return null;
}
}));
}
看,我们已经能对输入的信号计数了,下面就要设置探测的时间间隔,每到间隔时间,重置计数器:<div>//做个线程,每秒重置计数器一次
int measureTime = 1000;
private float ratio = 0.25f;</div><div>
public void run(){
while(true){
//重置计数器
count = 0;
try {
Thread.sleep(measureTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//计算风扇转速
calculateFanSpeed();
}
}

/**
         * when the time to measure finished, use ratio,count calculate the speed
         */
private void calculateFanSpeed(){
int fanSpeed = (int)(measureTime/1000 * 60 * ratio * count);</div><div>//更新风扇转速的单例
ControllerInformation.getInstance().setFanSpeed(fanSpeed);
}</div>需要注意的是计算风扇转速的时候,一个高电平、低电平的变化计数器累加了2次,因此,最少也要在计数器上除2。另外,还要了解风扇转一圈输出几个波形,实验一下就能简单的得出答案。我使用的台达风扇一圈输出2个波形,因此Ratio设置为0.25。
ok,到此,转速的监控就完成了,简单吧??
下一篇再来给大家介绍OneWire的java访问方法及PWM控制风扇的方法。

树老大 发表于 2015-12-1 13:23:11

这个要前来支持。
页: [1]
查看完整版本: 【原创】【Java on Pi】模拟PWM监控,调节风扇转速