找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2667|回复: 1
打印 上一主题 下一主题
收起左侧

基于GD32的仓库温度报警系统

[复制链接]
跳转到指定楼层
楼主
一、方案名称:基于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的,需要修改如下宏定义。如果这个没有设置好,那拿到DS18B20datasheet后,看时序图就知道这是至关重要的。之前没有发现这点漏洞,老是发现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采集的温度值也比较精准。此次项目让我收获许多,同时在微信群里认识了众多有识之士,通过网友的发帖,也认识到自己的差距。时不待我,只有不断的进行实际项目的开发,才能让自己独当一面。

六、视频演示:


结构概况框图.png (20.84 KB, 下载次数: 36)

结构概况框图

结构概况框图

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:316883 发表于 2024-6-22 11:20 | 只看该作者
国产芯片的应用,鼓励支持一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表