家庭自動(dòng)化系統(tǒng)日益普及,如今通過使用一些簡(jiǎn)單的控制機(jī)制(如繼電器或開關(guān))來打開和關(guān)閉某些設(shè)備變得很容易,我們之前使用繼電器構(gòu)建了許多基于 Arduino 的家庭自動(dòng)化項(xiàng)目。但是有許多家用電器需要控制這種交流電源,而不僅僅是打開或關(guān)閉?,F(xiàn)在,進(jìn)入交流相位角控制的世界,這是一種簡(jiǎn)單的技術(shù),您可以通過它控制交流相位角。這意味著您可以控制吊扇或任何其他交流風(fēng)扇的速度,甚至可以控制 LED 或白熾燈泡的強(qiáng)度。
雖然聽起來很簡(jiǎn)單,但實(shí)際實(shí)現(xiàn)的過程非常困難,所以在本文中,我們將借助555 定時(shí)器構(gòu)建一個(gè)簡(jiǎn)單的交流相位角控制電路,最后我們將使用 Arduino生成一個(gè)簡(jiǎn)單的PWM 信號(hào)來控制白熾燈泡的強(qiáng)度。正如您現(xiàn)在可以清楚地想象的那樣,使用此電路,您可以構(gòu)建一個(gè)簡(jiǎn)單的家庭自動(dòng)化系統(tǒng),您可以使用單個(gè) Arduino控制風(fēng)扇和交流調(diào)光器。
什么是交流相角控制,它是如何工作的?
交流相位角控制是一種我們可以控制或斬波交流正弦波的方法。開關(guān)器件的觸發(fā)角在過零檢測(cè)后發(fā)生變化,導(dǎo)致平均電壓輸出與修正的正弦波成比例變化,下圖描述了更多信息。
如您所見,首先我們有交流輸入信號(hào)。接下來,我們有過零信號(hào),它每 10ms 產(chǎn)生一個(gè)中斷。接下來是門極觸發(fā)信號(hào),一旦我們得到一個(gè)觸發(fā)信號(hào),我們等待一定的時(shí)間再給觸發(fā)脈沖,我們等待的時(shí)間越長(zhǎng),我們?cè)侥芙档推骄妷海粗嗳弧N覀儗⒃诒疚暮竺嬗懻摳嗟闹黝}。
相角控制的挑戰(zhàn)
在我們查看原理圖和所有材料要求之前,讓我們先談?wù)勁c這種電路相關(guān)的一些問題以及我們的電路如何解決這些問題。
我們的目標(biāo)是在微控制器的幫助下控制交流正弦波的相位角,用于任何類型的家庭自動(dòng)化應(yīng)用。如果我們看下圖,你可以看到黃色是我們的正弦波,綠色是我們的過零信號(hào)。
當(dāng)我們使用 50Hz 正弦波時(shí),您可以看到過零信號(hào)每 10ms 出現(xiàn)一次。在微控制器中,它每 10 毫秒產(chǎn)生一次中斷。如果我們要放置除此之外的任何其他代碼,則其他代碼可能由于中斷而無法工作。我們知道在印度聽到的線路頻率是 50Hz,所以我們正在使用 50Hz 的正弦波,為了控制電源交流,我們需要在一定的時(shí)間范圍內(nèi)打開和關(guān)閉 TRIAC。為此,基于微控制器的相位角控制電路使用過零信號(hào)作為中斷,但這種方法的問題是除了步速角控制代碼之外,您無法運(yùn)行任何其他代碼,因?yàn)樵谀撤N程度上它會(huì)中斷循環(huán)周期和其中一個(gè)代碼將不起作用。
讓我用一個(gè)例子來澄清一下,假設(shè)你要做一個(gè)項(xiàng)目,你需要控制白熾燈泡的亮度,同時(shí)你還需要測(cè)量溫度。要控制白熾燈泡的亮度,您需要一個(gè)相位角控制電路,還需要讀取溫度數(shù)據(jù),如果是這種情況,您的電路將無法正常工作,因?yàn)?DHT22 傳感器需要一些時(shí)間給出它的輸出數(shù)據(jù)。在這段時(shí)間內(nèi),相位角控制電路將停止工作,即如果您將其配置為輪詢模式,但如果您將過零信號(hào)配置為中斷模式,您將永遠(yuǎn)無法讀取 DHT 數(shù)據(jù)因?yàn)镃RC校驗(yàn)會(huì)失敗。
為了解決這個(gè)問題,您可以為不同的相位角控制電路使用不同的微控制器,但這會(huì)增加 BOM 成本,另一種解決方案是使用我們的電路,該電路由 555 定時(shí)器等通用組件組成,成本也更低。
交流相角控制電路所需材料
下圖顯示了用于構(gòu)建電路的材料,因?yàn)樗怯煞浅Mㄓ玫慕M件制成的,您應(yīng)該能夠在當(dāng)?shù)氐膼酆蒙痰曛姓业剿辛谐龅牟牧稀?/p>
我還在下表中列出了組件的類型和數(shù)量,因?yàn)樗且粋€(gè)演示項(xiàng)目,所以我使用單通道這樣做。但電路可以根據(jù)需要輕松擴(kuò)展。
交流相角控制電路圖
交流相位角控制電路原理圖如下圖所示,該電路非常簡(jiǎn)單,使用通用元件來實(shí)現(xiàn)相位角控制。
交流相角控制電路——工作
該電路由非常精心設(shè)計(jì)的組件組成,我將逐一介紹并解釋每個(gè)模塊。
過零檢測(cè)電路:
首先,在我們的列表中,過零檢測(cè)電路由兩個(gè) 56K、1W 電阻器以及四個(gè) 1n4007 二極管和一個(gè) PC817 光耦合器組成。該電路負(fù)責(zé)向 555 定時(shí)器 IC 提供過零信號(hào)。此外,我們已經(jīng)對(duì)相位和中性信號(hào)進(jìn)行了錄音,以便在 TRIAC 部分進(jìn)一步使用它。
LM7809 穩(wěn)壓器:
7809穩(wěn)壓器是用來給電路供電的,電路負(fù)責(zé)給整個(gè)電路供電。此外,我們使用了兩個(gè) 470uF 電容和一個(gè) 0.1uF 電容作為 LM7809 IC 的去耦電容。
NE555定時(shí)器控制電路:
上圖顯示了 555 定時(shí)器控制電路,555 配置為單穩(wěn)態(tài)配置,因此當(dāng)來自過零檢測(cè)電路的觸發(fā)信號(hào)擊中觸發(fā)器時(shí),555 定時(shí)器開始借助電阻器對(duì)電容器充電(一般來說),但我們的電路有一個(gè) MOSFET 代替電阻器,通過控制 MOSFET 的柵極,我們控制流向電容器的電流,這就是我們控制充電時(shí)間的原因,因此我們控制 555 定時(shí)器的輸出。 在許多項(xiàng)目中,我們使用555 定時(shí)器 IC來制作我們的項(xiàng)目,如果您想了解更多關(guān)于這個(gè)主題的信息,您可以查看所有其他項(xiàng)目。
TRIAC 和 TRIAC 驅(qū)動(dòng)電路:
TRIAC 作為實(shí)際打開和關(guān)閉的主開關(guān),從而控制交流信號(hào)的輸出。驅(qū)動(dòng)TRIAC的是MOC3021光可控硅驅(qū)動(dòng)器,它不僅驅(qū)動(dòng)TRIAC,還提供光隔離,0.01uF 2KV高壓電容,47R電阻組成緩沖電路,保護(hù)我們的電路免受高壓尖峰的影響當(dāng)它連接到感性負(fù)載時(shí)會(huì)發(fā)生這種情況,開關(guān)交流信號(hào)的非正弦特性是造成尖峰的原因。此外,它還負(fù)責(zé)功率因數(shù)問題,但這是另一篇文章的主題。此外,在各種文章中,我們將TRIAC作為我們的首選設(shè)備,如果您感興趣,可以查看這些文章。
低通濾波器和 P 溝道 MOSFET(作為電路中的電阻器):
82K 電阻和 3.3uF 電容組成低通濾波器,負(fù)責(zé)平滑 Arduino 產(chǎn)生的高頻 PWM 信號(hào)。如前所述,P 溝道 MOSFET 充當(dāng)可變電阻器,控制電容器的充電時(shí)間??刂扑氖潜坏屯V波器平滑掉的PWM信號(hào)。在上一篇文章中,我們已經(jīng)清除了低通濾波器的概念,如果您想進(jìn)一步了解該主題,可以查看有關(guān)有源低通濾波器或無源低通濾波器的文章。
交流相角控制電路的 PCB 設(shè)計(jì)
我們的相位角控制電路的 PCB 設(shè)計(jì)在單面板上。我使用 Eagle 來設(shè)計(jì)我的 PCB,但您可以使用您選擇的任何設(shè)計(jì)軟件。我的電路板設(shè)計(jì)的 2D 圖像如下所示。
足夠的接地填充物用于在所有組件之間建立正確的接地連接。12V DC 輸入和 220 V AC 輸入位于左側(cè),輸出位于 PCB 右側(cè)。Eagle 和 Gerber 的完整設(shè)計(jì)文件可以從下面的鏈接下載。
手工PCB:
為方便起見,我制作了我手工制作的 PCB 版本,如下所示。
用于交流相角控制的 Arduino 代碼
一個(gè)簡(jiǎn)單的 PWM 生成代碼用于使電路工作,代碼及其解釋如下。您還可以在此頁面底部找到完整的代碼。首先,我們聲明所有必要的變量,
?
常量 int 類比輸入引腳 = A0;// 電位器連接到的模擬輸入引腳 常量 int 模擬輸出引腳 = 9; // LED 連接到的模擬輸出引腳 int 傳感器值 = 0; // 從鍋中讀取的值 int 輸出值 = 0; // 值輸出到 PWM(模擬輸出)
?
變量用于聲明 Analog 引腳、analogOut 引腳,其他變量用于存儲(chǔ)、轉(zhuǎn)換和打印映射值。接下來在setup()部分,我們將 UART 初始化為 9600 波特,以便我們可以監(jiān)控輸出,這就是我們?nèi)绾握页瞿軌蛲耆刂齐娐份敵龅?PWM 范圍。
?
無效設(shè)置(){ // 以 9600 bps 初始化串行通信: 序列號(hào).開始(9600); }
?
接下來,在loop()部分,我們讀取模擬引腳 A0 并將值存儲(chǔ)到傳感器值變量中,接下來我們將傳感器值映射到 0 -255 因?yàn)?atmega 的 PWM 定時(shí)器只有 8 位,接下來我們使用 Arduino的analogWrite()函數(shù)設(shè)置PWM 信號(hào)。最后,我們將值打印到串行監(jiān)視器窗口以找出控制信號(hào)的范圍,如果您按照本教程進(jìn)行操作,最后的視頻將使您對(duì)該主題有更清晰的了解。
?
sensorValue = analogRead(analogInPin);// 讀取模擬輸入值: outputValue = map(sensorValue, 0, 1023, 0, 255); // 將其映射到模擬輸出的范圍: 模擬寫入(模擬輸出引腳,輸出值);// 改變模擬輸出值: Serial.print("傳感器 = "); // 將結(jié)果打印到串行監(jiān)視器: Serial.print(sensorValue); Serial.print("\t 輸出 = "); Serial.println(outputValue);
?
測(cè)試交流相角控制電路
上圖顯示了電路的測(cè)試設(shè)置。12V 電源由 12V SMPS 電路提供,負(fù)載在我們的例子中是一個(gè)燈泡,它可以很容易地替換為像風(fēng)扇這樣的電感負(fù)載。另外你可以看到我已經(jīng)連接了一個(gè)電位器來控制燈的亮度,但它可以用任何其他形式的控制器代替,如果你放大圖像,你可以看到電位器連接到Arduino 的 A0 引腳和 PWM 信號(hào)來自 Arduino 的 pin9。
如上圖所示,輸出值為84,白熾燈泡的亮度很低,
在這張圖片中,您可以看到該值為 82,并且白熾燈泡的亮度增加了。
經(jīng)過多次失敗的嘗試,我能夠想出一個(gè)實(shí)際工作正常的電路。有沒有想過當(dāng)電路不工作時(shí)測(cè)試臺(tái)的外觀?讓我告訴你它看起來很糟糕,
這是我之前設(shè)計(jì)的電路。我不得不將它完全扔掉并制作一個(gè)新的,因?yàn)榍耙粋€(gè)有點(diǎn)不起作用。
進(jìn)一步增強(qiáng)
對(duì)于這個(gè)演示,電路是在手工制作的 PCB 上制作的,但是電路可以很容易地構(gòu)建在質(zhì)量好的 PCB 上,在我的實(shí)驗(yàn)中,由于元件尺寸,PCB 的尺寸確實(shí)很大,但在生產(chǎn)環(huán)境中,它可以通過使用廉價(jià)的 SMD 元件來減少,在我的實(shí)驗(yàn)中,我發(fā)現(xiàn)使用 7555 定時(shí)器而不是 555 定時(shí)器可以大大增加受控者,此外,電路的穩(wěn)定性也增加了。
常量 int 類比輸入引腳 = A0;// 電位器連接到的模擬輸入引腳
常量 int 模擬輸出引腳 = 9; // LED 連接到的模擬輸出引腳
int 傳感器值 = 0; // 從鍋中讀取的值
int 輸出值 = 0; // 值輸出到 PWM(模擬輸出)
無效設(shè)置(){
// 以 9600 bps 初始化串行通信:
序列號(hào).開始(9600);
}
無效循環(huán)(){
sensorValue = analogRead(analogInPin);// 讀取模擬輸入值:
outputValue = map(sensorValue, 0, 1023, 0, 255); // 將其映射到模擬輸出的范圍:
//outputValue = map(sensorValue, 0, 1023, 0, 255); // 將其映射到模擬輸出的范圍:
模擬寫入(模擬輸出引腳,輸出值);// 改變模擬輸出值:
Serial.print("傳感器 = "); // 將結(jié)果打印到串行監(jiān)視器:
Serial.print(sensorValue);
Serial.print("\t 輸出 = ");
Serial.println(outputValue);
延遲(2);// 在模數(shù)轉(zhuǎn)換的下一個(gè)循環(huán)之前等待 2 毫秒
}
評(píng)論
查看更多