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

基于STM32 ESP8266的WIFI TFT自動校時天氣預(yù)報設(shè)計
基于uFUN開發(fā)板和擴(kuò)展板的聯(lián)網(wǎng)校準(zhǔn)時鐘

為什么儀器校準(zhǔn)時總會產(chǎn)生誤差?存在哪些影響因素?
怎樣才可以讓wifi時鐘聯(lián)網(wǎng)
北斗衛(wèi)星同步時鐘系統(tǒng):精準(zhǔn)時間的秘密

評論