以下文章來源于電子電路開發學習 ,作者wcc149
項目概述:
之前在uFUN試用群里看到管理員說試用活動快結束了,要抓緊完成評測總結,看大家的評測總結也都寫了,我也不能落后啊!正好最近做的擴展板到手了,于是趕緊進行調試,做了一個不用校準的時鐘,時鐘這種小設計應該說是爛大街了吧!
我一開始學習51的時候做了個可按鍵校準,帶鬧鐘功能的時鐘,學習STM32的時候做。了個可以手機藍牙APP校準的時鐘,現在又用uFUN開發板做了個時鐘。不過,時鐘這個的英文聯網校準的由于之前做過桌面天氣預報時鐘,如下圖所示:
所以,這個聯網校準時鐘的小項目實現起來還是很順利的,底板是使用的uFUN開發板,擴展板是自己設計的,使用PCIe的接口和uFUN開發板進行通訊。使用ESP8266 WiFi模塊獲取北京標準時間,然后對STM32內部的RTC進行校準,再通過OLED顯示出來。
我知道,這個小項目無論是PCB的設計,還是控制程序的編寫,對于論壇里一些有著多年經驗的大佬來說,這個小項目簡直不值一提,我只不過是班門弄斧罷了。有不對的地方,歡迎各位大佬拍磚!
擴展板資源簡介:
0.96寸OLED屏,IIC接口,128 * 64像素,通過外部電路的修改,可支持8080并口,SPI接口。
W25Q128,SPI接口,可以用來存儲字庫,配合uFUN開發板的SD卡功能,可以實現字庫的更新
AT24C02,EEPROM,IIC接口,掉電不丟失,可以用來保存一些用戶數據
SHT20,IIC接口溫濕度傳感器。
5個LED,1個電源指示,4個用戶LED,這四個LED都連接到了定時器的通道,可通過PWM占空比控制亮度
1個光敏電阻,把光照強度轉換為AD電壓值,可以實現根據外界亮度控制OLED屏的亮度。
1個OLED模塊接口,可外插IIC接口的OLED模塊
藍牙/ WiFi的模塊兼容接口設計,可支持HC-05藍牙模塊,或者是原子的ESP8266模塊。
1個DHT11溫濕度傳感器模塊接口
擴展板原理圖設計:
從uFUN的原理圖可以看出,的PCIe擴展口中有5V電源,數字地,模擬3.3V,模擬地,而沒有引出數字3.3V電源,為了不干擾模擬3.3V,擴展板的3.3V電源來自5V經過AMS117穩壓,AMS117-3.3是一款比較常用的LDO電源芯片,最大可提供1A的輸出電流,對于擴展板來說是足夠用了。
OLED電路
OLED外圍電路,參考中景園官方推薦的電路,使用的是IIC接口,因為之前沒用過IIC總線掛載多個從機,為了避免調不通,所以OLED的IIC接口使用了獨立的管教,同時上拉4.7K電阻。
W25Q128電路
W25Q128是采用的SPI通訊協議,正好擴展接口中有SPI接口,所以就用了STM32的硬件SPI2接口,當然也可以軟件模擬。
AT24C02電路
實際上焊接的是ST公司的M24C64,目前讀寫還沒調通,和底板的LIS3DH共用一組IIC總線。
SHT20電路
正好上次做板子,買的SHT20還剩幾片,所以在這個擴展板上,也使用了這款傳感器,這款數字溫濕度傳感器體積非常小,只有3 * 3 * 1.1mm,和底板的LIS3DH共用一組IIC總線,后面調試正常,可以獲取到溫濕度數據。
無線藍牙兼容接口
偶然發現HC-05和原子的ESP8266模塊接口幾乎一樣,所以這部分設計成了兼容兩種模塊的接口,如下圖所示:
4路LED都連接到了STM32的定時器輸出通道,可以用來控制亮度,另外也充分利用了擴展口留出的模擬電源和模擬地,通過簡單的分壓原理,可以把光照強度轉換為AD電壓值,還增加了OLED模塊接口和DHT11溫濕度傳感器接口。
擴展板PCB設計:
結構的設計
SHT20官方推薦的放置方式是在板子邊緣挖個島出來,然后把傳感器放進去,這樣能最大程度的減少板子熱量的傳遞,從而提高精度,但是,由于擴展板面積較小,再挖個島出來,看著太難看了,就沒有挖。
板子的整體結構圖來自于前一段時間,@張進東張工在uFUN試用群里分享的AD版本的PCB圖,那個圖是這樣的:
我進行了稍微的修改,把安裝孔右邊多余的部分去掉了,而且為了和底板一致,我把擴展板改成了圓角,但是接口和安裝孔的相對位置沒動,板子的TOP面:
封裝的選擇
電阻電容封裝的選擇上,一開始覺得板子空間比較小,怕放不下所有的元器件,幾乎所有的電阻和電容都選擇了0402封裝,同時也出現了一個比較尷尬的事,就是有1種電容和1種電阻,嘉立創SMT的基礎庫里沒有,擴展庫里才有,而如果使用擴展庫里的元件,需要加每種20元的換料費,所以最終打板多花了40元,這一點也是我沒有考慮到的。等投板之后,我又嘗試著把所有的電阻電容封裝都換成0603的,發現也能放得下。
元件的布局布線
元件布局方面,為了防止元器件放在背面和底板的部分元件沖突,同時也為了滿足嘉立創只能單面貼片的工藝要求,我把所有的元件都放在了TOP面,BOTTOM面只放了OLED裸屏的接口,為了方便連接外部的模塊,把接口都放在了板子的邊緣,LED也放在了板子邊緣,由于SHT20是DFN封裝,為了方便后面使用風槍進行焊接,周圍留出了一點空間。
板子的BOTTOM面:
3D效果顯示:
我用的是AD9版本,3D效果渲染的還是挺不錯的。
PCB的打樣和調試:
不知道今年是不是板材降價了,各大PCB板廠都在降價,去年做畢業設計的板子時還是50元5片1010cm以內,今年就是30元5片1010以內,而且連彩色油墨費都不收了。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,只有兩個文件,使用起來還是比較簡單的。
主要功能:
STM32 RTC的使用。
OLED的驅動,支持68 ASCII碼顯示,816 ASCII碼顯示,16*32數字0-9和冒號:的顯示,漢字“周一二三四五六日”的顯示。
ESP8266的驅動,和北京標準時間服務器接口建立TCP連接。
cJSON庫解析接收的JSON數據,獲取北京時間,年月日,時分秒。
關于JSON格式的說明和cJSON庫的使用,可以參考我之前寫的兩篇文章:
使用cJSON庫解析JSON
JSON簡介
很多API接口的數據格式都是JSON格式的,如我之前做的桌面天氣預報時鐘,使用的是心知天氣的數據源,就是JSON格式,網上也有很多免費的API接口,可以做出很多好玩的東西,就看你的想象力了!
不足之處:
斷電不能走時
這算是這個程序最大的一個BUG吧,雖然uFUN開發板有超級電容備用電池接著,但一直沒調通斷電走時的功能,這種情況帶來的一個問題就是,如果不插WiFi模塊的情況下重新上電,是不能從上次保存的時間繼續運行的。
程序不夠精簡
為了能讓程序運行起來,把單片機改成大容量型號,應該從根本上精簡字庫,優化程序大小。
GET請求偶爾會失敗
偶爾會出現發送GET請求,接收不到數據的情況,可能是內存分配的問題。
總結:
這個小項目總得來說,硬件調試方面比較坎坷,又是飛線,又是割板子的。而軟件調試方面,由于之前做過類似的設計,所以還是比較順利的。由于評測活動的時間關系,本次評測的大作業我只做了這個簡單的聯網校準時鐘。
其實,有了WiFi/藍牙模塊接口和OLED屏,就可以做很多好玩的東西了,比如選擇一個開放的云平臺,如中移OneNET等等,然后和云臺進行一些交互,如采集溫濕度上傳到云平臺做個溫濕度遠程監測系統,或者是遠程控制LED或者蜂鳴器,桌面天氣預報等。
下面這幾個界面是我去年在學校時,使用中移OneNET云平臺做的一些界面:
對于uFUN開發板的整體評測過程來說,雖然配套的文檔存在一些瑕疵,在之前的評測文章中,我也都有提到,但是不影響新手入門STM32,況且論壇里還有那么多的入門教程,也希望我的這些評測文章能對那些剛入門STM32的小伙伴們有一些幫助,少走一些彎路。據說2.0版本的開發板已經在進行緊鑼密鼓的開發中了,當然,如果能有幸得到2.0版本開發板的使用機會,我會試著做一些遠程控制相關的小項目。期待ing。。。
-
STM32
+關注
關注
2266文章
10876瀏覽量
354922 -
時鐘
+關注
關注
10文章
1721瀏覽量
131377 -
WIFI
+關注
關注
81文章
5291瀏覽量
203314 -
擴展板
+關注
關注
0文章
53瀏覽量
11381
原文標題:基于STM32的WiFi聯網自動校準時鐘
文章出處:【微信號:mcu149,微信公眾號:電子電路開發學習】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論