使用 Hercules? LaunchPad? 開發(fā)套件控制 GaN 功率級 – 第 2 部分
在我的上一篇文章中,我向我們介紹了一個動手項目:使用氮化鎵 (GaN) 功率級、Hercules? 微控制器和滾輪調(diào)暗燈。我介紹了設(shè)置、設(shè)計以及如何以正確的方式驅(qū)動功率級。
在這篇文章中,我們將立即嘗試我們的工作。我們已驗證 LaunchPad? 開發(fā)套件產(chǎn)生了正確的信號。因此,讓我們將其連接到評估套件。
準(zhǔn)備評估套件并將其連接到 LaunchPad 開發(fā)套件
LMG5200 評估模塊 (EVM) 帶有驅(qū)動 GaN 集成電路 (IC) 的電路。我們將解耦那個并連接我們的 LaunchPad 開發(fā)套件。
圖 1:移除電阻器 R6 和 R7
去耦板載驅(qū)動電路并不難。我們只需從印刷電路板(PCB,參見圖 1 和圖 2)上移除兩個 0Ω 電阻器 R6 和 R7。最簡單的方法是使用熱風(fēng)槍。
圖 2:電阻器 R6 和 R7 的 PCB 位置
我們現(xiàn)在有了測試點 TP9 和 TP10,可將 LaunchPad 的脈寬調(diào)制 (PWM) 輸出連接到 LMG5200。在這種情況下,哪個信號與哪個測試點相關(guān)聯(lián)并不重要。不要忘記進(jìn)行接地連接(參見圖 3)。
圖 3:PWM 信號的位置
按照用戶指南中的說明連接電源和偏置電壓。將燈連接到輸出。如果我們按照評估套件用戶指南中的說明為設(shè)計上電(首先是偏置電壓,然后是 Hercules 信號,然后是電源),我們將獲得一個驅(qū)動至其最大功率 10% 的設(shè)置。此時,我們可以通過更改 HALCoGen 中的占空比來更改輸出并重新生成項目。這不是很方便,所以讓我們研究一個用戶友好的輸入機制。
制作旋轉(zhuǎn)編碼器
正交編碼器無處不在。它們看起來像電位器,但你可以永遠(yuǎn)轉(zhuǎn)動它們。我們的汽車音響系統(tǒng)可能有一個,或者我們的示波器。如果我們身邊有一個死機鼠標(biāo),那么滾輪很可能是一個旋轉(zhuǎn)編碼器。
(如果你不走運,你的死鼠標(biāo)有一個光學(xué)滾輪;你不能在今天的練習(xí)中使用那個。尋找另一只鼠標(biāo),或訂購一個類似于組件 EC101102X2E-VAX 的鼠標(biāo)。)旋轉(zhuǎn)編碼器是什么并不重要我們使用或它有多少步驟。它們都產(chǎn)生格雷碼。
我們需要四個額外的組件才能將輪子變成穩(wěn)定的去抖動輸入設(shè)備:兩個 10K 電阻器和兩個 0.5μF 電容器。如果我們無法在實驗室中找到準(zhǔn)確的值,請不要絕望。它們根本不重要。
構(gòu)建旋轉(zhuǎn)編碼器電路并將其連接到 LaunchPad 開發(fā)套件
圖 4 說明了如何構(gòu)建電路。
圖 4:編碼器電路
這兩個電阻是上拉電阻。當(dāng)旋轉(zhuǎn)編碼器開關(guān)打開時,它們將 A 端 B 保持為高電平。當(dāng)這些開關(guān)中的任何一個閉合時,相應(yīng)的輸出會被開關(guān)拉至地。電容器使信號平滑并濾除任何彈跳。
我們將使用帶有滾輪的 Hercules eQEP 外圍設(shè)備(正交編碼器)。2 號 EQEP 模塊靠近我們已經(jīng)用于 ePWM 輸出的引腳。因此,將滾輪連接到它,如表 1 和圖 5 所示。
表 1:旋轉(zhuǎn)編碼器連接
圖 5:編碼器信號的位置
連接好編碼器后,我們可以前往 HALCoGen 并調(diào)整我們的固件。
在固件中集成滾輪
此時所有硬件都已連接。但是我們仍然必須構(gòu)建滾輪功能。在 Hercules 世界中,我們必須做兩件事:在 HALCoGen 中配置 eQEP 模塊,并在 Code Composer Studio? 軟件中調(diào)整我們的程序。
在固件中集成編碼器功能
啟用 eQEP 驅(qū)動程序并配置 eQEP 模塊 2(圖 6 和 7)。HALCoGen 設(shè)置可能看起來很神奇,但我的element14 博客解釋了它們。
圖 6:啟用編碼器模塊 2
圖 7:配置編碼器 2
在 Code Composer Studio 軟件中初始化驅(qū)動程序。在我們的狀態(tài)機中,我們將定期輪詢車輪的值并對更改做出反應(yīng)。根據(jù)旋轉(zhuǎn)編碼器的狀態(tài)減少或增加 PWM 信號的占空比。請參閱rotate.c、pwm.c 和HL_sys_main.c 文件以了解所有這些是如何聯(lián)系在一起的。
雖然(1)
{
uRotary = getRotaryPosition();
if (uRotary != uRotaryLastVal) {
uRotaryLastVal = uRotary;
setPwmDutyCycle(uRotary);
}
}
滾輪的代碼也不難。在此設(shè)計中,我們不希望編碼器超出最大值或最小值。你可以查看rotary.c 看看我是如何編碼的。它有效,但我對處理解碼的設(shè)計并不完全滿意。隨意加入并構(gòu)建更好的實現(xiàn)。