木工房电器与自控

打印 被阅读次数

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。

7. DRO=Digital Readout, 数字光栅/容栅/磁栅

光栅尺多用于精密机床上,磁栅多用于普通机床,长度可达数米。容栅尺就是国产卡尺,由带芯片的动栅在无源电路板定栅上滑动,电路线条构成的电容变化确定位移,长度150~300mm。有人拼接定栅做成长尺,理论上可达5米。似乎光栅尺是双相输出;容栅尺是I2C输出,有BCD和2x24bit两种,前者似乎不断电因此耗电多,也许Harbor的属这一类,后者是本文注重的。https://sites.google.com/site/marthalprojects/home/arduino/arduino-reads-digital-caliper  https://pcbheaven.com/exppages/Digital_Caliper_Protocol/?topic=chinesebin 4线I2C 1.5V接口,接Adruino的电平转换有几个办法:若芯片有比较器如AtMega328, AIN0接0.675V或正向二极管,AIN1和ADC0~7做输入,由ASCR.5读出反相的输入值;用3.3V给Adruino,240 ohm和红色发光管给动栅板供电约1.8V,正极是3.3V;用8.2-8.2-11K给5V分压,中间两头做动栅板电源;用三极管反相器;用芯片NCA9306,若双相输出可用74AXP2T45。

时钟约135K,数据是两段24bit,前/中/后时钟高约30/60/30us。24bit需165us,前3bit无用,继之20bit数据LSB在前,bit20为符号,负数用补码,在时钟下降沿时读取。两段数据中前为绝对后为相对即按清零后的数据。每隔180ms重复。而且,读取数字除以1.006才是显示数字。https://www.instructables.com/Reading-Digital-Callipers-with-an-Arduino-USB/ https://www.shumatech.com/support/chinese_scales.htm 此文说时钟为77-90KHz,数值单位为1/20480英寸,前/中/后时钟高约55/110/55us。数据和时钟引脚还分别用作模式和归零按钮,将相应引脚通过1K电阻拉至电源正来激活按钮功能。 作者的一款模式可在20ms与300ms更新速率见切换,另一款重量称则在保持H/最小值H S/和最大值H M间切换。

https://wei48221.blogspot.com/2016/01/using-digital-caliper-for-digital-read_21.html  PCB: Hack-Mod-Meschieber.zip (dropbox.com)

磁栅数显:中国专利CN203224207U“一种磁栅尺精密测量仪”,“沿其长度方向排列的多个磁传感器芯片,每个所述磁传感器芯片包括至少两条彼此平行的磁感应薄膜和焊盘,所述焊盘与所述磁感应薄膜电连接,所述磁感应薄膜连接成具有独立输出通道的惠斯通电桥;移动磁极,其沿所述定片刻度盘的长度方向移动,所述移动磁极产生的磁场可使与其位置相对的所述磁传感器芯片感应并输出差分信号;信号处理单元,其用于根据所述差分信号获得所述移动磁极在所述定片刻度盘的相对位置并将其转换成所测量器件的长度尺寸;显示单元,其用于显示所测量器件的长度尺寸, 该磁栅尺精密测量仪集成度高,精度高,便于制作等优点”。不防水不防铁磁:https://www.aliexpress.us/item/3256806576799194.html?spm=a2g0o.productlist.0.0.2c31XrFEXrFEY3 1米$31,2米$37。可铣槽10x1.7mm安装,磁带10x1.8mm由保护钢片、磁层、导磁钢片和胶带组合而成。常用M503读数头分辨率0.01mm=10微米,距离磁带1+-0.5mm为佳,尺寸100x52x30,两节AA电池可用一年以上。

 

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