最近,我們收到了一些來自教育工作者的請求。他們正在尋求指導,以幫助他們為教室選擇完美的微控制器。
這不是一個簡單的問題,因為有很多低成本高效能選項可供選擇。有經典的 8 位元微控制器,例如 8051、MSP430、Z8、AVR 和 PIC。有 ARM 等現今市場流行以及許多製造商提供的 32bit產品。還有系統單晶片(SoC)和現場可程式化閘陣列(FPGA)選項。這些先進的微控制器選項提供靈活的類比和高速平行數位處理能力。
從哪裡開始?
我們應該承認,沒有一個完美的微控制器。相反,有多種微控制器允許設計者針對給定的設計進行最佳化。由於不存在單一完美的微控制器,因此我們不應期望單一的課堂解決方案。
請容許我在課堂上分享我對微控制器的經驗和看法。在加入 DigiKey 團隊之前,我曾向各種學生教授微控制器課程,從絕對的初學者到獨立的優秀 EE 課程。我還教授過以各種微控制器為特色的課程。雖然我距離最有經驗的教授還很遠,但你可能會在這篇筆記中發現一些精華。
本筆記的內容適用於第一學期和第二學期的微控制器課程。這些想法適合進入技術或電機工程課程的高級高中生和大學生。我們將嘗試透過將微控制器連接到外部電路來平衡編程與原型設計的需要。
程式設計基礎知識
教育者必須解決的首要問題之一是學生的程式設計技能。必須快速學習類型、分支、循環和函數等概念,才能釋放微控制器的潛力。
困難方法
在將硬體連接到微控制器的同時,嘗試教授程式設計、週邊操作、暫存器規格書描述的解釋。
簡單方法
假設您的學術課程還沒有入門程式設計課程。我看到兩個選擇。首先,您可以在微控制器之外花費一個月的課程時間,並專注於使用 GDB 線上除錯器等線上工具的 C 程式設計。另一種方法是利用 Arduino 社群。使用簡單的硬體(例如三色 LED 和壓電蜂鳴器)來探索分支、循環和函數。
技術提示:Arduino 一詞有多個維度。一種觀點是專注於位於 Arduino - Home 的公司本身。另一種觀點認為 Arduino 是一個開源平台,擁有龐大的活躍社群基礎。這是所有學生都應該利用的寶貴資源。
同時,我們需要認識到與Arduino相關的教育矛盾。雖然它的設計目的是讓程式設計變得更容易,但它並不是一個簡單的程式。例如,考慮「簡單」的 digitalWrite( ) 函數。您會發現,在所有 Arduino 系列成員之間無縫整合此功能的 Arduino 程式碼絕非簡單。
麵包板友善設備
假設我們正在教授電氣技術或電氣工程課程,學生應該期望使用麵包板電路。這將有助於他們了解微控制器的用途並鞏固早期的電子課程。
-
DIP 封裝微控制器:絕大多數的微控制器都是以表面黏著封裝生產。 Microchip 是個例外,它繼續生產採用 DIP 封裝的微控制器。
-
SMD 轉 DIP 配接板:提供配接板,讓大多數低成本微控制器與麵包板一起使用。
-
麵包板友善設備:有大量微控制器評估板,其中包含目標微控制器以及編程器,甚至還線上除錯器。代表性的例子包括 Silicon Lab 的 Busy Bee、STMicroelectronics 的 Nucleo、Microchip 的 Curiosity Nano 和 Arduino 的 Nano 系列產品。還有不少數量及名稱的擴充板,讓微控制器開發套件與麵包板連接。
建議您專注於 3.3VDC 組件,以順應更低電壓的趨勢,從而實現更大的未來靈活性。
首選方案
Microchip 的 PIC 和 AVR 脫穎而出。大多數這些產品均採用 DIP 形式,包括 8、14、20、28 和 40 引腳替代品。
技術提示:有許多獨特的 SMD 封裝,其佔用空間越來越小。在較大的 SMD 裝置中,我們經常找到 SOIC 選項。可以使用諸如 SOIC-16 之類的適配器。這些設備屬於一年級技術和工程專業學生的焊接技能範圍。透過對廢棄 PCB 進行少量練習,他們將能夠使用熱空氣或小型傳統烙鐵焊接 SOIC。
除錯技巧
必須培養快速除錯程式的能力。這將包括編譯和運行時錯誤。大多數 IDE 都為編譯錯誤提供了良好的支持,通常使用工具將我們帶到有問題的程式碼行。運行時錯誤沒有這樣的支援。
中級學生的除錯技術包括使用:
-
斷點和觀察點:如果支持,這些工具允許程式設計師「查看」微控制器以檢查甚至更改與微控制器週邊相關的變數和暫存器。
-
I/O 引腳:這可以像使用外部 LED 或示波器一樣簡單來查看佔空比。更複雜的範例可以使用多位邏輯分析儀。
-
列印語句:這種簡單的技術允許程式設計師在串行監視器或串行圖形顯示器上顯示值。雖然它是一種強大的技術,但它會消耗微控制器資源,並且可能會幹擾高速進程的時序。
-
模擬:如果可用,該工具可以提供類似於停頓點和觀察點的洞察。
學生將花費大量時間學習然後部署除錯技術。作為教育工作者,選擇能夠協同工作以支援學生學習的微控制器、IDE 和相關除錯工具非常重要。考慮到所有因素,我認為斷點和監視視窗是此過程的重要方面。
如果您還沒有這樣做,現在是好時機去細看 Jay Carlson 的「The Amazing $1 Microcontroller」。這文章探索了微控制器和支援基礎設施的多個方面,從而全面了解整個微控制器生態系統。
首選方案
任何支援低成本線上除錯器的平台。根據 Carlson 的建議和我自己的經驗,人們傾向於 8 位元微控制器,包括 Silicon Labs 8051 和較小的 PIC16 系列成員。ATtiny 也是新 MPLAB 支持下的有力競爭者。
解鎖週邊
圖形化週邊配置工具是程式設計師工作流程的重要組成部分。如今,幾乎每個整合開發環境(IDE)都具有這些自動化工具。這是有充分理由的。隨著微控制器週邊裝置的尺寸和複雜性激增,相關資料表的尺寸和複雜性也隨之激增。
身為教育工作者,我們需要退一步思考這些工具是否適合。關於需要關注最新的 200MHz 32位元 ARM 和使用配置工具的行業標準實踐,有一個很好的論點。然而,有一個更強有力的論點要求教導學生基本原則;教導他們與外圍配置相關的基礎知識和思考過程。
將實踐與原則分開很重要。
避免將經驗豐富的微控制器程式設計師的行為與他們的思維方式以及他們如何成為經驗豐富的專業人士的根本基礎混為一談。當自動化工具執行意外操作時(而不是如果),學生必須能夠找到並解釋規格書。
話雖如此,我建議在選擇過程中考慮規格書頁面長度。頁長度與微控制器週邊裝置的複雜度有直接關係。我想設定 100 頁的限制,但這幾乎消除了所有現代微控制器。頁長300頁比較適合。這為新手提供了一組合理但易於管理的外圍設備。
一個合理的批評是學生將耗盡資源。很公平。學生確實可能會耗盡記憶體和 I/O 引腳。然而,這可能是設備優化的一個學習機會。學生可以探索整數數學課程,以最大限度地減少程式大小。他們可以探索 PIN 復用,就像將 LCD 驅動器引腳的半位元組用作 4 x 4 按鈕矩陣中的列選擇器一樣。還有我個人最喜歡的擴展 I/O 的解決方案。雙緩衝 SN74HC595N 很好地介紹了串行操作。MCP23017-E/SP 是您實驗室的另一個可靠補充。這個特殊的 I^2C 設備延續了串列通訊的經驗,同時強化了 I/O 引腳方向的概念。
首選方案
越小越簡單越好。人們仍然偏愛 8051、PIC16 和 ATtiny。
中斷服務例程、堆疊、上下文保存和睡眠
中斷服務例程(The Interrupt Service Routine,ISR)以及相關的硬體和程式設計技術是微控制器程式設計最重要的方面。它們定義了微控制器,是高效即時處理的關鍵。掌握了這一點,學生可以準備好繼續學習更高層次的概念,例如即時作業系統(Real Time Operating System, RTOS)和進階週邊設備,例如直接記憶體存取(DMA)。不幸的是,這些抽象概念很複雜,對於新手來說並不容易理解。我們可以認為複雜度與微控制器的配置選項成正比。
讓我們考慮一下 RTOS。這是一個功能強大的基於微控制器的程式設計工具,值得研究。對 RTOS 的有意義的討論涉及上下文切換和計時器的概念。一種簡單化的方法將 RTOS 視為定期在任務之間切換的微控制器軟體。結果是微控制器似乎可以同時執行這些任務。 RTOS 透過精心設計的協定來處理上下文切換和協調的後台任務,該協定定義了每個元素的操作內容、時間和方式。
之前我們說過,沒有一個完美的微控制器。相反,選擇微控制器是為了優化給定產品的設計。對於大多數產品,我們需要像多任務功能這樣的 RTOS,但不需要或不希望與 RTOS 相關的開銷。這個問題的解決方案與微控制器本身一樣古老,並且以 ISR 的形式出現。
ISR 允許微控制器使用前台-後台調度程序進行操作。前台是 ISR,後台是 main() 中的內容。一個簡單的例子是多段七段顯示器(SSD)多工器,例如 4 段數位時鐘顯示器。 main() 中的程式可以計算要顯示的值。然後使用基於定時器的 ISR 來啟動特定段。在後台,微控制器可能大部分時間處於休眠狀態。同時,ISR 將盡職盡責地更新每個 SSD 段,以保持視覺暫留。
適合學生首次探索的其他 ISR 範例包括:
-
非阻隔定時器,提供相對精確的時間延遲
-
讀取高速正交編碼器,並將位置定期報告給串列監視器或串列繪圖儀
-
頻率測量
-
脈衝寬度測量
-
播放一首歌曲(一個計時器用於音符,另一個計時器用於音符持續時間)
-
具有確定性定時的比例或比例微分控制器(PID)
這些基於 ISR 的經典想法都不簡單。在前台和後台進程之間傳輸多位元組資訊存在重大挑戰,更不用說故障排除挑戰了。當學生學習標誌和郵箱等解決方案時,他們將為了解與 RTOS 相關的信號量和鎖定等概念做好準備。
與此相關的是,課堂時間是寶貴的資源。我們應該盡一切努力使重要的教訓從噪音中脫穎而出。做到這一點的最佳方法之一是選擇相對簡單的微控制器。較小的功能集和較小的相應規格書使學生能夠快速識別實現細節。他們不需要費力地瀏覽數十頁來探索與該想法相關的各種配置選項。目標是使想法清晰,然後透過實施可行的解決方案來學習。
首選方案
越小越簡單越好。現在,我不會完全恢復到 6 引腳 PIC10。相反,更簡單的 PIC16 系列、8051 或 ATtiny 中的產品可能更合適。
技術提示:在結束本節之前,我們應該仔細看看 8051。回想一下,PIC 有一個工作暫存器(W),AVR 有 32 個與 ALU 密切相關的 8 位元暫存器。 8051 也有 32 個 8 位元暫存器,但在任何給定時間只能存取 8 個暫存器。兩個存儲體選擇位元確定哪個八位元組可用。這允許程式設計師透過單週期指令在不同任務之間切換上下文。這種智慧解決方案對於前台-後台處理等情況非常有利。
成本
最近的世界事件改變了許多學校進行電子實驗室的方式。線上或混合課程是常態。學生通常需要購買自己的組件和測試設備。因此,我們要仔細考慮成本,不僅是微控制器,還有配套的硬體。
評估套件無疑是一種前進的方式,因為許多小型 PCB 都配備編程器,有些還配有整合的線上除錯器。前面提到的 Nucleo 、Curiosity 和 Busy Bee 都是代表性的例子。這些很容易使用,但它們是一次性產品。
作為替代方案,學生可以購買功能齊全的外部除錯器。對於 2 或 3 個評估板的大致成本,他們可以購買除錯器和一些備用微控制器。例如 SiLabs的「USB 除錯適配器」或 MPLAB SNAP。 Microchip 的優點在於它可以對 PIC 和 AVR 裝置進行程式設計。
從教育的角度來看,對於學生來說,將微控制器直接連接到除錯器是有道理的。這使他們能夠更好地了解相關的程式設計 I/O 引腳如何與其他裝置共用或不共用。該聲明也適用於為微控制器供電。所學到的課程將使學生能夠從頭開始建立具有微控制器、除錯器接頭和適當電源的 PCB。
首選方案
沒有改變,我們仍然偏向小型 PIC16 系列、8051 和 ATtiny。
技術提示:ATtiny 的精選成員可以使用 Arduino 作為編程器進行編程。雖然從成本角度來看這是理想的,但該系統缺乏線上除錯功能。
教材和論壇資源
本文支援使用 8051 等微控制器以及 PIC 和 AVR 系列的較小成員。這些設備並不新鮮。8051 及其衍生產品可以追溯到1980 年,PIC 可以追溯到1976 年。AVR 是一個相對較新的設備,其歷史可以追溯到 1996 年。這些設備很可能比您更老,當然也比您的大多數學生更老。這是好消息還是壞消息取決於您如何看待情況。
首先,我們需要認識到這些 8 位元微控制器的持久使用壽命。他們已經並且可能與我們同在數十年。這是它們仍然具有相關性和研究價值的另一種說法。考慮一下 8051,當我訪問 Keil 處理器支援的設備頁面時,我總是印象深刻。Keil 5 支援的晶片清單。 8051 衍生品清單隨著大膽的新功能而成長!展示每一位新品。
接下來,我們需要認識到幾十年來已經產生了大量的相關材料。其中大部分內容仍然與當今的 8 位元產品相關。有各種各樣的論壇,例如已經活躍了二十多年的 AVRReaks。以下是相關論壇的簡短清單:
有一些壞消息。部分原因在於實踐與原則分離的問題。
聲稱微控制器教育解決方案是在具有 50 年歷史的部件中找到的,其架構老化且功能有限,這是有風險的。雖然我相信這個論點是令人信服的,但這並不是一個受歡迎的解決方案。相反,我們發現人們對 Arduino 等平台和 32 位元 ARM、RTOS 和 Python 等高效能解決方案給予了極大的關注。這確實為教材選擇帶來了挑戰。然而,快速搜尋就會發現,即使出版日期已有 10 到 20 年之久,仍有許多選擇。
製造商通常會降低教科書的可用性。Microchip 大學就是這樣的資源之一。我們已經提到了各種技術論壇。影片可用。許多都是知識教授的高品質作品。如果學生認真認真地學習,人工智慧可能會成為一個有用的工具。
完結前的感想
完結前,我鼓勵您分享您對這個主題的想法。您是否同意近 50 年歷史的微控制器架構是高階主題的基礎?動手原型製作的平衡是否合適?有更好的方法嗎?我們忽略了什麼?