个人资料
归档
正文

木工房电器与自控

(2014-08-18 11:36:22) 下一个

1. 概述

北美家用电是相位相反的两相120VAC,用两根火线就是240V常用于电炉烘干机。中央吸尘系统用2HP或以上风机,独立120/240V供电。用干湿吸尘器的最好将每个插座的上下口分作两相,分作工具和吸尘。如果单相15A同时给台锯和吸尘器供电可能会跳闸。

中央吸尘系统用分布的管道阀门来保持风量,即手动将所用工具相关的风道开启其余关闭。Festool/Fein吸尘器上的电源开关可选同时控制工具插座,(在15A线路上)多限制工具为6A,留下9A给吸尘器用。自动吸尘开关就是随工具电源启闭而随动的装置,如iVac系统,其设备在开关电流大于8A时要求加用接触器箱。自动开关由工具电流检测、可选的无线收发和继电器/接触器开关构成。

2. 工具启闭的电流检测

方式1如下,用二极管压降升压,缺点有功耗,如6A工具为9W。我做的减半。http://www.ibuildit.ca/other%20projects/automatic-switch-1.html 

上图左用35A600V全桥D1,利用其压降驱动3-4W变压器T1(次级输出不低于1.2×120/6=24v),经10V稳压管D3后驱动12V继电器K1。图右用SSD。

方式2是电流传感器Current transformer。例如10A/5mA用于5A时线性良好,最大可到50A。与Arduino Uno接口时负载电阻小于5V/10A/2.828=177 Ohm,加PK6E6.8AC限压以策安全:http://www.homautomation.org/2013/09/17/current-monitoring-with-non-invasive-sensor-and-arduino/ 

方式3是ACS712:有+-5/20/30A三种,相应Scale=185/100/66mV@1A,静态50%Vcc。用5V10bit A/D时有-A=(V-2500)/Scale,上下乘512/2500变为数字得 A=(512-Vnum)×2500/512/sacle,或相应20A为(512-Vnum)*50/1024,对5/30A改50为27/75.75 https://www.youtube.com/watch?v=UF5jrnXvTlM 下图右为SparkFun的板子加OPA344,可调零点和增益4.7-47。

传感器后需提供稳定可靠的控制信号给后续执行机构,通常还需延迟开关机。

3. 执行机构

建议30A250V继电器。可控硅Triac不够可靠本文忽略。

4. 无线收发

似乎没人知道早期2262类是Motorola的,台湾大陆都只是抄袭。后来又有EV1527学习型和滚码两种。EV1527可3V供电发出数据1~15(4bit),特点可有百万不同的发射机/遥控器,接收机要学习适应,可以删除记忆重新匹配新的发射机。早期接受芯片TDH6300可存储7个发射机的信息,对于车库开门器是足够了,工具类控制则似乎不足。木工房多半有超过7个的电动工具,希望各工具加电后自动感应发射信号打开吸尘器和相应的管道阀门。iVac的系统便受到系统地址15和工具地址7的限制。uP解码可不受此限制。

4.1. 发射/遥控器

4.2 接收器

有商品。下段是DIY:射频遥控:射频遥控接收及解码(对PT2622及EV1527进行有效解码) http://www.51hei.com/stm32/3798.html 

前两天用软件实现了EV1527及PT2622射频编码功能,周末在家闲来无事,我就琢磨用软件来实现射频编码接收并对PT2622和EV1527格式的编码进行解析,说干就干,周天上午一早就开始,晚上也是边看电视边做,经过一天的努力,终于在睡觉前完整了主要程序的编写,周一又花了些时间来检查,最后终于搞定。

    这次我用的是315M无线接收模块,就是这种的模块:

    按照资料说明这个模块需要5V供电,我本来还担心3.3V下面可能不工作,不过实践证明,是可行的。将这个模块的DATA管脚接到开发板的PA8,PA8是TIM1的CH1,对于射频遥控编码的采集我用了定时器的PWM捕获功能,这点和红外遥控编码采集方式类似,不同之处在于,红外遥控编码用的是下降沿触发采集,而射频遥控编码采用的上升沿触发进行采集。还有一点特别重要:红外遥控编码接收模块HX1838在平时没有收到红外信号的时候是高电平,当收到信号过后才产生脉冲,但是射频采用电磁波进行传输,而平时我们所在的空间中存在各种电磁波,所以即便没有信号的时候,也会出现不规则的波形输入,我们需要做的就是将有用的信号从各种干扰信号中提取出来,这一点是与红外遥控编码接收的最大不同。
 
    将有用的射频遥控编码信号从杂波中提取出来还是比较容易的,射频遥控的一个字码是由同步编码+地址码+数据码构成,我们只需要甄别出同步码,然后从同步码开始进行波形采集即可。射频编码一般一次至少发送4个以上的字码,由于无线传输过程中可能出现干扰信号,导致信号失真,因此我们必须对收到的多个字码进行验证,保证至少有两个以上的连续字码相同,这一点也是和红外遥控编码提取的最大不同。
 
    经过过滤杂波、验证有效的射频遥控编码之后,我们就可以得到一个有效的射频编码原始数据,接下来我们就需要判断是EV1527还是PT2622以及其它类型的编码,除了EV1527和PT2622之外的编码暂时不支持解码,只保留了原始采集的时长数据,而EV1527和PT2622的编码都是由50个高低电平来表示的,怎么样进行区分呢?
 
    PT2622是用两个脉冲来表示一个位,有0,1,F三种状态:两个窄脉冲表示0,两个宽脉冲表示1,一个窄脉冲+一个宽脉冲表示F;而EV1527用一个脉冲来表示0和1:窄脉冲表示0,宽脉冲表示1。所以在PT2622编码中不可能出现一个宽脉冲+窄脉冲的组合,通过这个特征就可以很方便将两种编码进行区分。进行了编码区分之后,接下来的事情就比较简单了,只需要根据两种编码格式的规则进行解析,得到真实的二进制编码即可。
 
    根据上述原理,我编写了一个类RFRecv,这个类里面封装了射频编码采集、解码的功能;同时又对之前编写的PT2622和EV1527编码程序进行了封装,写了一个类RFSend,用于实现对原始编码时长数据发送、EV1527和PT2622进行编码发送的功能。
 
    在软件包的“ProjectsRF-Recv”文件夹包含了射频接收的完整工程,可以直接编译、烧写和调试。程序代码如下:
