部署處理特定任務(wù)的單片機來(lái)簡(jiǎn)化復雜設計
如今,運行實(shí)時(shí)操作系統(RTOS)的大型32位單片機(MCU)和微處理器(MPU)日益普及。不過(guò),如果使用一個(gè)大型單片機處理復雜的應用,可能會(huì )在執行小型后臺處理任務(wù)時(shí)遇到CPU資源方面的問(wèn)題,這些任務(wù)雖然并不復雜,但十分耗時(shí)。8位和16位MCU等小型器件可用于減輕32位器件的工作負荷。
本文引用地址:http://dyxdggzs.com/article/202205/434002.htm試想一下這樣一個(gè)示例:將一個(gè)32位MCU用于控制汽車(chē)的非安全功能,如娛樂(lè )系統、環(huán)境照明和空調。此32位器件必須對其資源進(jìn)行分配,以便處理與這些功能相關(guān)的所有任務(wù)。這樣的任務(wù)還包括測量駕駛室內多個(gè)點(diǎn)的溫度、打開(kāi)/關(guān)閉空調系統、更新圖形顯示、處理用戶(hù)輸入、調整照明條件和播放音樂(lè )。即使對于大型32位器件,這些工作量也過(guò)于繁重。
但是,如果32位器件將部分任務(wù)負荷轉移給幾乎不需要監控的子處理器,每個(gè)子處理器僅負責處理其中的1或2個(gè)任務(wù),那么這些任務(wù)會(huì )更易于管理。這可以釋放主處理器上的CPU資源,從而降低軟件的復雜性,同時(shí)提高性能并縮短執行時(shí)間。
這種解決方案與單片機中的外設有異曲同工之妙。外設是專(zhuān)用硬件的小型模塊,可以添加新功能(例如運算放大器或模數轉換器),也可以減少執行給定功能時(shí)CPU必須承擔的工作量。在某些情況下,初始化后,外設可獨立于CPU運行。
為了說(shuō)明外設的優(yōu)勢,我們以產(chǎn)生脈寬調制(PWM)信號為例。要在沒(méi)有專(zhuān)用外設的情況下產(chǎn)生PWM,只需將I/O線(xiàn)設為高電平,等待一定數量的周期后,將其設為低電平,再等待一段時(shí)間,然后重復操作。這會(huì )占用大量CPU周期,并且對于某些功能(如RTOS)來(lái)說(shuō),難以可靠地執行。相比之下,PWM外設允許CPU在執行其他任務(wù)的同時(shí)設置所需的波形參數。
本文中介紹的第一個(gè)示例說(shuō)明了減輕CPU密集型任務(wù)負荷的優(yōu)勢。在該案例中,使用了一個(gè)8位MCU來(lái)創(chuàng )建I/O擴展器。I/O擴展器并不復雜;然而,由于需要頻繁處理中斷,因此它們會(huì )占用大量的CPU時(shí)間。通過(guò)使用專(zhuān)用MCU來(lái)完成這項任務(wù),大型32位器件可以減少I(mǎi)/O使用和需要處理的中斷次數。此外,I/O擴展器的功能集可在軟件中設置,因此支持針對應用進(jìn)行定制和調整。
本文中的第二個(gè)示例以創(chuàng )建獨立于CPU運行的電壓頻率(V/F)轉換器為例,展示了獨立于內核的外設的性能。在這個(gè)示例中,CPU的唯一功能是初始化外設并將調試打印消息發(fā)送到UART。在大型系統中,當V/F在后臺運行時(shí),CPU可以執行另一個(gè)簡(jiǎn)單的任務(wù)。
I/O擴展器
使用8位MCU創(chuàng )建I/O擴展器的最大好處是提高靈活性。I/O擴展器ASIC的功能集已嵌入到器件中,而MCU可基于其執行的軟件定義其行為。這種靈活性使基于MCU的版本能夠滿(mǎn)足最終應用的需求。
實(shí)現高級I/O擴展器
在器件內部,高級I/O擴展器在基于查找表的結構上運行。在讀取或寫(xiě)入之前,會(huì )發(fā)送一個(gè)虛擬地址。該地址與單片機上的寄存器無(wú)關(guān)——僅特定于查找表。這意味著(zhù),可以透明地添加不在單片機硬件寄存器中的功能。此外,還可以針對特定用途,輕松地重新排列表格中的條目。這種結構的另一個(gè)優(yōu)勢是,能夠向查找表添加權限。例如,要創(chuàng )建一個(gè)只讀寄存器,只需省略查找表的寫(xiě)條目即可。
高級I/O擴展器的查找表
這種較為復雜的結構也適用于非標準功能?!癕EM OP”功能允許MCU將其當前的通用輸入和輸出(GPIO)配置保存或加載到存儲器中。
器件中的存儲器存儲
MEM OP也可以將GPIO配置重置為編譯時(shí)設置的參數。
注:并非所有字段均可用于所有操作
MEM OP的功能
此外,也可以選擇將單片機設置為在上電時(shí)加載保存的設置。如果已使能,單片機會(huì )嘗試加載配置0中的設置。如果配置執行校驗和驗證失敗,則MCU將恢復為編譯時(shí)常數。如果不需要,可以在軟件中禁用此功能。
該解決方案的要點(diǎn)
基于MCU的解決方案的優(yōu)勢在于出色的靈活性。與市場(chǎng)上的ASIC不同,我們可以為MCU配置特定于應用場(chǎng)景的非標準功能。此應用程序針對通用PIC16F15244系列MCU開(kāi)發(fā)。
如需深入了解該實(shí)現或想要試用該示例,請參見(jiàn)源資源庫中的README文件。此外,還提供帶有Arduino的高級I/O擴展器的演示。
電壓頻率(V/F)轉換器
通過(guò)降低物料清單(BOM)成本,進(jìn)而減小設計面積,電壓頻率轉換器可改進(jìn)傳統的模擬解決方案。市場(chǎng)上的許多V/F轉換器需要配備外部電阻和電容才能運行,而單片機只需使用通用去耦和上拉組件(所有MCU的必備組件)即可運行。
TC9400/TC9401/TC9402 10 Hz至100 kHz V/F轉換器的應用原理圖
MCU不使用模擬技術(shù)進(jìn)行數字化,而是使用獨立于內核的外設和功能的組合。MCU使用內部帶計算功能的模數轉換器(ADCC)測量輸入信號,然后對時(shí)鐘信號進(jìn)行分頻,以創(chuàng )建可變頻率輸出。在該示例中,外設已設置為在初始化后獨立于CPU運行。這意味著(zhù),CPU可以用于最終應用中的其他任務(wù)。
對于基于MCU的方案,其挑戰在于性能不如模擬解決方案。輸出的分辨率本身受到ADCC的限制。表面上看,ADCC為12位,但它會(huì )以配置為過(guò)采樣的14位分辨率運行,具體取決于程序的配置方式。同樣,用于合成輸出頻率的片內數控振蕩器(NCO)具有有限的分辨率,并且其輸出中可能存在抖動(dòng),具體取決于A(yíng)DC測得的值。
基于MCU的解決方案可以分為三個(gè)不同的外設模塊——模擬采樣模塊、輸出振蕩器模塊和占空比發(fā)生器。
解決方案框圖
模擬采樣模塊
模擬采樣模塊實(shí)現
模擬采樣模塊負責執行模數轉換。為了在器件的頻率限制下實(shí)現100 kHz的輸出,已將ADCC配置為過(guò)采樣,然后通過(guò)平均值處理獲得14位結果。
這種過(guò)采樣配置有一個(gè)缺點(diǎn),即向結果中增加額外的統計噪聲,可采取計算過(guò)采樣的平均值并增加滯后的方法來(lái)補償噪聲。要實(shí)現滯后,可使用ADCC的閾值中斷功能。(為簡(jiǎn)單起見(jiàn),將僅介紹有關(guān)此示例如何使用閾值中斷功能的細節。)
在A(yíng)DCC完成過(guò)采樣的平均值計算后,將得出的值與外設中的設定值寄存器進(jìn)行比較。如果兩者之差大于或小于設定閾值,則觸發(fā)中斷。CPU可屏蔽此中斷且不受影響,然而,此中斷會(huì )觸發(fā)直接存儲器訪(fǎng)問(wèn)(DMA),將經(jīng)過(guò)平均值處理的過(guò)采樣結果復制到ADCC的設定值寄存器,從而產(chǎn)生滯后。如果未超過(guò)閾值,則不會(huì )發(fā)生DMA復制,從而不會(huì )觸發(fā)輸出振蕩器模塊的DMA更新。
輸出振蕩器模塊
輸出振蕩器模塊的結構
該解決方案的輸出振蕩器模塊負責以所需輸出頻率產(chǎn)生時(shí)鐘信號。該輸出信號在內部連接到占空比發(fā)生器,該元件將輸出頻率減半,但會(huì )產(chǎn)生50%的占空比輸出。因此,輸出振蕩器模塊以輸出頻率的兩倍運行。
輸出振蕩器模塊的核心是數控振蕩器(NCO)。NCO外設的工作原理是在輸入時(shí)鐘的上升沿向累加器添加增量值,然后根據累加器溢出導出外設的輸出。(有關(guān)NCO的完整說(shuō)明,請參見(jiàn)數據手冊。)
在該示例中,已將NCO2設置為在內部創(chuàng )建所需的輸入時(shí)鐘頻率,以通過(guò)14位輸入獲得100 kHz輸出。之所以使用14位結果,是因為ADCC本身的12位結果不足以在沒(méi)有外部時(shí)鐘源的情況下產(chǎn)生100 kHz輸出。
ADC結果 | NCO1輸出(翻倍) | 輸出頻率 |
0x0000 | 0 Hz | 0 Hz |
0x0001 | 12.2 Hz | 6.1 Hz |
0x0100 | 3.1 kHz | 1.6 kHz |
0x1000 | 50 kHz | 25 kHz |
0x3FFF | 200 kHz | 100 kHz |
100 kHz V/F轉換器的理想輸出(看門(mén)狗已關(guān)閉)。
如果改變NCO2的輸出頻率或使用備用源,則輸出頻率將調整為不同的輸出范圍。例如,如果NCO2的頻率降低到1.28 MHz,則輸出最大為10 kHz。
ADC結果 | NCO1輸出頻率(翻倍) | 輸出頻率 |
0x0000 | 0 Hz | 0 Hz |
0x0001 | 1.2 Hz | 0.6 Hz |
0x0100 | 312.5 Hz | 156.3 Hz |
0x1000 | 5 kHz | 2.5 kHz |
0x3FFF | 20 kHz | 10 kHz |
10 kHz V/F轉換器的理想輸出(看門(mén)狗已關(guān)閉)。
占空比發(fā)生器
占空比發(fā)生器框圖
該解決方案的占空比發(fā)生器模塊負責創(chuàng )建50%的占空比輸出。這是一個(gè)可選功能——可以直接使用NCO的輸出,但這樣做會(huì )增加占空比的變化幅度。
該生成器使用一個(gè)可配置邏輯單元(CLC)實(shí)現。CLC是可配置邏輯的小型模塊,類(lèi)似于現場(chǎng)可編程門(mén)陣列(FPGA)的一個(gè)單元。CLC可用作離散邏輯門(mén)(例如AND-OR或OR-XOR),也可以配置為鎖存器或觸發(fā)器。在該解決方案中,CLC實(shí)現為帶復位功能的J-K觸發(fā)器。J和K保持在邏輯高電平。輸出振蕩器模塊用作觸發(fā)器的時(shí)鐘。每個(gè)輸入時(shí)鐘脈沖均會(huì )導致輸出翻轉,從而產(chǎn)生50%的占空比。注意:輸出振蕩器模塊的頻率抖動(dòng)將對占空比產(chǎn)生影響。
Timer 6用作不穩定的“看門(mén)狗”定時(shí)器。如果輸出沒(méi)有產(chǎn)生邊沿(上升沿或下降沿),則定時(shí)器將溢出,并將產(chǎn)生的時(shí)鐘脈沖發(fā)送到CLC,這可以控制輸出頻率范圍的下限。輸出翻轉到定時(shí)器頻率的一半(輸出為6 Hz),而不是達到直流。
該解決方案的要點(diǎn)
該示例表明,要使用硬件外設創(chuàng )建獨立于內核的功能,通常必須使用外部集成電路。這種配置的一個(gè)最大優(yōu)勢在于,外設操作可在軟件中設置,這樣便可輕松地根據最終應用調整示例。由于使用了大量外設,因此選擇PIC18-Q43系列MCU來(lái)實(shí)現該示例。
有關(guān)該示例的更多信息,請參見(jiàn)示例資源庫中的README文檔。此外,示例資源庫還包含頻率電壓轉換器的實(shí)現,可與電壓頻率轉換器在同一個(gè)器件上實(shí)現。
總結
盡管高性能單片機和微處理器都有一席之地,但在執行小型專(zhuān)門(mén)任務(wù)時(shí),8位和16位MCU的作用不容小覷。這類(lèi)任務(wù)并不一定十分復雜,但可能十分耗時(shí),或者是時(shí)間關(guān)鍵型任務(wù)。任務(wù)負荷減輕后,32位器件可擁有更簡(jiǎn)單的實(shí)現,從而提高可靠性、減少存儲器占用率并降低功耗。
評論