一、方案名稱:基于GD32F350的智能倉庫溫度報警器
二、方案概體介紹: 該項(xiàng)目主要運(yùn)用GD32F350作為主控MCU,通過一線式通訊接口,外接一個DS18B20進(jìn)行溫度采集。由于個人只是做項(xiàng)目的demo,沒有購買多個DS18B20,一般倉庫面積比較大,在實(shí)際監(jiān)控中,建議外掛多個DS18B20模塊在總線上,由于是單線式傳輸,因此對時序要求比較嚴(yán)苛,但它可以掛接許多個DS18B20模塊,軟硬件實(shí)現(xiàn)起來比較方便。本項(xiàng)目實(shí)現(xiàn)的功能比較簡單,大概的執(zhí)行流程就是通過DS18B20實(shí)時采集室內(nèi)溫度,并通過內(nèi)部寄存器將模擬信號轉(zhuǎn)換成數(shù)字信號,編寫一線式通訊協(xié)議,使用GPIOB_12將完成數(shù)據(jù)的收發(fā)。當(dāng)采集的溫度值在10℃~33℃時為正常范圍,顯示內(nèi)部LED燈為0.3秒亮滅間隔,外部7盞燈會依次以0.05秒的時間間隔亮滅。如果大于33℃或者小于10℃時,則內(nèi)部LED燈以0.05秒的時間間隔依次兩滅,同時外部LED的第8盞燈也會以0.3秒亮滅頻率閃爍,并且外部蜂鳴器器會持續(xù)響起,用到的是GPIOC_6管腳。當(dāng)然這溫度的范圍根據(jù)用戶要求可以適時設(shè)定。
三、開發(fā)環(huán)境: 本項(xiàng)目是在Keil uVision5上編譯、鏈接、下載。在收到開發(fā)板后,首先當(dāng)然是搭建好開發(fā)環(huán)境,在Keil uVision5上下載好針對GD32F350的動態(tài)庫,這樣方便后續(xù)的程序編譯下載。由于此次項(xiàng)目沒有采用OLED顯示模組,而八段數(shù)碼管的點(diǎn)亮驅(qū)動要求GPIO的資源較多,因此沒有去點(diǎn)亮數(shù)碼管顯示實(shí)時溫度值了,用到的是串口實(shí)時打印。
四、總體結(jié)構(gòu)框圖及主模塊圖:
五、項(xiàng)目心得體會: 由于該項(xiàng)目是采用DS18B20的外部溫度采集模塊,其通訊方式是單線式,因此要求的時序比較精準(zhǔn)。下面是在demo包下改成的配置。庫函數(shù)system_gd32f3x0.c原始系統(tǒng)配置的是__SYSTEM_CLOCK_108M_PLL_HXTAL外部晶振,但是拿到的板子外部晶振沒有給我們用戶焊接,因此系統(tǒng)會切換為__SYSTEM_CLOCK_8M_IRC8M內(nèi)部RC 8Mhz的系統(tǒng)時鐘頻率。GD32F350是支持內(nèi)部RC 8Mhz晶振倍頻到108Mhz的,需要修改如下宏定義。如果這個沒有設(shè)置好,那拿到DS18B20的datasheet后,看時序圖就知道這是至關(guān)重要的。之前沒有發(fā)現(xiàn)這點(diǎn)漏洞,老是發(fā)現(xiàn)DS18B20初始化失敗,采集數(shù)據(jù)都是為0℃。 #if defined (GD32F350) //#define __SYSTEM_CLOCK_8M_HXTAL (__HXTAL) //#define __SYSTEM_CLOCK_8M_IRC8M (__IRC8M) //#define __SYSTEM_CLOCK_72M_PLL_HXTAL (uint32_t)(72000000) //#define __SYSTEM_CLOCK_72M_PLL_IRC8M_DIV2 (uint32_t)(72000000) //#define __SYSTEM_CLOCK_84M_PLL_HXTAL (uint32_t)(84000000) //#define __SYSTEM_CLOCK_84M_PLL_IRC8M_DIV2 (uint32_t)(84000000) //#define __SYSTEM_CLOCK_96M_PLL_HXTAL (uint32_t)(96000000) //#define __SYSTEM_CLOCK_96M_PLL_IRC8M_DIV2 (uint32_t)(96000000) //#define __SYSTEM_CLOCK_96M_PLL_IRC48M_DIV2 (uint32_t)(96000000) //#define __SYSTEM_CLOCK_108M_PLL_HXTAL (uint32_t)(108000000) #define __SYSTEM_CLOCK_108M_PLL_IRC8M_DIV2 (uint32_t)(108000000) #endif /* GD32F350 */
項(xiàng)目功能很簡單,內(nèi)容也比較少,但是走了很多彎路,導(dǎo)致浪費(fèi)了很多時間。由于項(xiàng)目是用之前做51單片機(jī)的系統(tǒng)開發(fā)板,該板是由本人手動畫PCB,然后用FeCl3蝕刻,鉆孔,手動焊接,此次派上用場了。但這次項(xiàng)目也是只用到LED發(fā)光二極管和蜂鳴器部分電路,由于LED8與蜂鳴器是串聯(lián)在一起的,調(diào)試的時候一上電,如果在初始化配置GPIOC_6口為輸出時,外部電路老是有1.5V左右的電平輸出,因此蜂鳴器總是響起。后面量測才知道是硬件電路所致,因?yàn)榇?lián)了LED8,將電壓拉低,三極管被驅(qū)動。因此這能在初始化GPIOC_6口時將配置改成輸入,當(dāng)要讓蜂鳴器啟動時再將改口改成輸出。 本來計(jì)劃采用外部按鍵來中斷蜂鳴器報警,然后可以通過外部按鍵調(diào)節(jié)設(shè)定溫度范圍告警值,但由于沒有顯示部分,操作起來也沒有那么方便,因此該部分待后續(xù)慢慢完善吧。總的來說此項(xiàng)目的功能是達(dá)到了,DS18B20采集的溫度值也比較精準(zhǔn)。此次項(xiàng)目讓我收獲許多,同時在微信群里認(rèn)識了眾多有識之士,通過網(wǎng)友的發(fā)帖,也認(rèn)識到自己的差距。時不待我,只有不斷的進(jìn)行實(shí)際項(xiàng)目的開發(fā),才能讓自己獨(dú)當(dāng)一面。
六、視頻演示:
|