项目

一般

简介

任务 #4510

任务 #4508: OM-TH100A项目研发

2、软件开发

韦 银剑超过 2 年 之前添加. 更新于 超过 2 年 之前.

状态:
新建
优先级:
指派给:
类别:
软件
开始日期:
2022-07-04
计划完成日期:
2022-07-24
% 完成:

60%

预期时间:
里程碑:

描述

温湿度传感器软件功能:

RS485通信协议:读取温湿度、设置/读取通信地址、设置/读取波特率、简单的校准(0.1℃)

硬件相关:按键输入、液晶显示


不显示时波形.jpg 查看 不显示时波形.jpg 3.16 MB 韦 银剑, 2022-07-12 10:40
显示时波形.jpg 查看 显示时波形.jpg 3.17 MB 韦 银剑, 2022-07-12 10:40
显示波形.jpg 查看 显示波形.jpg 3.3 MB 韦 银剑, 2022-07-12 10:40
IO驱动LCD电路-1_3BIAS.pdf 查看 IO驱动LCD电路-1_3BIAS.pdf 43.2 KB 液晶连接硬件电路 韦 银剑, 2022-07-12 15:10
用STC系列MCU的IO口直接驱动段码LCD-V2.pdf 查看 用STC系列MCU的IO口直接驱动段码LCD-V2.pdf 975 KB 相关驱动说明和代码例程 韦 银剑, 2022-07-12 15:10
经过12小时的通讯测试数据.csv 经过12小时的通讯测试数据.csv 21.7 MB 韦 银剑, 2022-07-20 09:02
直驱通信测试2022.7.27.csv 直驱通信测试2022.7.27.csv 18.5 MB 韦 银剑, 2022-07-27 09:12
直驱通信测试2022.7.28.csv 直驱通信测试2022.7.28.csv 22.7 MB 韦 银剑, 2022-07-28 08:56
6个温湿度串联通信测试.txt 6个温湿度串联通信测试.txt 124 KB 韦 银剑, 2022-07-30 08:23
6379
6380
6381

历史记录

#1韦 银剑 更新于 超过 2 年 之前

  • 描述 已更新。 (diff)
  • 类别 被设置为 软件
  • % 完成0 变更为 20

IIC问题:

问题描述:在读取sht20时,会出现高字节读到0xFF的数据,但是使用逻辑分析仪对波形进行分析,传输的数据是没有问题的。

问题分析:由于单片机使用5.0V,sht20是用3.0V,由于电平不比配,所以使用单片机IO的开漏功能,外挂一个上拉电阻接到3.0V上,进行电平转换。猜测是GPIO的开漏模式有问题,导致读取不到数据

问题处理方式:

1、刚开始是使用硬IIC进去驱动的,出现上述问题后,换了模拟IIC进行通信,现象还是有,但是相比硬IIC,出现0xFF次数和频率相对来说少了很多,但是不能解决问题

2、在读取数据时,之前的代码是一边读取,一边移位组成一个16bit的变量;改为,先使用缓存把2个字节的都都回来,在进行组合,可以解决问题。

这里需要注意的事:出问题的代码在STC15W4K56S4上是能用的,到这个STC32G12K128上就不能用,这个未有答案

image.png

#2韦 银剑 更新于 超过 2 年 之前

IIC出现那个代码问题已经找到原因了

因为那段代码之前能用的原因是IIC_ReadByte();是自己写的,函数返回值使用unsigned char

但是在STC32G的库函数中返回值用char,再加上keil默认char是有符号的,导致在读取到移位出现问题


解决办法:

1、修改keil参数,把char默认为无符号型

2、在IIC_ReadByte()前面加强制转换为无符号型


当前程序使用方法2


image.pngimage.png

#3韦 银剑 更新于 超过 2 年 之前

6379
6380
6381

液晶残影问题:

image.pngimage.png


通过示波器查看波形

image.pngimage.png

对于1/3 BIAS 1/4 BUTY  3V的液晶

标准的电压为:

COMx的电压为:0.5V、2.5V、4.5V

SEGx的电压为:1.5V、3.5V


显示时压差为±3.0V,不显示时差压为±1.0V


经过测试得:(使用示波器测)

COMx的电压为:0.48V、2.4V、4.48V

SEGx的电压为:1.44V、3.36V

通过计算和测试

表1 不显示时电压点


电压1 电压2 电压3 电压4
COMx电压 0.48 4.48 2.4 2.4
SEGx电压 1.44 3.36 1.44 3.36
计算压差(COMx - SEGx) -1.04 1.12 0.96 -0.96
实际压差(COMx - SEGx) -1.04 1.2 0.96 -0.96

表2 显示时电压点


电压1 电压2 电压3 电压4
COMx电压 0.40 4.48 2.4 2.4
SEGx电压 3.36 1.44 1.44 3.36
计算压差(COMx - SEGx) -2.96 3.04 0.96 -0.96
实际压差(COMx - SEGx) -2.88 3.04 0.96 -0.96


从表1中看出,在,电压2位置,压差已经超过了±1,显示的残影应该是这里


下图黄色为COMx

蓝色为SEGx

