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