通知设置 新通知
AQI环境空气质量指数技术规定(标准)
laoguo 发表了文章 • 1 个评论 • 693 次浏览 • 2020-08-01 11:40
本标准依据《环境空气质量标准》,规定了环境空气质量指数日报和实时报工作的要求和程序。本标准中的污染物浓度均为质量浓度。本标准与《环境空气质量标准》(GB 3095—2012)同步实施。
详细政府标准文件请点击下载
All Sensors DLC系列压力传感器开发笔记
laoguo 发表了文章 • 0 个评论 • 1667 次浏览 • 2020-08-01 09:49
All sensors新出了一个系列性价比很高的微差压压力传感器----DLC系列。然而这个传感器对开发者来说却不是那么“友好”。总是或多或少会遇到一些问题,笔者根据自己的经验,总结了以下一些需要注意的地方,希望能够帮到各位开发者。
1. 硬件设计
也许你是10年硬件开发经验的老手,这不过是一个压力传感器罢了,IIC读取,就那么几根线,闭着眼都不会接错。是的,但是很多人眼睁睁的接错了。
首先封装形式,有D1、D3、D4、U1、U2、U5六种封装形式,其中D封装是双气嘴封装,U封装是单气嘴封装。
不同于一般的IIC传感器,DLC系列多出一个EOC引脚,很多开发者会认为这个引脚没有作用,不接。如果不接,软件工程师就马上有疑问了:为什么我读取的值都是FF! 传感器有问题!!!
如下图,很多软件工程师都会选择性地不去看EOC的状态,但是EOC却起着决定是读到FF还是其它值的作用。那么什么是EOC呢?EOC是传感器输出的一个状态表示位,EOC为低电平时,表示传感器内部在读数,此时去读传感器只能读到FF,EOC为高电平时,才能读到数值。
Mark一下,是传感器输出,不是输入!有些开发者给EOC接上拉或者下拉,然后发现EOC的状态没有变化,传感器有问题!!
如果不接EOC可行吗?回答是也可以,不过,读取数据时要注意时序,在EOC刚好高电平的时候读数,这对时序要求比较高,如果软件兼有其它传感器或者功能,建议要连接EOC。当然也可以采取轮询状态的方式。
D4封装也是常见的一个封装,也是很多开发者容易忽视硬件问题的封装:
如图,NOTES里面提示:
第4点:Do not connect any signal to Pin 1,3,14.
第5点 PCB must connect Pin13 to Pin16
很多老鸟喜欢忽视手册,不确定接的时候,就接了个GND,然后就发现传感器读数不出来,马上提出,传感器有问题!!!
另外,这里的Pin13 toPin16 是指把第13脚和第16脚连接起来,而不是把13到16脚之间的引脚连起来。
2. 软件设计
如果硬件连接对了,软件部分基本上没有什么难度。
如果硬件连错了,那么软件调试相当困难。
所以开发者看到这一步的时候,可以返回去看看自己的硬件设计部分,看看硬件部分是否存在问题。
现在开始软件部分
首先是IIC地址,手册的第五页,十进制的地址41,换算成十六进制则是0x29.
然后是读取指令,DLC系列给出了一个指令表:
如图,经过我们验证,0xAF二进制为10101111,0xAE二进制为10101110。。。。这几个指令二进制形式上很接近,很容易受到干扰,故建议开发者如果要读取多次平均的值,可以发送0XAA,读取单次的值,然后再自己做平均。
这里贴出一段DLC系列的压力读取程序(没有读取EOC,仅作参考):
voidRead_DLC_0XD(void)
{
u8 I2c_Address = 0x29;
u8 Read_Commond = 0xAA;
u8 DLC_DATA[7] = {0x00};
u8 Status;
u32 Pressure_data,Tempertaure_data;
IIC_Init();
IIC_Start();
IIC_Send_Byte((I2c_Address)<<1|0); //write
IIC_Wait_Ack();
IIC_Send_Byte(Read_Commond); //1mps
IIC_Wait_Ack();
IIC_Stop();
delay_ms(360);
IIC_Start();
IIC_Send_Byte((I2c_Address)<<1|1); //read
IIC_Wait_Ack();
DLC_DATA[0]=IIC_Read_Byte(1); //STATUS[7:0]
DLC_DATA[1]=IIC_Read_Byte(1); //PRESSURE[23:16]
DLC_DATA[2]=IIC_Read_Byte(1); //PRESSURE[15:8]
DLC_DATA[3]=IIC_Read_Byte(1); //PRESSURE[7:0]
DLC_DATA[4]=IIC_Read_Byte(1); //TEMPERATURE[23:16]
DLC_DATA[5]=IIC_Read_Byte(1); //TEMPERATURE[15:8]
DLC_DATA[6]=IIC_Read_Byte(0); //TEMPERATURE[7:0]
IIC_Stop();
Status = DLC_DATA[0];
Pressure_data=(DLC_DATA[1]<<16)|(DLC_DATA[2]<<8)|DLC_DATA[3];
Tempertaure_data=(DLC_DATA[4]<<16)|(DLC_DATA[5]<<8)|DLC_DATA[6];
}
补充一下Status,Status是状态位,手册上有状态位的说明:0x40是正常的状态。如果读到其它状态了,请根据提示找问题。
3. 压力计算
程序读出来了,计算压力却始终不对,这可郁闷了。
以手册公式为例,我们来计算一个DLC-L01D的压力值:
Poutdig 是程序读到的值,假设读到的值为0XBF5A4A
OSdig 可以从手册上的参数表查得:LXXD为0.5*224
FSS也可以从参数表中获取:LXXD为+/- 0.4*224注意单位是counts,如果换算成压力单位 inch,L01D的FSS应该为1-(-1)=2.
所以读值为0XBF5A4A的压力为:
1.25*【(0XBF5A4A-0.5*224)/224】*2 =0.6inch
如果要转换成Pa,inch与Pa的转换关系为1inch=249Pa,故当前应为0.6*249=149.4Pa
以上就是我的DLC系列开发心得,转自项目管理与精益制造公众号。欢迎开发者们咨询All Sensors代理商科沃电子
Tel:17764509575, zf@cowo.net.cn。