#include "WProgram.h"
#include "RFRemote.h"
 
//创建射频遥控接收实例,射频接收模块接到TIM1的CH1,即:PA8
RFRecv rfRecv;
 
void setup()
{
  //初始化默认串口
  Serial.begin();
 
  rfRecv.enableRFIn();
  Serial.println("RFRemote start...");
}
 
void loop()
{
  uint16_t* rawBuf;
  int16_t len = rfRecv.available();
  //判断射频遥控编码采集是否完成
  if(len > 0)
  {
    //取采集的原始编码
    awBuf = rfRecv.getRawCode();
    //将接收到的原始编码通过默认串口输出
    Serial.print("Frame Length:");
    Serial.print(len);
    Serial.println();
    for(uint16_t i=0; i
    {
      Serial.print(rawBuf[i]);
      if(i != len - 1)
      {
        Serial.print(",");
      }
    }
    Serial.println();
    if(rfRecv.decode())
    {
      Serial.println("RF decode success...");
      uint8_t codeType = rfRecv.getCodeType();
      uint32_t adValue = rfRecv.getADValue();
      //二进制方式显示解码结果
      Serial.print("RF adValue:");
      Serial.println(adValue, 16);
 
      if(codeType == 1)
      {
          Serial.println("Code Type: PT2622" );
          //12位数据中,地址为占8位,数据占4位
          Serial.print("Address: " );
          Serial.println(PT2622::parseAddress(adValue, 8), 16);
          Serial.print("Data: " );
          Serial.println(PT2622::parseData(adValue, 8), 16);
        }
        else if(codeType == 2)
        {
          Serial.println("Code Type: EV1527" );
          //24位数据中,地址占20为,数据占4位
          Serial.print("Address: " );
          Serial.println(EV1527::parseAddress(adValue), 16);
          Serial.print("Data: " );
          Serial.println(EV1527::parseData(adValue), 16);
        }
        else
          Serial.println("Other code type..." );
      }
      else
      {
        Serial.println("RF decode error...");
      }
      //准备取下一个遥控编码
      rfRecv.resume();
    }
}
 
int main()
{
  //初始化Rainbow
  boardInit();
  setup();
  while(1) loop();
}
 
    这个程序的功能是接收射频遥控编码,并进行解码和显示,运行的效果如下:
 
    在软件包的“ProjectsEV1527”文件夹包含了发射EV1527遥控编码的完整工程,可以直接编译、烧写和调试。程序代码如下:
#include "WProgram.h"
#include "RFRemote.h"
 
//定义射频编码发送对象,使用PA0作为输出端口
RFSend rfSend(PA0);
 
void setup()
{
  //初始化默认串口
  Serial.begin();
  Serial.println("EV1527 encode start...");
}
 
void loop()
{
  rfSend.ev1527Send(0x0FE018, 7);
  delay(3000);
}
 
int main()
{
  //初始化Rainbow
  boardInit();
  setup(); 
  while(1) loop();
}
 
    将315M无线发射模块的DATA和PA0相连,软件将每隔3秒钟通过无线发射模块发送指定的地址码和数据。PT2622编码调用方式类似,可以参考“ProjectsPT2622”这个工程。

5. 商品

5.1 iVac


iVAC是唯一的?http://www.ivacswitch.com/default.action?itemid=67
IVacTool是电源转接盒,感应工具加电后发送含系统/地址/开关的无线信息给iVacSwiitch,动作BlasterGate。信息也含关机延时0/5/15/45秒,开机延时1.5秒(关机延时非0时)。最多支持8个阀门,其上有三档开关用于手动开关和自动,12V供电。产品分120V15/20A/240V20A多种,吸尘器超过8A时另有接触器箱。上图右左下电缆为Vac用,也可插入右下Aux共用右下电缆。新品通过夹在工具电源线外的电磁感应,靠夹背高度调节灵敏度。
http://thewoodworkersnews.com/2013/11/reviewed-the-ivac-pro-blast-gate-4-starter-pack/ 

5.2 随动电源开关 如Festool/Fein吸尘器上都有,随工具开动吸尘器。Festool 134CFM,开关是AUTO(随动1200W=120V10A)/0/MAN;Fein 151CFM,开关是随动(限6A)/关/开三档。

6. PWM 

用于普通电机调速。下面的电路可直接用于4线电脑风扇。若控制电机要加驱动,例如加MOSFET。原件靠近SMD芯片或电位器焊接无需PCB。

 

[ 打印 ]
阅读 ()评论 (2)
评论
chinomango 回复 悄悄话 谢谢反馈。315/433M是美/欧中的法定频率不同,其实都能用。个人觉得你用433,肯定不会与美产的315互相干扰了。
老石 回复 悄悄话 终于发现同好。不过您是内行,我是初学发烧。
文章中提到的315MHz无线模块我刚开始玩。我买的是433MHz的,发射接收成对的。用Arduino SDK编程,有人写好的现成的编码解码library:http://www.airspayce.com/mikem/arduino/RadioHead/ 非常简单好用。
登录后才可评论.