当前位置:文档之家› 数字SPI接口压力传感器C驱动

数字SPI接口压力传感器C驱动

/****************************************************************************
* 文件名:SPI_PRESS.C
* 功能:森斯SPI数字压力传感器 C驱动程序
** 硬件连接:

-------------------------------------------------------|
| __________________ |
|-- □| ______________ |□---------------------| |
| | | | | |
□| | | |□---------------| | |
| | | | | | |
□| | | |□---------| | | |
| |___ ________| | | | | |
□|_____| |__________|□---| | | | |
_| |_ | | | | |
\___/ _______|_____|_____|_____|_____|____
|引脚| 1 | 2 | 3 | 4 | 5 |
|名称| GND | VCC | MISO| SCLK| SS |
| | | | |
电源地------| | | | |
| | | |
+3.3V电源---------| | | |
| | |
数据输出------------------| | |
| |
时钟输入------------------------| |
|
片选信号------------------------------|
****************************************************************************/
#include "CONFIG.H"
#include "SPI_PRESS.H"
#include "DELAY.H"

/****************************************************************
外部变量
{
}***************************************************************/
extern uint16_t DevState; // 硬件状态
/*********************************************************************************************************
** 函数名称: Read_SPI_Press
** 功能描述: 读取罐压力森斯压力传感器压力值(14位AD值,零点 = 8192)
** 输 入: 传感器选择
** 输 出: 压力AD值
********************************************************************************************************/
uint16_t Read_SPI_Press(uint8_t num)
{
uint16_t buf[4];
uint16_t pre;
uint8_t mask,i,dat,pin;
if(num == PRE_PDF)
PRE_SS_PDF_L;
else if(num == PRE_PDR)
PRE_SS_PDR_L;
else if(num == PRE_BA)
PRE_SS_BA_L;
else if(num == PRE_PD)
PRE_SS_PD_L;
else if(num == PRE_PT)
PRE_SS_PT_L;
else
return 0;
Delay_us(2);

for(i=0;i<4;i++)
{
mask = 0x80;
dat = 0x00;
for(;mask!=0;)
{
PRE_SCLK_H;
PRE_MISO_PIN = 1;
Delay_us(1);
pin = READ_PRE_MISO;
if(pin == 1)
{
dat += mask;
}
PRE_SCLK_L;
Delay_us(1);
mask = mask>>1;
}
buf[i] = dat;
}
PRE_SS_PDF_H;
PRE_SS_PDR_H;
PRE_SS_BA_H;
PRE_SS_PD_H;
PRE_SS_PT_H;
Delay_us(2);
pre=(buf[0]<<8)+buf[1];
if((pre == 0x0000)||(pre == 0xFFFF)) // 传感器故障
{
if(num == PRE_PDF)
DevState |= Dev_Bit_Pdf;
else if(num == PRE_PDR)
DevState |= Dev_Bit_Pdr;
else

if(num == PRE_BA)
DevState |= Dev_Bit_Ba;
else if(num == PRE_PD)
DevState |= Dev_Bit_Pd;
else if(num == PRE_PT)
DevState |= Dev_Bit_Pt;
return 0;
}
else
{
if(num == PRE_PDF)
DevState &= ~Dev_Bit_Pdf;
else if(num == PRE_PDR)
DevState &= ~Dev_Bit_Pdr;
else if(num == PRE_BA)
DevState &= ~Dev_Bit_Ba;
else if(num == PRE_PD)
DevState &= ~Dev_Bit_Pd;
else if(num == PRE_PT)
DevState &= ~Dev_Bit_Pt;
pre = pre&0x3FFF;
return pre;
}
}
/*********************************************************************************************************
** 函数名称: Get_SPI_Press
** 功能描述: 获得压力传感器压力值平滑处理(14位AD值),50次平均处理共耗时约9.4ms
** 输 入: 传感器选择
** 输 出: 压力AD值
********************************************************************************************************/
float Get_SPI_Press(uint8_t num)
{
uint8_t i;
uint32_t preadd = 0;
float pre;
for(i=0;i<50;i++)
{
preadd = preadd + Read_SPI_Press(num);
}
pre = preadd;
pre = pre/50;
return pre;
}





相关主题
文本预览
相关文档 最新文档