2014年1月2日 星期四

Arduino 控制 AC 110V 電路設計

https://4rdp.blogspot.com/2014/01/arduino-ac-110v.html?m=0

電驛 (Relay) 一文網友 Stonez 詢問 Arduino 控制 AC 110V 問題,我畫個電路說明:

想直接取用AC 110V電源轉換出 DC 5V是可以的,可是你需要追加下圖電路,上下圖AB兩點是AA及BB相接的,AC 110V 高壓需要經過變壓器將它降壓,建議選購線圈匝數比 16:1 左右,那可以降壓成AC 6.9V,經過四顆 1N4004 二極體全波整流,再經過 4700uF 電解電容、0.1uF 塑膠電容濾波就可以獲得直流約 8.3V,再經過 7805 穩壓器可得 DC 5V,再第二次電容濾波,這樣設計只要你的直流迴路吃電不超過 100mA7805 可以免裝散熱片。


另外注意,
4700uF 電解電容是有正負極性不要裝反,這些電容至少需要耐壓 16V 以上。如果覺得自製電源電路太麻煩,也可以買一個 USB 充電器,取用 DC 5V


Arduino部分,你需要選用一個 IO 腳接控制電路,再準備 3.3kΩ 電阻與 NPN 電晶體 9013 2N22221N4148 二極體。通常電驛線圈 (Relay coil) 需要 50mA 電流以上才能動作(不同規格電驛電流有差異),這麼大的電流,Arduino 是無法直接提供,因此經過電晶體電路來驅動,IO 輸出低電位時,電晶體處在截止區,電驛不工作,IO高電位時,電晶體處在飽和區,可以流過 50mA 驅動電驛線圈,就可以接通負載端接點,讓電燈或風扇通電運作。二極體 1N4148 當飛輪作用,因為電驛線圈通電後,會儲存電能,一旦電晶體關閉,那瞬間線圈會依楞次定律(Lenz's law)放電,少了它恐損壞 Arduino 9013


一般這類自製控制電路,基於安全的理由,建議使用在低耗電的電器上,負載端工作電流不超過 1A 或是消耗電力 100W 以下,保險絲可裝 3A,原則上不建議應用於風扇控制,因為家用電風扇多半是交流感應馬達,啟動瞬間電流可能很大,需要修改設計及加裝許多保護電路以符合大電流狀況使用。
若找不到適合的零件或不懂的地方可以將電路圖給電子材料行老闆看,會協助你取得適合的代替品。

29 則留言:

  1. Dear Marie,

    歡迎參閱本文,這給有興趣DIY電路,但又不太懂電學的人參考。

    回覆刪除
  2. 這個電路可用在220V的控制嗎?

    回覆刪除
    回覆
    1. 你好,
      這電路可用於 220V,只有變壓器須改成 32:1,其它條件不變。

      刪除
  3. 請問一下用PWM輸出可以控制交流感應馬達的轉速嗎?

    回覆刪除
    回覆
    1. 首先了解一下交流感應應馬達的轉速控制方法,一種是電壓控制 (電壓越高轉速越快),另一種是頻率控制 (頻率越高轉速越快)

      能否用 PWM 控制交流感應馬達,這要看你的整體電路如何設計,

      假設馬達電源使用交流 50/60 Hz,一般使用工業電子方式控制,如 SCR 或 TRIAC,控制馬達電源的相角 (電壓控制),PWM 控制訊號不適合直接接到 SCR 及 TRIAC 上,因為電源頻率與 PWM 頻率並不同步,馬達會時轉時不轉,會出現許多奇奇怪怪的狀況。不過可以將 PWM 訊號以直流濾波處理,轉換成以直流準位控制 SCR 或 TRIAC 相角是可行的。

      另一種是變頻器方法控制,馬達電源是直流,控制 IGBT 等電力電子電路,將直流電源變換為交流,這不會涉及電源頻率同步的問題,PWM 頻率決定馬達電源的頻率,PWM 的 DUTY 決定馬達電源的電壓。

      控制

      刪除
    2. 作者已經移除這則留言。

      刪除
  4. 版主您好,
    很有榮幸的在網路上搜尋到您的部落格,
    本身也是做電子類開發,不過還是經驗不足的菜鳥,
    在這邊有些關於馬達控制的問題,想跟版主請教一下,如下
    目前在製作直流有刷伺服馬達驅動器,電壓是24V /300W的馬達,
    使用的架構是H橋配合PWM控制正反轉與煞車,
    現在馬達運轉是沒有什麼問題,但就是急煞車時,馬達回來的反電勢
    無法招架,(現在是運轉切換到煞車,MOSFET僅先全關閉100ms就開電子煞車的下臂兩顆mosfet)
    一瞬間就會將我的Gate Driver打掛,就無法正常運轉了,
    不知道對於這方面反電勢的處理,版主先前有沒有相關的經驗可以分享,
    最近想在DC24V之間增加回生電阻(100歐姆/50W),
    然後執行電子煞車時,也一併將回生電路開啟,盼能減少對電路的衝擊,
    小弟對回生電阻選用的概念很不熟悉,
    還請版主能夠根據您所接觸過這方面的經驗上給小弟一點指導,
    如果還有資訊不夠仔細的地方,在麻煩您跟我告知,非常感謝^^!

    回覆刪除
    回覆
    1. Hardy,

      很高興在網路上認識你,你的貼文不見了,因此重貼說明,

      24V, 300W的直流伺服馬達,相當於有12.5A的電流,想要立即煞車是很困難的,也難怪你的 MOSFET很快就掛掉 !

      很久以前曾做過直流無刷馬達變頻控制,不過沒有煞車需求,因此也沒用過回生電阻,不過你可以請教回生電阻的廠商,台達電是不錯選擇,可以找他們。另外,計算回升電阻應該注意熱能的累積,因為過多的熱能累積會讓電阻壽命減損。還有煞車前,應先接上回生電阻,這樣對 MOSFET才有保護。

      最後建議可安裝多棵 1N4008 並接在H下臂以保護MOSFET

      刪除
  5. Hardy 已針對您的文章「Arduino 控制 AC 110V 電路設計」留下新意見:

    我還以為我的文章怎麼一發出去就消失了(當天有發現到),
    沒想到版主還是很熱心的幫我找回來,且提供相關建議給我,
    我最早是使用台廠的Gate Driver,然後一煞車就損壞,
    後來改測試IR的,恩...目前情況改善很多,
    連回生電阻都還沒有上,
    老實說電路與韌體幾乎沒有什麼修改,
    不過,一切還是要再觀察看看,
    最後謝謝版大的回覆,
    後續如有馬達PID控制的問題,
    再來向您請教,謝謝!!!

    回覆刪除
    回覆
    1. Hardy

      你的貼文怎又不見了,因此再補貼回覆,
      沒想到 Gate Driver 不同廠牌,竟然結果大不同,應該是台廠的缺少保護迴路。
      歡迎線上討論 PID 控制,http://4rdp.blogspot.tw/2008/05/pid-speed-control.html
      這一篇是我部落格中點閱率最高的一篇,已有數萬人參閱過,應該對你有所助益

      刪除
  6. 網友 Brian Huang 的貼文不見了,補貼如下

    如一顆1/4HP, 單相, 110V, 60Hz交流感應馬達,是否可以直接TIP 120電晶體與Arduino PWM來控制呢?

    回覆刪除
    回覆
    1. 一馬力 = 745.7 W, 1/4 HP = 186.425 W,交流單相感應馬達一般效率約在 60 %,也就是說輸入 100 % 的電能,僅能產出 60 % 動能,
      換算成電流量 = 186.425 W / 0.6 / 110 V = 2.825 A,這只是一般滿載電流,考量馬達起動電流可能有 3 倍以上,因此晶體最大工作電流應有 10 A。
      因為你控制的物件是交流馬達,沒辦法直接接一般電晶體來控制,應使用 SCR 或 TRIAC 之類工業電子控制。

      刪除
    2. 謝謝回覆.

      另外參考Arduino玩家,使用 Arduino MEGA 2560控制三相交流馬達,如底下網址:

      https://www.youtube.com/watch?v=HORRphAIzDk

      請問這code開頭的數值是如何取得呢?

      刪除
    3. 你的貼文中 youtube 網址,看不到你所說的 "code開頭的數值",能再補充資料嗎?

      刪除
  7. PROGMEM const uint16_t sine512[] = {250,256,262,269,275,281,288,294,301,308,314,319,326,332,339,344,350,356,362,367,374,379,384,389,395,400,404,410,414,419,423,428,433,436,440,445,449,452,455,458,463,466,468,471,474,476,478,481,483,485,487,488,490,491,493,494,495,496,496,498,499,499,499,500,500,499,499,499,498,498,496,496,495,494,493,493,492,491,489,488,487,486,484,483,481,480,478,476,474,473,471,470,468,466,465,463,460,459,457,455,453,452,450,449,447,446,445,443,442,440,439,438,436,435,434,433,432,432,431,430,430,429,428,428,428,428,427,427,427,427,427,428,428,428,428,429,430,430,431,432,432,433,434,435,436,438,439,440,442,443,445,446,447,449,450,452,453,455,457,459,460,463,465,466,468,470,471,473,474,476,478,480,481,483,484,486,487,488,489,491,492,493,493,494,495,496,496,498,498,499,499,499,500,500,499,499,499,498,496,496,495,494,493,491,490,488,487,485,483,481,478,476,474,471,468,466,463,458,455,452,449,445,440,436,433,428,423,419,414,410,404,400,395,389,384,379,374,367,362,356,350,344,339,332,326,319,314,308,301,294,288,281,275,269,262,256,250,244,238,231,225,219,212,206,199,192,186,181,174,168,161,156,150,144,138,133,126,121,116,111,105,100,96,90,86,81,77,72,67,64,60,55,51,48,45,42,37,34,32,29,26,24,22,19,17,15,13,12,10,9,7,6,5,4,4,2,1,1,1,0,0,1,1,1,2,2,4,4,5,6,7,7,8,9,11,12,13,14,16,17,19,20,22,24,26,27,29,30,32,34,35,37,40,41,43,45,47,48,50,51,53,54,55,57,58,60,61,62,64,65,66,67,68,68,69,70,70,71,72,72,72,72,73,73,73,73,73,72,72,72,72,71,70,70,69,68,68,67,66,65,64,62,61,60,58,57,55,54,53,51,50,48,47,45,43,41,40,37,35,34,32,30,29,27,26,24,22,20,19,17,16,14,13,12,11,9,8,7,7,6,5,4,4,2,2,1,1,1,0,0,1,1,1,2,4,4,5,6,7,9,10,12,13,15,17,19,22,24,26,29,32,34,37,42,45,48,51,55,60,64,67,72,77,81,86,90,96,100,105,111,116,121,126,133,138,144,150,156,161,168,174,181,186,192,199,206,212,219,225,231,238,244};

    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))


    //vyssi refclk == vyssi frekout const unsigned long refclk=1562960;

    const unsigned long refclk=781480;
    volatile int current_count;
    volatile unsigned long phase_accumulator;
    volatile unsigned long tword_m;
    volatile unsigned long stepm;
    volatile word count = 0;
    volatile byte DT = 10;
    volatile byte ampl = 13;
    volatile word offset_1 = 171;
    volatile word offset_2 = 341;
    word fnom = 5000;
    word fzad = 0;
    word boost = 600;
    word readpot;

    word calc;
    boolean ISR_exec_time = 1;
    boolean RUN = 0;
    byte bufclr = 0;
    void setup()
    {
    pinMode(6, OUTPUT); //OC4A
    pinMode(7, OUTPUT); //OC4B
    pinMode(8, OUTPUT); //OC4C
    pinMode(11, OUTPUT); //OC1A
    pinMode(12, OUTPUT); //OC1B
    pinMode(13, OUTPUT); //OC1C
    //pinMode(5, OUTPUT); //OC3A
    //pinMode(2, OUTPUT); //OC3B
    //pinMode(3, OUTPUT); //OC3C

    pinMode(52, OUTPUT);
    pinMode(53, OUTPUT);
    pinMode(22, INPUT_PULLUP);
    pinMode(23, INPUT_PULLUP);
    ...

    回覆刪除
    回覆
    1. 從你貼的數值,可以看到它變化是 250 ~ 500 ~ 427 ~ 500 ~ 250 ~ 0 ~ 73 ~ 0 ~ 250
      看起來像是 y = sin(x)+0.3*sin(3x) 之類的整數表,如果你在 Google Chrome 有安裝 Geogebra 軟體,
      https://www.geogebra.org/classic/VNeCWeAR,可以看到波形

      刪除
    2. 謝謝你的回覆.

      這些數值是一般感應馬達運轉的共同頻率嗎?

      刪除
    3. 不用客氣,這個表格有512個數值,它可應用於所有的頻率,也就是說把任意頻率等分512份,套這表格數值,就可以產生需要的波形。

      刪除
  8. 作者您好,想請問電路圖中的電驛該選用哪個型號比較適合,請問有推薦的嗎?

    回覆刪除
    回覆
    1. 使用何種電驛端看您的控制電路以及被控制的負載,如果您可以提供更詳細資訊,可以給予正確建議。

      刪除
  9. 請問,如果是用Arduino5V模組繼電器,控制負載為實驗室自製的PDLC製成的CCR回射器,使其運作為100~150V交流電壓,因為他本身是由信號產生器提供電壓,但現在如果用此方法不知道能不能運作,電流太大是否會燒壞,因為它不是像電扇電燈之類的電器用品

    文中好像有提到7805迴路電流不超過100mA,不然要加散熱片,假設要加散熱片請問要接再哪裡,可以請作者推薦型號嗎?

    最後想請問一下,圖中的電路圖變壓器想請作者推薦適合的型號,感謝~

    回覆刪除
    回覆
    1. Chang,請問您的 PDLC 是不是如 https://www.materialsnet.com.tw/DocView.aspx?id=8660 文中所示的 Polymer Dispersed Liquid Crystal,如果是,個人猜測它的電氣特性應該會很像 LCD 耗電量不會很多,估計整個負載電流不會超過 1A,不過需要看 PDLC 的規格書資料才會正確,你可以提供嗎?

      另外從你的提問,你可能混淆了一些電氣觀念,趁機在此澄清說明,電驛電路區分控制端以及被控制端,控制端包含 Arduino 等直流電路,被控制端是上圖中的 Load,耗電量絕對超過 10 mA,因為 Arduino 只能直接驅動 DC 小電流的負載。如果你只操控一顆電驛基本上,控制端耗電量約在 30mA,7805 不必擔心過載問題,因為 7805 的供電是給直流控制端的,除非你需要控制三顆以上電驛才要重新考慮 7805 散熱問題。

      不知道你會怎樣採買這些電子零件?是網購還是去電子材料行買?個人喜歡親自去材料行買,任何不懂的問題,可以即時詢問老闆或店員,當然零件的規格資料則需要自己上網找。如果想提升自己專業能力,建議自己先找資料再詢問意見,先等別人餵資料不容易進步。

      刪除
  10. 不好意思,想追加幾個問題,如果透過Arduino 5V DC供電轉成負載端110V AC(在不接信號產生器的情況下)變流過程是可行的嗎?

    請問Arduino接線部分端電流大約多少?假設根據文中提到7805直流迴路不超過100mA的情況下,藉由變壓器匝數公式去推算V1/V2= N1/N2= I2/I1(N1/N2=1:16,I1=100mA) 去估算I2大約是6.25mA(不知道這個思路對不對),這樣是不是就可以達到信號產生器所提供的電流?

    回覆刪除
    回覆
    1. 把 DC 5V 反轉變成 AC 110V,依據原理是可行的,假設這個變流器的變換效率是 70%,AC 110V 負載 1A,那麼 DC 端要能供電出 110V * 1A / 70% / 5V = 31.428A,電流太大了,電線絕對會過熱,有安全問題。如果不接訊號產生器,那 DC 可能耗電 50mA,那也要能供電 110V * 50mA / 70% / 5V = 1.571A,這也就是沒人這麼設計的原因。

      使用變壓器的目的,是為了取用 AC 110V 電源轉換成較低 AC 電壓,假設低壓端 100mA 以及轉換效率為 100%,那麼 110V 高壓端的電流就會耗用 6.25 mA,這電流是 Arduino 以及電驛電路控制端的耗電,不是被控制端 Load (信號產生器) 的耗電。

      刪除
    2. 謝謝,作者的詳細的解答,不過我有個問題,我上網查過資料,信號產生器用來代替交流電源供應器,通常電流很小是不是就無法像一般家用110V的交流電提供Arduino控制端6.25mA的耗電量(假設轉換效率100%),所以我應該使用交流電源供應器(假設調整110V,1A)比較適合對嗎?

      Arduino5V模組繼電器https://goods.ruten.com.tw/item/show?21642053073520根據他規格表提到觸發電流80mA,是不是上圖的電路我必須使用比3.3K歐姆較小的電阻,假設在飽和曲流經繼電器50mA去推算beta(但我不確定思路對不對),大約2.1K左右來提供電晶體基極電流產生較大的集極電流對嗎?如果要同時控制兩個觸發電流80mA的繼電器(Arduino上兩個IO腳位,負載分別接上兩個PDLC),我是不是就要裝散熱片了,如果是,是不是要裝在7805的output端,規格大約要多少比較適合(抱歉,因為之前電路實驗比較少接觸這部分的元件我不太了解,在留言前有先上網查過變壓器元件的結構和規格腳位還是不是很了解,我會再去電子材料行問問店員,如有冒犯之處還請見諒!)

      想請問最後一個問題,我有查到市面上PDLC的玻璃(實驗使用是PDLC膜)好像大約使用60V交流電壓,假設我想調整負載交流電源,應該就只要把電壓器的匝數比做修正就可以而不用大幅度改動上圖的電路,不知道思路對不對?


      刪除
    3. 很樂意與網友討論問題,有任何疑問會竭盡所能答覆,不過想提升自己專業能力,先做功課並清楚陳述自己的狀況,比較容易幫忙釐清問題。

      Arduino 繼電器模組,已經內含 3.3kΩ、9013、1N4148 等零件,或是等效元件,這只要從 Arduino 端供電即可,模組的 Vcc 接到 Arduino 5V,IN 接到 Arduino 的 IO pin,GND 接到 Arduino 的 GND。模組的另一邊是 NO (Normal Open 常開), COM, NC (Normal Close 常閉),使用 NO 及 COM 即可,它們接到 PDLC。如果你的 7805 電路只連接 Arduino 以及一個這樣的繼電器模組,可以不必擔心 7805 過熱問題。這模組之所以標示 80mA,是因為它使用較大電流的電驛以及加接了 LED。若同時使用兩個這樣模組,7805 是要加裝散熱片,因為兩個模組總電流不超過 200mA,所以散熱片不用太大,日後有機會再另外專文討論散熱片計算。下面連結你可以看到一些散熱片圖片,它與 7805 螺絲鎖付一起時是跟 GND 相接的。
      https://www.google.com/search?q=7805+%E6%95%A3%E7%86%B1%E7%89%87&newwindow=1&rlz=1C1CHBF_zh-TWSG778SG778&sxsrf=ALeKk01Ygs4CP4qzsZ3YwyTsWkBq7Lg-fw:1582512621326&source=lnms&tbm=isch&sa=X&ved=2ahUKEwig8pX1lunnAhV2zzgGHew2AeYQ_AUoAXoECAsQAw&biw=1097&bih=554

      使用何種電源控制 PDLC,一切端看你實際使用 PDLC 的規格而定,不同廠家或不同型號會有差異,務必取得規格資料,才能決定如何正確供電給 PDLC。假設如你所說 AC 60V,那你需要第二顆變壓器變電壓給 PDLC 使用,可用約 2:1 變壓器降壓,但是還需要知道 PDLC 的耗電流,才能找到合適大小的變壓器,因為電流容量小的變壓器會有過熱問題。

      如果你的兩個 PDLC 是同時開同時關,也可以考慮串聯起來,就不用第二顆 變壓器 AC 降壓,以及 7805 加裝散熱片。如果你有 PDLC 的規格書,可以幫忙看看。

      通常信號產生器的輸出功率不超過 0.5W,是無法跟電源供應器相比擬。要使用哪一種設備,一切取決於 PDLC 的規格。比較經濟的做法,用第二顆變壓器降壓替代信號產生器/電源供應器。

      刪除
  11. 作者您好,我昨天被問到http://chiacplus.com/2014/%E6%95%99%E5%AD%B8%E7%94%A8arduino%E6%8E%A7%E5%88%B6110v%E7%9A%84%E9%9B%BB%E5%99%A8/ 上他繼電器模組接路的問題,因為他好像沒有透過上圖AB接點端的電路就直接接AC電源,是因為模組內部就有承受大電壓輸出交流的電路嗎? 因為我去看一下他規格5VDC,10A250VAC,15A125VAC,10A250VAC我不太理解它到底能承受多大電壓

    PDLC我問過好像是實驗室自製的無法知道規格,只知道目前要150VAC能夠驅動,因為必須高頻率,訊號產生器我問廠商一般市售好像電流大約在200mA,最大電壓只有3.5V,實驗室功率放大器好像電壓增益是50V/V,我不確定電路AB兩端的元件需不需要做更換,還是只要改變變壓器紮數比(22:1)就可以了?

    回覆刪除
    回覆
    1. 從電驛標示 10A 250VAC,表示電驛交流電壓端可以耐受 250VAC 電流 10A,15A 125VAC 在 125 VAC 時最大電流可以達到 15A,電驛不會主動供電,它只是開關接點,承受外部的供電。

      PDLC 若是自製沒有規格,表示是實驗室在自製研究中,使用 Arduino 電路控制 的樣品開發還太早,因為規格可能改來改去,Arduino 這邊的電路也可能因此變來變去,此時應該先買一台儀器可調 AC 電壓,例如 10 ~ 200V ,頻率可調 10 Hz ~ 100 kHz,因為可能不知道頻率範圍,另外電流輸出可達 1 ~ 3A,先測試出 PDLC 特性,再來製作 Arduino 電路比較好。

      任何東西想商品化,需要明確的規格。

      刪除