瓦斯抽放采集仪设计过程

一、设计要求

CJZ3便携式激光瓦斯抽放综合参数测定仪:

(1)主机箱体:STM32F103RCT6 控制器控制激光甲烷(串口)、一氧化碳(ADC)、温度和气体管压(IIC)的数据采集,还有抽气泵的控制,电池电量的采集,LORA无线模块的数据传输,与手持端的通信,主板上有12V转5V转3,3V的电路,还有电池充电电路的控制,测量数据的存储。

(2)手持端:STM32F103RCT6 控制器控制12864液晶的显示菜单,9键盘的按键检测,RC523射频模块的控制,与主机箱体的通信,RTC的日期时间显示。

二、设计过程

1、通过拿到样品的拆解,缕清了产品的各个模块组成如设计要求描述,然后买了同样型号的正点原子开发板,开始移植了OLED的显示屏程序基于HAL库,在STM32cubMX下完成,董工帮忙进行了调试,最后OLED显示成功,做了初始的显示界面。

2、接着买了瓦斯传感器,是串口传输,给的有协议说明, 在董工的帮助下,搭建了串口与传感器通信的程序代码,并能读到传感器发送出来的瓦斯浓度数据,显示在了OLED屏上,一开始显示数据不对,没有进行公式转化,后来使用sprintf函数格式化采集的数据后,将转化后的浓度数据显示在了OLED屏上。

3、买来了CO传感器,进行的是ADC数据采集,查看了小蜜蜂的例程后,移植了ADC程序代码,并将数据使用sprintf函数格式化,最后显示在了OLED屏上。

4、后面调试RTC日期时钟显示,一开始,用的是正点原子的RTC例程,但是编译通过后,OLED屏上一直没有日期时间显示,后来通过百度,使用了cubmx自带的RTC设置显示日期时间,OLED显示成功,但是不支持日期和时间得修改。

5、开始做显示屏的菜单,通过查看样机的显示界面,在csdn查找类似的菜单显示例程,一开始找到一个用树结构的程序代码,移植编译通过后,下载到主板,OLED屏幕上没有任何显示。和董工沟通,董工调试后,由于指针太绕没有继续调试,换了方案,采用另一个CSDN上的索引法建立屏幕显示菜单,经过移植,一开始看不懂程序代码,第二天耐心写下来主要的数据类型定义和函数后,看懂程序代码,经过修改,最终调试成功,最后又改成了中文界面显示。

6、买来了RC523射频卡模块、LORA无线模块、气压模块和18b20,先调试RC523,使用CSDN上找到的例程,移植,编译通过后,刷IC卡没有反应。移植两三个程序也没反应,换成522模块也不行。

7、第二天RC523的调试放到一边,开始调试18b20温度采集模块,采用正点原子hal库的例程,移植过来,编译通过后,下载,OLED温度显示为err,单步调试,发现,程序一直停留在18b20的初始化函数中没有进入到温度采集环节。查看程序代码,仿真,都看不出问题,换了例程移植还是不行。检查硬件连接是没有问题的,测试18B20模块在另一个板子上,也是正常的。修改了18b20的采集管脚定义为函数形式而不是位带形式,也不行,开始看整点原子的视频,了解GPIO的结构和代码组成,没有结果。第二天让董工远程,最后他让测试测试位带端口是否正常,我控制LED灯,发现灯一直亮,不闪烁,单步调试没问题,似乎找到了问题所在,delay函数不能用。然后,思考,问QQ群,有的说重新写一个delay延时函数,有的说延时时间不对,闪烁太快了就成了一直亮,这些回答都是不对的,我用hal的delay是可以闪烁的。没有思路,去看正点原子的延时函数的讲解,看到快最后,发现了delay要有delay_init()函数,这才知道,移植的18b20程序没有在main.c中写延时函数的初始化,加上后,温度读取正常。

你可能感兴趣的:(STM32,c语言,自动控制,单片机,物联网,stm32,嵌入式硬件,硬件工程)