個人資料
歸檔
正文

木工房電器與自控

(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。

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電池可用一年以上。

 

[ 打印 ]
閱讀 ()評論 (2)
評論
chinomango 回複 悄悄話 謝謝反饋。315/433M是美/歐中的法定頻率不同,其實都能用。個人覺得你用433,肯定不會與美產的315互相幹擾了。
老石 回複 悄悄話 終於發現同好。不過您是內行,我是初學發燒。
文章中提到的315MHz無線模塊我剛開始玩。我買的是433MHz的,發射接收成對的。用Arduino SDK編程,有人寫好的現成的編碼解碼library:http://www.airspayce.com/mikem/arduino/RadioHead/ 非常簡單好用。
登錄後才可評論.