紫色为COMx - SEGx (算法减,非直接测量COMx和SEGx引脚,因为示波器探头有电容,导致直接测试波形变形)

从图中看出COMx在变换方向(高阻输入和推挽输出)时,会产生毛刺,液晶对电压比较灵敏,也导致残影出现的原因

image.png




#4韦 银剑 更新于 超过 2 年 之前

image.png

在不显示的波形中

使用示波器捕获到COMx-SEGx之间有毛刺,这个毛刺是引脚变换方向(推挽输出变化为高阻输入)时,从这里看,由于电路中有电感分量,产生的电动势

#6韦 银剑 更新于 超过 2 年 之前

  • % 完成20 变更为 40

---------------------- 以下是外挂液晶驱动芯片记录(对应电路板版本为 V2.0) -------------------

使用外挂液晶驱动芯片,残影问题解决

image.png


本次记录:

1、移植外挂液晶驱动代码成功,编写了测试程序进行测试,让液晶一直循环显示所有的点

2、从OM-GSA-Q600移植Modbus文件过来,编译已经没问题,但未测试。移植过来导致edata内存超标了,整理了一下那些长数组,把他们移到xdata位置去


由于STC32G12K128单片机内部有2部分RAM,分别为edata(4K容量)和xdata(8K容量),默认是存储到edata中,但是使用时超出了4K的空间,导致keil5不能编译

目前处理为:把大的数组改存到xdata中,包含串口缓存数组、Modbus缓存数组

#7韦 银剑 更新于 超过 2 年 之前

  • % 完成40 变更为 60

完成Modbus协议,实现了03 06 16功能码,经过测试响应速度在80mS内

收发12294次,0丢包率

如下图

image.png

#8韦 银剑 更新于 超过 2 年 之前

通信延时视图

image.png

#9韦 银剑 更新于 超过 2 年 之前

经过12个小时以上的通讯测试,发现有4次响应有800mS以上不到900mS的延时,未检测出问题出哪里

正常收发681697次,丢包率为0

image.png




其中大于90mS的次数为29次,占总量的0.0044%


image.png








#10韦 银剑 更新于 超过 2 年 之前

遇到问题

1、在移植操作EEPROM时,会直接导致整改系统不能运行起来

2、在DataStorage.c中定义EEPROM_DATADefine xdata Storage_data;变量,但是对 变量 跳转时,提示undefined


这个原文件在空气变送器中已经用到

#11韦 银剑 更新于 超过 2 年 之前

上面已经解决,其实两个问题是同一个病因引起的

就是在定义结构体变量时,没有进行初始化,因为keil的优化的原因,导致这个变量被优化掉了

如下图的定义,被优化掉了,导致上面的第2问:对 变量 跳转时,提示undefined

image.png


因为没有这个变量

导致系统在进行时,数组不存在,指针没有指向,导致把内存被乱改写,系统起不来


解决办法:定义变量时就进行初始化

image.png

#12韦 银剑 更新于 超过 2 年 之前

3楼问题,即MCU直驱液晶出现残影问题

原因:由于液晶要求是3V驱动,但是经过测试,3V驱动时会出现残影。

为了解决这个问题,把单片机的供电电压调低,减少驱动电压,经过可调电压板的测试,可以得到在单片机供电电压在3.6V到4.1V之间可以消除残影

由于4G模块的供电电压为4V,为了元器件的一致性性,这里也选择了使用4V电压供电


#13韦 银剑 更新于 超过 2 年 之前

直驱液晶 通信记录

通信次数为625698次,出现了6次100mS以上的延时和6次超过5000mS的延时

5000mS以上的也有可能是无响应,软件没有记录说明是无响应还是延时

丢包数显示为1个

image.png

image.png

image.png


#14韦 银剑 更新于 超过 2 年 之前

焊接完成4片MCU直驱液晶的板子,刷机上电正常显示

#15韦 银剑 更新于 超过 2 年 之前

直驱液晶 通信记录

通信次数为644110次,出现了1次100mS以上的延时

丢包数显示为0个

image.png

image.png

image.png

image.png

#16韦 银剑 更新于 超过 2 年 之前

带驱动芯片版本高温测试记录

环境温度:65℃

测试时间:20小时

测试结果:正常显示,功能正常

c6a6e6c8858bd50fb05ecc257093d14.jpgb326b6e7e33362692039e3f6e9d78e6.jpg

#17韦 银剑 更新于 超过 2 年 之前

接4个温湿度时,设置地址为1/2/3/4

在传输时,有非本次地址也有响应

image.png

#18韦 银剑 更新于 超过 2 年 之前

image.png

#19韦 银剑 更新于 超过 2 年 之前

串联6个温湿度(包含4个直驱+2个外挂驱动芯片)进行通信,设置地址为1/2/3/4/5/6

测试正常

image.png

#20韦 银剑 更新于 超过 2 年 之前

MCU直驱液晶版本高温测试

测试温度:65℃

测试数量:2个

测试时长:30个小时

测试结果:显示正常、功能正常

62ec04e20f505e3ec6b215b31798757.jpg

4f2ac527bcc7060736a0c7ad24c43c6.jpg

导出 Atom PDF