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