一、概述

        GZP6859D 型压力传感器采用 SOP6 封装形式,内部集成了高精度 ADC芯片,对传感器芯片输出的偏移、灵敏度、温漂和非线性进行数字补偿,以供电电压为参考,产生一个经过校准、温度补偿后的标准数字信号。GZP6859D 型压力传感器尺寸小,方便客户安装。产品广泛用于医疗电子、汽车电子、运动健身器材等领域。

二、应用

GZP5959D的通信方式是IIC总线,IIC总线使用 SCL和 SDA 作为信号线,这两根线都通过上拉电阻(典型值 4.7K)连接到 VDD,不通信时都保持为高电平。12C设备地址为 0x6D。 时序图:

根据时序图可以知道,读的指令是0XDA;写是0XDB;关于IIC底层的驱动不再赘述,直接上应用层的驱动。

关于读写指令:

/*********************************************************
函数功能:发送一个字节
入口参数:
返    回:无。
备    注:无。
作者:Roy
时间:2024-05-17
*********************************************************/
void  GZP6859D_1_WriteByte(uint8_t addr,uint8_t data)
{

			iic1_start();    /* 发送起始信号 */
			iic1_send_byte(0xDA);

			iic1_wait_ack();             /* 每次发送完一个字节,都要等待ACK */
			iic1_send_byte(addr);  /* 发送低位地址 */
			iic1_wait_ack(); 

			iic1_send_byte(data);        /* 发送1字节 */
			iic1_wait_ack();             /* 等待ACK */
			iic1_stop();                 /* 产生一个停止条件 */
			delay_ms(4);	
}

/*********************************************************
函数功能:接收一个字节
入口参数:
返    回:无。
备    注:无。
作者:Roy
时间:2024-05-17
*********************************************************/
uint8_t GZP6859D_1_ReadByte(uint8_t addr)
{

		uint8_t temp = 0;
		iic1_start();    /* 发送起始信号 */
		iic1_send_byte(0xDA);

		iic1_wait_ack();             /* 每次发送完一个字节,都要等待ACK */
		iic1_send_byte(addr);  /* 发送低位地址 */
		iic1_wait_ack(); 


		iic1_start();    /* 发送起始信号 */
		iic1_send_byte(0xDB);	
		iic1_wait_ack(); 

		temp=iic1_read_byte(0);	
		iic1_wait_ack(); 
		iic1_stop();                 /* 产生一个停止条件 */
		delay_ms(2);		

		return temp;




}

其中读指令测试必要要延时4ms以上才行,这个使用的时候一定要注意,不然就会出现一直读不了数,还不知道是哪里问题。 

 关于初始化

/*********************************************************
函数功能:初始化
入口参数:
返    回:无。
备    注:无。
作者:Roy
时间:2024-05-17
*********************************************************/
void GZP6859D_1_Init(void)
{
				uint8_t Temp_A5;
				uint8_t P1,P2,P3;
				uint8_t T1,T2;
				IIC1_Init();
				GZP6859D_1_WriteByte(0X30,0X0A);		
				T1=	GZP6859D_1_ReadByte(0X09);
				T2=	GZP6859D_1_ReadByte(0X0A);
				P1=	GZP6859D_1_ReadByte(0X06);
				P2=	GZP6859D_1_ReadByte(0X07);
				P3=	GZP6859D_1_ReadByte(0X08);	
	
				printf(">>>>>>>>>压力传感器1初始化完成>>>>>>>>>\r\n");

}

关于压力读取:

/*********************************************************
函数功能:获取压力值
入口参数:
返    回:无。
备    注:无。
作者:Roy
时间:2024-05-17
*********************************************************/
float   GZP6859D_1_GetPressure(void)
{

	uint8_t P1,P2,P3;
	uint8_t T1,T2;
	int32_t Pre ,Temp;
	float Pas;
	float T;
	GZP6859D_1_WriteByte(0X30,0X0A);
	if((GZP6859D_1_ReadByte(0x30) & 0x08)==0)//数据采集完成标志位
	{
		
				T1=	GZP6859D_1_ReadByte(0X09);
				T2=	GZP6859D_1_ReadByte(0X0A);
//				Temp=	T1*256+T2;
//				T=Temp/256;
//				printf("温度1:%.1f\r\n",T);	
		
				P1=	GZP6859D_1_ReadByte(0X06);
				P2=	GZP6859D_1_ReadByte(0X07);
				P3=	GZP6859D_1_ReadByte(0X08);
				Pre =	P1*65536+P2*256+P3;	
		
//				printf("P1:%d\r\n",P1);
//				printf("P2:%d\r\n",P2);
//				printf("P3:%d\r\n",P3);		
//				printf("Pre:%d\r\n",Pre);	


		
				if (Pre > 8388608) //超过8388606 为负压值,需在显示终端做处理
				{
				  Pas = (Pre - 16777216)/128; //单位为pa
					return  0;
//					printf("负数:%d\r\n",Pas);
				}
				else
				{
				  Pas = Pre/128; //400是补偿值

				}
				if (Pas < 0)
				{				
				   Pas = fabs(Pas);
				}
        Pas=Pas/1000-0.05;  //单位为Kpa
//				printf("校准后的气压值:%f\r\n",Pas);	
       return  Pas;
			}
	  return  0;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