以下文章來源于電子電路開發(fā)學(xué)習(xí) ,作者wcc149
項(xiàng)目概述:
之前在uFUN試用群里看到管理員說試用活動(dòng)快結(jié)束了,要抓緊完成評測總結(jié),看大家的評測總結(jié)也都寫了,我也不能落后?。≌米罱龅臄U(kuò)展板到手了,于是趕緊進(jìn)行調(diào)試,做了一個(gè)不用校準(zhǔn)的時(shí)鐘,時(shí)鐘這種小設(shè)計(jì)應(yīng)該說是爛大街了吧!
我一開始學(xué)習(xí)51的時(shí)候做了個(gè)可按鍵校準(zhǔn),帶鬧鐘功能的時(shí)鐘,學(xué)習(xí)STM32的時(shí)候做。了個(gè)可以手機(jī)藍(lán)牙APP校準(zhǔn)的時(shí)鐘,現(xiàn)在又用uFUN開發(fā)板做了個(gè)時(shí)鐘。不過,時(shí)鐘這個(gè)的英文聯(lián)網(wǎng)校準(zhǔn)的由于之前做過桌面天氣預(yù)報(bào)時(shí)鐘,如下圖所示:
所以,這個(gè)聯(lián)網(wǎng)校準(zhǔn)時(shí)鐘的小項(xiàng)目實(shí)現(xiàn)起來還是很順利的,底板是使用的uFUN開發(fā)板,擴(kuò)展板是自己設(shè)計(jì)的,使用PCIe的接口和uFUN開發(fā)板進(jìn)行通訊。使用ESP8266 WiFi模塊獲取北京標(biāo)準(zhǔn)時(shí)間,然后對STM32內(nèi)部的RTC進(jìn)行校準(zhǔn),再通過OLED顯示出來。
我知道,這個(gè)小項(xiàng)目無論是PCB的設(shè)計(jì),還是控制程序的編寫,對于論壇里一些有著多年經(jīng)驗(yàn)的大佬來說,這個(gè)小項(xiàng)目簡直不值一提,我只不過是班門弄斧罷了。有不對的地方,歡迎各位大佬拍磚!
擴(kuò)展板資源簡介:
0.96寸OLED屏,IIC接口,128 * 64像素,通過外部電路的修改,可支持8080并口,SPI接口。
W25Q128,SPI接口,可以用來存儲(chǔ)字庫,配合uFUN開發(fā)板的SD卡功能,可以實(shí)現(xiàn)字庫的更新
AT24C02,EEPROM,IIC接口,掉電不丟失,可以用來保存一些用戶數(shù)據(jù)
SHT20,IIC接口溫濕度傳感器。
5個(gè)LED,1個(gè)電源指示,4個(gè)用戶LED,這四個(gè)LED都連接到了定時(shí)器的通道,可通過PWM占空比控制亮度
1個(gè)光敏電阻,把光照強(qiáng)度轉(zhuǎn)換為AD電壓值,可以實(shí)現(xiàn)根據(jù)外界亮度控制OLED屏的亮度。
1個(gè)OLED模塊接口,可外插IIC接口的OLED模塊
藍(lán)牙/ WiFi的模塊兼容接口設(shè)計(jì),可支持HC-05藍(lán)牙模塊,或者是原子的ESP8266模塊。
1個(gè)DHT11溫濕度傳感器模塊接口
擴(kuò)展板原理圖設(shè)計(jì):
從uFUN的原理圖可以看出,的PCIe擴(kuò)展口中有5V電源,數(shù)字地,模擬3.3V,模擬地,而沒有引出數(shù)字3.3V電源,為了不干擾模擬3.3V,擴(kuò)展板的3.3V電源來自5V經(jīng)過AMS117穩(wěn)壓,AMS117-3.3是一款比較常用的LDO電源芯片,最大可提供1A的輸出電流,對于擴(kuò)展板來說是足夠用了。
OLED電路
OLED外圍電路,參考中景園官方推薦的電路,使用的是IIC接口,因?yàn)橹皼]用過IIC總線掛載多個(gè)從機(jī),為了避免調(diào)不通,所以O(shè)LED的IIC接口使用了獨(dú)立的管教,同時(shí)上拉4.7K電阻。
W25Q128電路
W25Q128是采用的SPI通訊協(xié)議,正好擴(kuò)展接口中有SPI接口,所以就用了STM32的硬件SPI2接口,當(dāng)然也可以軟件模擬。
AT24C02電路
實(shí)際上焊接的是ST公司的M24C64,目前讀寫還沒調(diào)通,和底板的LIS3DH共用一組IIC總線。
SHT20電路
正好上次做板子,買的SHT20還剩幾片,所以在這個(gè)擴(kuò)展板上,也使用了這款傳感器,這款數(shù)字溫濕度傳感器體積非常小,只有3 * 3 * 1.1mm,和底板的LIS3DH共用一組IIC總線,后面調(diào)試正常,可以獲取到溫濕度數(shù)據(jù)。
無線藍(lán)牙兼容接口
偶然發(fā)現(xiàn)HC-05和原子的ESP8266模塊接口幾乎一樣,所以這部分設(shè)計(jì)成了兼容兩種模塊的接口,如下圖所示:
4路LED都連接到了STM32的定時(shí)器輸出通道,可以用來控制亮度,另外也充分利用了擴(kuò)展口留出的模擬電源和模擬地,通過簡單的分壓原理,可以把光照強(qiáng)度轉(zhuǎn)換為AD電壓值,還增加了OLED模塊接口和DHT11溫濕度傳感器接口。
擴(kuò)展板PCB設(shè)計(jì):
結(jié)構(gòu)的設(shè)計(jì)
SHT20官方推薦的放置方式是在板子邊緣挖個(gè)島出來,然后把傳感器放進(jìn)去,這樣能最大程度的減少板子熱量的傳遞,從而提高精度,但是,由于擴(kuò)展板面積較小,再挖個(gè)島出來,看著太難看了,就沒有挖。
板子的整體結(jié)構(gòu)圖來自于前一段時(shí)間,@張進(jìn)東張工在uFUN試用群里分享的AD版本的PCB圖,那個(gè)圖是這樣的:
我進(jìn)行了稍微的修改,把安裝孔右邊多余的部分去掉了,而且為了和底板一致,我把擴(kuò)展板改成了圓角,但是接口和安裝孔的相對位置沒動(dòng),板子的TOP面:
封裝的選擇
電阻電容封裝的選擇上,一開始覺得板子空間比較小,怕放不下所有的元器件,幾乎所有的電阻和電容都選擇了0402封裝,同時(shí)也出現(xiàn)了一個(gè)比較尷尬的事,就是有1種電容和1種電阻,嘉立創(chuàng)SMT的基礎(chǔ)庫里沒有,擴(kuò)展庫里才有,而如果使用擴(kuò)展庫里的元件,需要加每種20元的換料費(fèi),所以最終打板多花了40元,這一點(diǎn)也是我沒有考慮到的。等投板之后,我又嘗試著把所有的電阻電容封裝都換成0603的,發(fā)現(xiàn)也能放得下。
元件的布局布線
元件布局方面,為了防止元器件放在背面和底板的部分元件沖突,同時(shí)也為了滿足嘉立創(chuàng)只能單面貼片的工藝要求,我把所有的元件都放在了TOP面,BOTTOM面只放了OLED裸屏的接口,為了方便連接外部的模塊,把接口都放在了板子的邊緣,LED也放在了板子邊緣,由于SHT20是DFN封裝,為了方便后面使用風(fēng)槍進(jìn)行焊接,周圍留出了一點(diǎn)空間。
板子的BOTTOM面:
3D效果顯示:
我用的是AD9版本,3D效果渲染的還是挺不錯(cuò)的。
PCB的打樣和調(diào)試:
不知道今年是不是板材降價(jià)了,各大PCB板廠都在降價(jià),去年做畢業(yè)設(shè)計(jì)的板子時(shí)還是50元5片1010cm以內(nèi),今年就是30元5片1010以內(nèi),而且連彩色油墨費(fèi)都不收了。PCB打樣和SMT貼片還是選擇了之前用過的嘉立創(chuàng),5片全貼,一共花了191大洋!
生產(chǎn)工藝方面時(shí),由于嘉立創(chuàng)只支持綠油進(jìn)行SMT,所以只能用看著比較LOW的綠色油墨,其實(shí)我更喜歡藍(lán)色油墨,而且和底板很搭!其他的工藝如過孔蓋油、有鉛噴錫,由于只是樣板,就沒有選擇鍍金工藝了,所以金手指成了錫手指,外加倒斜邊,倒斜邊是金手指板卡常用的一種工藝,是為了能夠方便的插到插槽里面。
還要注意非常非常重要的一點(diǎn):PCB板的厚度,其實(shí)這個(gè)我一開始設(shè)計(jì)的時(shí)候就考慮過,使用之前做的1.6mm的板子試著往里面插了一下,發(fā)現(xiàn)根本插不進(jìn),網(wǎng)上也沒搜到PCIe的板子應(yīng)該做多厚,所以就選擇了比1.6稍微薄一點(diǎn)的1.2mm厚度。詳細(xì)的生產(chǎn)工藝:
PCB生產(chǎn)進(jìn)度和SMT進(jìn)度:
由于板子比較簡單,從下單到發(fā)貨大概用了3天的時(shí)間吧,實(shí)際的樣板圖片:
板子拿回來一插,發(fā)現(xiàn)還是稍微厚了點(diǎn),不能完全插進(jìn)PCIe座里面,而且底板的銅柱還不能對準(zhǔn)擴(kuò)展板的安裝孔。
后來請教了 @張進(jìn)東 張工,原來只需要1.0mm就夠了,斜著插進(jìn)去往下一壓,再用銅柱固定就行。不過我用暴力手段解決了一下,直接用剪刀剪掉了一段金手指,還好金手指上面的銅箔沒有掉,這樣才勉強(qiáng)能用一個(gè)螺絲固定好,安裝效果如文章第一張圖:
就這么不完美的解決了,不過還是有幾個(gè)管腳接觸不良,如DHT11接口的那個(gè)引腳,稍微松動(dòng)一點(diǎn)就不能用,不過已經(jīng)板載了溫濕度傳感器,倒也影響不大。然后就試著點(diǎn)亮了OLED屏,先顯示個(gè)uFUN的LOGO吧:
到這里覺得應(yīng)該沒啥問題了吧,開始調(diào)試WiFi接口,使用的是引出的串口3來和WiFi模塊進(jìn)行通訊,由于之前的程序是用的串口2,所以又稍微改了一下,調(diào)了半天,還是不通,就把同樣的程序下載到其他板子上,沒問題??!難道是接觸不好,最后一查,是uFUN的原理圖中PB10和PB11的網(wǎng)絡(luò)標(biāo)號(hào)也反了,導(dǎo)致擴(kuò)展板的TX和RX反了,這可怎么辦呢?
又舍不得浪費(fèi)板子??!所以把原來TX和RX連接的兩根線割斷,重新飛了兩根線,完美解決!這線飛的可沒有uFUN開發(fā)板上的那根飛線漂亮!
另外,擴(kuò)展板IIC總線上的24C02讀寫一直沒調(diào)通,不知道是物料的問題還是讀寫時(shí)序的問題,而同是IIC總線上的SHT20溫濕度傳感器就沒問題。另外由于本項(xiàng)目中沒有用到過多的中文,所以SPI Flash也沒用到。
控制程序的設(shè)計(jì):
可能是由于字庫文件沒有進(jìn)行精簡,所以整個(gè)程序占用了非常多的空間,總是報(bào)內(nèi)存不足的錯(cuò)誤,為了能跑起來,我把單片機(jī)型號(hào)改成了STM32F103RE系列,由于RE系列比RC系列的存儲(chǔ)空間要大的多,并沒有報(bào)錯(cuò)誤,而且程序可以正常運(yùn)行,雖然都是大容量產(chǎn)品,程序可以兼容,但這是一種非常不推薦的方式。
實(shí)現(xiàn)思路:
實(shí)現(xiàn)原理就是:STM32驅(qū)動(dòng)ESP8266 GET北京時(shí)間的接口,得到一串JSON數(shù)據(jù),然后STM32調(diào)用cJSON庫進(jìn)行解析,獲取到時(shí)間信息,然后把這個(gè)時(shí)間信息寫入到RTC寄存器,STM32內(nèi)部RTC從當(dāng)前時(shí)間開始運(yùn)行,然后顯示到OLED屏上,程序中設(shè)置的是每隔10分鐘,獲取一次時(shí)間。北京標(biāo)準(zhǔn)時(shí)間的來源使用了K780數(shù)據(jù)的API接口,地址:
http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json
這是JSON格式的,數(shù)據(jù)的解析使用了開源的JSON解析庫cJSON,只有兩個(gè)文件,使用起來還是比較簡單的。
主要功能:
STM32 RTC的使用。
OLED的驅(qū)動(dòng),支持68 ASCII碼顯示,816 ASCII碼顯示,16*32數(shù)字0-9和冒號(hào):的顯示,漢字“周一二三四五六日”的顯示。
ESP8266的驅(qū)動(dòng),和北京標(biāo)準(zhǔn)時(shí)間服務(wù)器接口建立TCP連接。
cJSON庫解析接收的JSON數(shù)據(jù),獲取北京時(shí)間,年月日,時(shí)分秒。
關(guān)于JSON格式的說明和cJSON庫的使用,可以參考我之前寫的兩篇文章:
使用cJSON庫解析JSON
JSON簡介
很多API接口的數(shù)據(jù)格式都是JSON格式的,如我之前做的桌面天氣預(yù)報(bào)時(shí)鐘,使用的是心知天氣的數(shù)據(jù)源,就是JSON格式,網(wǎng)上也有很多免費(fèi)的API接口,可以做出很多好玩的東西,就看你的想象力了!
不足之處:
斷電不能走時(shí)
這算是這個(gè)程序最大的一個(gè)BUG吧,雖然uFUN開發(fā)板有超級電容備用電池接著,但一直沒調(diào)通斷電走時(shí)的功能,這種情況帶來的一個(gè)問題就是,如果不插WiFi模塊的情況下重新上電,是不能從上次保存的時(shí)間繼續(xù)運(yùn)行的。
程序不夠精簡
為了能讓程序運(yùn)行起來,把單片機(jī)改成大容量型號(hào),應(yīng)該從根本上精簡字庫,優(yōu)化程序大小。
GET請求偶爾會(huì)失敗
偶爾會(huì)出現(xiàn)發(fā)送GET請求,接收不到數(shù)據(jù)的情況,可能是內(nèi)存分配的問題。
總結(jié):
這個(gè)小項(xiàng)目總得來說,硬件調(diào)試方面比較坎坷,又是飛線,又是割板子的。而軟件調(diào)試方面,由于之前做過類似的設(shè)計(jì),所以還是比較順利的。由于評測活動(dòng)的時(shí)間關(guān)系,本次評測的大作業(yè)我只做了這個(gè)簡單的聯(lián)網(wǎng)校準(zhǔn)時(shí)鐘。
其實(shí),有了WiFi/藍(lán)牙模塊接口和OLED屏,就可以做很多好玩的東西了,比如選擇一個(gè)開放的云平臺(tái),如中移OneNET等等,然后和云臺(tái)進(jìn)行一些交互,如采集溫濕度上傳到云平臺(tái)做個(gè)溫濕度遠(yuǎn)程監(jiān)測系統(tǒng),或者是遠(yuǎn)程控制LED或者蜂鳴器,桌面天氣預(yù)報(bào)等。
下面這幾個(gè)界面是我去年在學(xué)校時(shí),使用中移OneNET云平臺(tái)做的一些界面:
對于uFUN開發(fā)板的整體評測過程來說,雖然配套的文檔存在一些瑕疵,在之前的評測文章中,我也都有提到,但是不影響新手入門STM32,況且論壇里還有那么多的入門教程,也希望我的這些評測文章能對那些剛?cè)腴TSTM32的小伙伴們有一些幫助,少走一些彎路。據(jù)說2.0版本的開發(fā)板已經(jīng)在進(jìn)行緊鑼密鼓的開發(fā)中了,當(dāng)然,如果能有幸得到2.0版本開發(fā)板的使用機(jī)會(huì),我會(huì)試著做一些遠(yuǎn)程控制相關(guān)的小項(xiàng)目。期待ing。。。
-
STM32
+關(guān)注
關(guān)注
2264文章
10857瀏覽量
354381 -
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1716瀏覽量
131283 -
WIFI
+關(guān)注
關(guān)注
81文章
5282瀏覽量
203120 -
擴(kuò)展板
+關(guān)注
關(guān)注
0文章
52瀏覽量
11364
原文標(biāo)題:基于STM32的WiFi聯(lián)網(wǎng)自動(dòng)校準(zhǔn)時(shí)鐘
文章出處:【微信號(hào):mcu149,微信公眾號(hào):電子電路開發(fā)學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論