上週在uFUN試用羣裏看到管理員說試用活動快結束了,要抓緊完成評測總結,看你們的評測總結也都寫了,我也不能落後啊!正好最近作的擴展板到手了,因而趕忙進行調試,作了一個不用校準的時鐘,時鐘這種小設計應該說是爛大街了吧!我一開始學習51的時候作了個可按鍵校準、帶鬧鐘功能的時鐘,學習STM32的時候作了個能夠手機藍牙APP校準的時鐘,如今又用uFUN開發板作了個時鐘,不過這個時鐘是聯網校準的。因爲以前作過桌面天氣預報時鐘,以下圖:html
因此這個聯網校準時鐘的小項目實現起來仍是很順利的,底板是使用的uFUN開發板,擴展板是本身設計的,使用PCIe的接口和uFUN開發板進行通信。使用ESP8266 WiFi模塊獲取北京標準時間,而後對STM32內部的RTC進行校準,再經過OLED顯示出來。我知道,這個小項目不管是PCB的設計,仍是控制程序的編寫,對於論壇裏一些有着多年經驗的大佬來講,這個小項目簡直不值一提,我只不過是班門弄斧罷了。有不對的地方,歡迎各位大佬拍磚!算法
從uFUN的原理圖能夠看出,PCIe擴展口中有5v電源,數字地,模擬3.3v,模擬地,而沒有引出數字3.3v電源,爲了避免干擾模擬3.3v,擴展板的3.3v電源來自5v通過AMS117穩壓,AMS117-3.3是一款比較經常使用的LDO電源芯片,最大可提供1A的輸出電流,對於擴展板來講是足夠用了。json
OLED外圍電路,參考中景園官方推薦的電路,使用的是IIC接口,由於以前沒用過IIC總線掛載多個從機,爲了不調不通,因此OLED的IIC接口使用了獨立的管教,同時上拉4.7K電阻。api
W25Q128是採用的SPI通信協議,正好擴展接口中有SPI接口,因此就用了STM32的硬件SPI2接口,固然也能夠軟件模擬。服務器
實際上焊接的是ST公司的M24C64,目前讀寫還沒調通,和底板的LIS3DH共用一組IIC總線。微信
正好上次作板子,買的SHT20還剩幾片,因此在這個擴展板上,也使用了這款傳感器,這款數字溫溼度傳感器體積很是小,只有3*3*1.1mm,和底板的LIS3DH共用一組IIC總線,後面調試正常,能夠獲取到溫溼度數據。網絡
偶然發現HC-05和原子的ESP8266模塊接口幾乎同樣,因此這部分設計成了兼容兩種模塊的接口,以下圖:app
4路LED都鏈接到了STM32的定時器輸出通道,能夠用來控制亮度,另外也充分利用了擴展口留出的模擬電源和模擬地,經過簡單的分壓原理,能夠把光照強度轉換爲AD電壓值,還增長了OLED模塊接口和DHT11溫溼度傳感器接口。佈局
SHT20官方推薦的放置方式是在板子邊緣挖個島出來,而後把傳感器放進去,這樣能最大程度的減小板子熱量的傳遞,從而提升精度,可是,因爲擴展板面積較小,再挖個島出來,看着太難看了,就沒有挖。學習
板子的總體結構圖來自於前一段時間,@張進東 張工在uFUN試用羣裏分享的AD版本的PCB圖,那個圖是這樣的:
我進行了稍微的修改,把安裝孔右邊多餘的部分去掉了,並且爲了和底板一致,我把擴展板改爲了圓角,可是接口和安裝孔的相對位置沒動,板子的TOP面:
電阻電容封裝的選擇上,一開始以爲板子空間比較小,怕放不下全部的元器件,幾乎全部的電阻和電容都選擇了0402封裝,同時也出現了一個比較尷尬的事,就是有1種電容和1種電阻,嘉立創SMT的基礎庫裏沒有,擴展庫裏纔有,而若是使用擴展庫裏的元件,須要加每種20元的換料費,因此最終打板多花了40元,這一點也是我沒有考慮到的。等投板以後,我又嘗試着把全部的電阻電容封裝都換成0603的,發現也能放得下。
元件佈局方面,爲了防止元器件放在背面和底板的部分元件衝突,同時也爲了知足嘉立創只能單面貼片的工藝要求,我把全部的元件都放在了TOP面,BOTTOM面只放了OLED裸屏的接口,爲了方便鏈接外部的模塊,把接口都放在了板子的邊緣,LED也放在了板子邊緣,因爲SHT20是DFN封裝,爲了方便後面使用風槍進行焊接,周圍留出了一點空間。
板子的BOTTOM面:
3D效果顯示
我用的是AD9版本,3D效果渲染的仍是挺不錯的。
不知道今年是否是板材降價了,各大PCB板廠都在降價,去年作畢業設計的板子時仍是50元5片10*10cm之內,今年就是30元5片10*10之內,並且連彩色油墨費都不收了。PCB打樣和SMT貼片仍是選擇了以前用過的嘉立創,5片全貼,一共花了191大洋!生產工藝方面時,因爲嘉立創只支持綠油進行SMT,因此只能用看着比較LOW的綠色油墨,其實我更喜歡藍色油墨,並且和底板很搭!其餘的工藝如過孔蓋油、有鉛噴錫,因爲只是樣板,就沒有選擇鍍金工藝了,因此金手指成了錫手指,外加倒斜邊,倒斜邊是金手指板卡經常使用的一種工藝,是爲了可以方便的插到插槽裏面。還要注意很是很是重要的一點:PCB板的厚度,其實這個我一開始設計的時候就考慮過,使用以前作的1.6mm的板子試着往裏面插了一下,發現根本插不進,網上也沒搜到PCIe的板子應該作多厚,因此就選擇了比1.6稍微薄一點的1.2mm厚度。詳細的生產工藝:
PCB生產進度和SMT進度:
因爲板子比較簡單,從下單到發貨大概用了3天的時間吧,實際的樣板圖片:
板子拿回來一插,發現仍是稍微厚了點,不能徹底插進PCIe座裏面,並且底板的銅柱還不能對準擴展板的安裝孔。
後來請教了 @張進東 張工,原來只須要1.0mm就夠了,斜着插進去往下一壓,再用銅柱固定就行。不過我用暴力手段解決了一下,直接用剪刀剪掉了一段金手指,還好金手指上面的銅箔沒有掉,這樣才勉強能用一個螺絲固定好,安裝效果如文章第一張圖:
就這麼不完美的解決了,不過仍是有幾個管腳接觸不良,如DHT11接口的那個引腳,稍微鬆動一點就不能用,不過已經板載了溫溼度傳感器,倒也影響不大。而後就試着點亮了OLED屏,先顯示個uFUN的LOGO吧:
到這裏以爲應該沒啥問題了吧,開始調試WiFi接口,使用的是引出的串口3來和WiFi模塊進行通信,因爲以前的程序是用的串口2,因此又稍微改了一下,調了半天,仍是不通,就把一樣的程序下載到其餘板子上,沒問題啊!難道是接觸很差,最後一查,是uFUN的原理圖中PB10和PB11的網絡標號也反了,致使擴展板的TX和RX反了,這可怎麼辦呢?
又捨不得浪費板子啊!因此把原來TX和RX鏈接的兩根線割斷,從新飛了兩根線,完美解決!這線飛的可沒有uFUN開發板上的那根飛線漂亮!
另外,擴展板IIC總線上的24C02讀寫一直沒調通,不知道是物料的問題仍是讀寫時序的問題,而同是IIC總線上的SHT20溫溼度傳感器就沒問題。另外因爲本項目中沒有用到過多的中文,因此SPI Flash也沒用到。
多是因爲字庫文件沒有進行精簡,因此整個程序佔用了很是多的空間,老是報內存不足的錯誤,爲了能跑起來,我把單片機型號改爲了STM32F103RE系列,因爲RE系列比RC系列的存儲空間要大的多,並無報錯誤,並且程序能夠正常運行,雖然都是大容量產品,程序能夠兼容,但這是一種很是不推薦的方式。
實現原理就是:STM32驅動ESP8266 GET北京時間的接口,獲得一串JSON數據,而後STM32調用cJSON庫進行解析,獲取到時間信息,而後把這個時間信息寫入到RTC寄存器,STM32內部RTC從當前時間開始運行,而後顯示到OLED屏上,程序中設置的是每隔10分鐘,獲取一次時間。北京標準時間的來源使用了K780數據的API接口,地址:http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json
,是JSON格式的,數據的解析使用了開源的JSON解析庫cJSON,只有兩個文件,使用起來仍是比較簡單的。
關於JSON格式的說明和cJSON庫的使用,能夠參考我以前寫的兩篇文章:
不少API接口的數據格式都是JSON格式的,如我以前作的桌面天氣預報時鐘,使用的是心知天氣的數據源,就是JSON格式,網上也有不少免費的API接口,能夠作出不少好玩的東西,就看你的想象力了!
這算是這個程序最大的一個BUG吧,雖然uFUN開發板有超級電容備用電池接着,但一直沒調通斷電走時的功能,這種狀況帶來的一個問題就是,若是不插WiFi模塊的狀況下從新上電,是不能從上次保存的時間繼續運行的。
爲了能讓程序運行起來,把單片機改爲大容量型號,應該從根本上精簡字庫,優化程序大小。
偶爾會出現發送GET請求,接收不到數據的狀況,多是內存分配的問題。
這個小項目總得來講,硬件調試方面比較坎坷,又是飛線,又是割板子的。而軟件調試方面,因爲以前作過相似的設計,因此仍是比較順利的。因爲評測活動的時間關係,本次評測的大做業我只作了這個簡單的聯網校準時鐘。其實,有了WiFi/藍牙模塊接口和OLED屏,就能夠作不少好玩的東西了,好比選擇一個開放的雲平臺,如中移OneNET等等,而後和雲臺進行一些交互,如採集溫溼度上傳到雲平臺作個溫溼度遠程監測系統,或者是遠程控制LED或者蜂鳴器,桌面天氣預報等。下面這幾個界面是我去年在學校時,使用中移OneNET雲平臺作的一些界面:
對於uFUN開發板的總體評測過程來講,雖然配套的文檔存在一些瑕疵,在以前的評測文章中,我也都有提到,可是不影響新手入門STM32,何況論壇裏還有那麼多的入門教程,也但願個人這些評測文章能對那些剛入門STM32的小夥伴們有一些幫助,少走一些彎路。聽說2.0版本的開發板已經在進行緊鑼密鼓的開發中了,固然,若是能有幸獲得2.0版本開發板的使用機會,我會試着作一些遠程控制相關的小項目。期待ing。。。。
歡迎你們關注個人我的博客:www.wangchaochao.top
或微信掃碼關注個人公衆號