工欲善其事必先利其器。單片機的學習不僅需要書本的理論知識,更需要實際操作的硬體平臺,否則一切是都是空中樓閣。除了硬體平臺,還需軟體開發工具,用於軟體開發的有 Keil、IAR 等。開發好的程序,還需下載器將其程序下載到 Flash 中,這時還需要下載器。同樣,當我們在項目開發中,還會遇到各種各樣的問題,此時還需調試器。
OWL Micro F1 開發板,是『芯知識學堂』成立以來,推出的首款開發板,主控晶片採用了ST 的STM32F103C8T6 這款處理器,板載詳細功能如下圖所示:
◆傳感器接口:
板載接口默認使用搭載了MLX90614 這款紅外測溫傳感器的GY-906 模塊,從板子背面直接連接,但是考慮到目前MLX90614 這款傳感器的短缺,以及方便後續用戶做其他實驗,特意預留了4 路ADC 接口。這裡需要說明一下,此處的PA0、PA1、PA2、PA3、SCL2、SDA2 和板子兩側的單排針上的PA0、PA1、PA2、PA3、PB10、PB11 引腳是連在一起的,詳見原理圖。
傳感器接口的電源部分,通過一個P-MOS 管SI2301 來作為傳感器電源的控制開關,圖中SI2301 的1 腳為G 極(門極),2 腳為S 極(源極),3 腳為D 極(漏極)。
這裡,我們需要明白P-MOS 管導通和截止的條件是:當P-MOS 管的G 極與S 極中間的電壓差低於閾值時,P-MOS 管的S 極和D 極就會導通;反之,P-MOS 管的S 極和D極就會截止。
根據P-MOS 管的工作原理:
當STM32 的GPIO 口輸出低電平時,P-MOS 管SI2301 的GS 電壓差為VGS=-3.3V,此時,SI2301 處於導通狀態;
當STM32 的GPIO 口輸出高電平時,P-MOS 管SI2301 的GS 電壓差為VGS=0V,此時,SI2301 處於截止狀態;
◆ BOOT 設置:
STM32F103 有多種啟動模式可以選擇。啟動模式的理解是:微控制器允許從「不同地址」,比如內部Flash(最常用)、RAM、系統代碼,讀取程序指令並執行,這個「不同地址」的選擇是通過在為晶片供電(上電)後晶片會自動讀取BOOT0 和BOOT1 引腳電平高低來決定的。這裡的「不同地址」實際上是通過地址映射來實現,晶片總是從啟動存儲區開始執行程序的。舉個類似的例子來幫助簡單理解,比如,打聽對應存儲區0,存放了一個房號,這個房號就是由BOOT0 和BOOT1 引腳決定的;房間1 對應內部Flash,房間2 對應RAM,房間3 對應系統代碼,在晶片上電時會現在大廳獲取房號,然後找到對應房號,並執行對應的程序。
開發板通過排針+短接帽來配置BOOT0 和BOOT1,硬體原理圖如下圖所示:
當B0/B1 與PCB 板上的H 短接時,就意味著將B0/B1 上拉,此時B0/B1 為高電平(1);
當B0/B1 與PCB 板上的L 短接時,就意味著將B0/B1 下拉,此時B0/B1 為低電平(0);
STM32F103 的啟動模式和BOOT0、BOOT1 的關係如下表所示:
一般程序都是存儲在Flash 空間的,默認在Flash 啟動運行;ISP 模式用於直接使用USB 線進行串口下載;RAM 主要用於調試(需要先配置相關資源)。
◆ SWD 下載接口
STM32 支持JTAG 和SWD 兩種調試接口,這兩種接口在調試功能上並沒有差異。JTAG 接口是ARM 早期的調試接口標準,需要20 個引腳。SWD 接口只需要6 個引腳。我們的開辦板僅支持SWD 調試接口(5 腳),不支持JTAG 接口。
◆ 復位按鍵
微控制器一般有軟體復位和硬體復位兩種方法,STM32F103 硬體復位信號為低電平有效,一般加上拉電阻(即另一端為高電平),保證一般情況下為高電平,如下圖所示:
◆ RGB 三色燈
流水燈一直低入門學習微控制器的最簡單、最經典的例子,體現了微控制器最基本的功能:控制引腳輸出高低電平。此開發板上搭載了一顆RGB 三色燈,三色燈採用共陽極接法,正極接到了3.3V,負極通過一個限流電阻接到了STM32F103 的GPIO 口上,只要控制STM32F103 的對應引腳輸出低電平,就能點亮對應的燈,輸出高電平,就能關閉對應的燈。通過一定的邏輯組合,就能實現流水燈的效果。
◆ 功能按鍵
類似RGB 燈,幾乎每個開發板都有集成獨立按鍵,因為從測試代碼功能也好,實際應
用也好,按鍵用處多多。此開發板也不例外,板載了4 個功能按鍵可供用戶使用。普通按鍵按下和彈開瞬間都有抖動過程,如下圖所示:
按鍵抖動過程一般為5ms-10ms,有了抖動就需要消抖,不然很容易造成誤操作。消抖方法可分為:硬體消抖和軟體消抖。軟體消抖在後續的軟體部分會做相應的介紹,此處主要是介紹硬體消抖。此開發板按鍵部分主要通過一個上拉電阻和一個電容組成硬體消抖電路,其原理圖及實物圖如下:
◆ 可充電備用電池
備用電池的作用主要是在STM32 斷電時保持內部RTC 始終正常運行,否則斷電後RTC數據會丟失,重新啟動後又從默認時間重新開始計數。一般開發板上都會帶有一個備用電池,常用的要數CR1220 這款紐扣電池了。由於我們板子空間比較緊湊,所以我們在選擇備用電池的時候,也考慮到了電池的尺寸,從而選擇了MS621 這款容量為5.5mAh 的可充電的鋰電池來作為STM32 的備用電池,其工作電路及實物圖如下圖所示:
當外部電壓3.3V 存在時,外部3.3V 通過限流電阻R13 和整流二極體D5 給STM32 的VBAT 供電,同時也可以給MS621 充電。當外部3.3V 段開始,STM32 的VBAT 引腳由MS621 供電。
◆ OLED 接口
OWL Micro F1 開發板設計了一個OLED 模塊的接口,接口的通信方式是IIC 通信,同傳感器接口的電源一樣,OLED 模塊的電源部分也採用了一個P-MOS 管SI2301 來作為OLED 模塊電源的開關,控制原理前面已經講過,這裡就不再贅述了。為了能夠更好的支撐OLED 模塊,在OLED 接口的正對面設計了一個4PIN 的排母,這個排母的所有引腳都接到了GND 上,可供用戶做實驗時用。
OLED 模塊選用的是中景園電子的0.91 寸的OLED 模塊,IIC 接口、解析度為128*32像素。實物圖如下:
關於OLED 模塊的使用,在後續軟體部分會詳細介紹,在這裡就不再做介紹了。
◆無源蜂鳴器
在單片機應用的設計上,很多方案都會用到蜂鳴器,大部分都是使用蜂鳴器來做提示或報警,比如按鍵按下、開始工作、工作結束或是故障等等。
有源蜂鳴器直接接上額定電源就可以聯繫發聲;而無源蜂鳴器則和電磁揚聲器一樣,要在音頻輸出電路中才能發聲。
有源蜂鳴器和無源蜂鳴器的區別(注意:這裡的「源」不是指電源,而是指震蕩源。):
有源蜂鳴器內部帶有震蕩源,所以只要一通電就會叫;無源蜂鳴器內部不帶震蕩源,所以如果用直流信號無法令其鳴叫,必須使用一定頻率的方波去驅動它(一般頻率為2kHz-5kHz);有源蜂鳴器一般比無源蜂鳴器貴,主要是因為內部多了個震蕩電路。
此開發板上集成了一個無源蜂鳴器,電路設計參考圖如下:
由於蜂鳴器的工作電流一般比較大,以至於STM32 的GPIO 口是無法直接驅動的,所以要利用放大電路來驅動,一般使用三極體來放大電流就可以了。
三極體的基極必須串接電阻,保護基極,即保護STM32 的GPIO 口。
基極和發射極需要串接電阻,即R11 電阻,該電阻的作用是在輸入呈高阻態時使三極體可靠截止,放置三極體受噪聲信號的影響而產生誤動作。三極體的基極不能出現懸空,當輸入信號不確定時,加下拉電阻,就能使其有效接地。
D4 1N4148 二極體的作用主要是續流,因為蜂鳴器是感性元件,當感性元件突然斷電時會產生很大的反向感應電動勢,可能會對電路中的其他電子元件造成損傷,因此,並聯該二極體的目的是旁路掉此感應電動勢,起保護作用。
◆鋰電池充電電路
OWL Micro F1 開發板搭載了一顆「單節鋰電池充放電管理」的晶片TC4056A,它是一款完整的單節鋰電池採用恆定電流/恆定電壓線性充電器,關於該晶片的詳細參數,大家可以查閱手冊,這款晶片的主要特點包括電池溫度檢測、欠壓閉鎖、自動再充電和兩個用於指示充電、結束的LED 狀態引腳,可編程充電電流可高達1000mA。
鋰電池的充電管理電路如下圖所示:
上圖中,D3 主要是用來指示鋰電池的充電狀態,插入USB 時,在TC4056A 的作用下,開始給鋰電池充電,指示燈D3 常亮,當鋰電池充滿時,D3 常滅。R15 是用來限定TC4056A 的最大充電電流,根據公式:IBAT=(VPROG/RPROG)*1200,其中,VPROG在預充電階段時的電壓為0.1V,此時電流IBAT=(0.1/1200)*1200=0.1A;VPROG在恆流充電階段時的電壓為1V,此時電流IBAT=(1/1200)*1200=1A。
由於鋰電池我們採用了自帶保護板的鋁包電池,所以我們在板子上沒有再增加充電保護電路了,如果大家在更換電池的時候一定要注意選擇帶保護板的電池,否則有可能發生意想不到的事情。
◆升壓電路
考慮到我們的OWL Micro F1 板子需要適應一些鋰電池供電的應用,而標稱為3.7V 的鋰電池的電壓範圍實際一般在3.0V-4.2V,而對絕大部分常用的LDO 或者DC-DC 電源晶片來說,如果需要得到穩定的3.3V 輸出電壓,那麼輸入電壓必須要比3.3V 高出至少100mV以上,這樣的話,鋰電池電壓低於3.4V 的時候就不能得到穩定的3.3V 電壓了,可能會造成某些元器件不能正常工作。
因此,我們OWL Micro F1 開發板在電路設計的時候,採用了先升壓、再降壓的方案。當然咯,也許也有人會有疑問,這裡為什麼不直接用一款內部集成了同步升壓、降壓一體的電源晶片,這樣豈不是更省事?這樣做確實沒毛病,也省事,但是,我們之所以選擇先升壓、再降壓的方案,也是為了得到一個常用的電壓—5V 電壓,這樣的話,用戶在做別的實驗需要用到5V 的時候,就會很方便了有木有?
那麼,我們先來看一下鋰電池升壓到5V 的電路:
升壓晶片採用的是SDB628,這款晶片的輸入電壓範圍為2-24V,最高輸出電壓為28V、最大輸出電流為2A,更多詳細參數請大家查閱晶片手冊。
這款晶片的可調節輸出電壓的公式為:VOUT=VREF*(1+R1/R7),其中VREF 的典型值為0.6V,那麼根據原理圖我們可以得到輸出電壓VOUT=0.6V*(1+88.7K/12K)=5.035V。大家如果需要其他的電壓,只需根據公式計算,改變R1 和R7 的值就好了。
另外值得說一下的是,在鋰電池的輸出端,我們增加了一個P-MOS 管SI2301 用來作為鋰電池輸出的開關,細心的小夥伴們可能發現了,同樣是SI2301,但是用法似乎跟之前傳感器電源控制和OLED 電源控制有點不一樣了,難道是我們設計錯了嗎?
其實,我們這裡並沒有設計錯,只是換了一下用法,且聽筆者分析一下這部分的工作原理,大家就明白了。
當外部USB 插入時,MOS 管SI2301 的1 腳(G 極)和2 腳(S 極)之間的電壓差等於SS34 兩端的電壓,只有零點幾伏,並未滿足SI2301 的D 極和S 極導通的條件,所以此時鋰電池僅處於充電狀態,並未放電,後極電路的電源完全由外部USB 提供,也就是說,外部USB 在給鋰電池充電的同時,也在為後極電路供電;
當外部USB 拔掉時,MOS 管SI2301 的1 腳(G 極)在下拉電阻R33 的作用下,被拉低到了GND,此時MOS 管SI2301 的2 腳(S 極)的電壓也幾乎為GND 電壓,MOS 管SI2301 的D 極和S 極是處於未導通狀態的,但是,由於MOS 管SI2301 內部寄生二極體的作用,導致了MOS 管SI2301 的D 極和S 極之間直接形成了通路,這樣又使得MOS 管SI2301 的2 腳(S 極)的電壓接近了電池的輸入電壓,而其1 腳(G 極)在下拉電阻的作用下被拉低到了GND 處電壓,於是G極和S 極的電壓差又產生了,而且這個電壓差高於SI2301 的G 極閾值,從而又導致MOS 管SI2301 的D 極和S 極導通了。
看了這個電路的工作原理,相信大家不會再質疑這部分的電路有問題了吧!?另外,圖中的J6 實際上是用一個短接帽連起來的,這裡主要是為了在做低功耗應用測迴路電流的時候提供了方便,其他也沒有什麼太大的用處。
◆ 降壓電路
OWL Micro F1 開發板的降壓部分,採用的是ME6211C33M5G 這款LDO,這款LDO的輸入最大電壓為6V,輸出電壓為固定3.3V,輸出最大電流為500mA。封裝採用的是SOT-23-5,也是比較省空間的,應用原理圖如下圖所示:
PCB 板上的5V 和3.3V 均設置了指示燈,分別為上圖中的D7 和D8,在板子上的位置如下:
◆ 電池電量檢測
OWL Micro F1 開發板上電池電量的檢測主要採用比較粗糙的直接測電池電壓的方法,這種方法相對一些專用的電量晶片來說,還是比較簡單,但是並不能檢測到電池的真實電量,主要應用在對電池電量檢測精度要求不高的場合。
我們是直接將兩個電阻分壓後電壓送入到STM32 的AD 口進行採集,計算出分壓後的電壓,然後再通過分壓比例,計算出電池的電壓。開發板上電池的電壓為AD 口採集到的電壓的2 倍。
◆ 外部時鐘電路
時鐘是微控制器的脈搏,重要性可想而知,微控制器都需要一個基本的時鐘節拍,即時鐘基準,不然會導致時序錯亂,完全亂套了,系統就崩潰了。一般,我們需要為STM32F103 晶片提供一個外部時鐘源,一般使用8MHz 的無源石英晶振,如下圖所示:
實際上,STM32F103 晶片內部也有一個主時鐘源,也是8MHz 的,但是一般我們不使用,而是使用外部晶振,主要是處於穩定性的考慮。另外,為使用RTC(實時時鐘、萬年曆)還需要提供32.768 KHz 的時鐘源,由於晶片內部提供時鐘是32KHz,不是2 的N 次方,無法得到準確的時間,所以,為得到精準的時間,我們需要用外部的32.768 KHz 的晶振,電路設計如下圖所示:
◆ 串口下載/調試
OWL Micro F1 開發板上集成了一顆USB 轉TTL 電平的晶片CH340E,有了這款晶片,用戶可以直接使用ISP 串口下載程序,同時也可以用來做串口通信的實驗。CH340E 的應用電路如下圖所示:
CH340E 這款晶片的外圍電路相比於其他同類型晶片來說,簡直是簡單的不要不要滴!
在進行ISP 下載時,我們首先要將BOOT0 設置為高電平,BOOT1 設置為低電平,即:將板子上的B0 跟H 短接,B1 跟L 短接,這樣STM32F103 就可以進入ISP 下載模式了,如下圖所示:
注意,這裡我們講的是「可以進入」而事實上並不會馬上進入ISP 下載模式,因為,只有系統復位後MCU 才會讀取BOOT 引腳電平,才會決定啟動模式。所以,在對STM32F103 進行ISP 下載的時候,需要對STM32F103 進行一次手動復位。我們的開發板上給大家設計好了復位按鍵,可以讓大家很方便的對STM32F103 進行復位。
我們可以通過FlyMcu 這款免費的軟體,來對STM32F103 進行程序的下載,軟體界面如下圖所示:
ISP 下載操作流程如下:
插入USB 線,並跟電腦連接,安裝好CH340 的驅動;打開FlyMcu 軟體,搜索串口,然後找到我們的設備COM 口號;加載程序的hex 文件;在STMISP 選項中點擊「開始編程」;在出現「開始連接」提示後,手動按下開發板上的「復位」按鍵;
等待FlyMcu 軟體出現如下字樣時,說明程序下載成功:
程序下載成功後,再將BOOT0 設置為0,BOOT1 設置為0,並給板子復位或者重新上電,程序就能正常執行了。