我使用的是 NTM88 TPMS 传感器,我想读取 PTB0 引脚上的电压。我正在调用函数 vfnTakeSensorsMeasurements(TAKE_P|TAKE_V|TAKE_T|TAKE_Z|COMP); 来获取压力、电压、温度和 Z 轴读数。我的其他参数读数正常,但电压读数却不正常。无论引脚接地还是连接到 Vcc,它的原始读数都是 195。我想测量 PTB0 引脚上的电压,还有什么其他步骤没有完成吗?在哪里配置测量电压的引脚?我的情况是 PTB0
嗨,安基特、
如果 VDD 连接到 PTB1,那么函数返回 1023 是正常的。
使用 TPMS_READ_VOLTAGE 测量电源电压,然后再使用 TPMS_COMP_VOLTAGE。数据手册中给出了将补偿电压值从计数转换为伏特的转换函数。
顺祝商祺!
托马斯
嗨,托马斯、
浏览完数据表后我发现,在测量引脚 PTB0 和 PTB1 上的外部电压时,它采用 VDD 作为参考电压,这就是它可能始终将 1023 作为原始计数的原因,因为我正在尝试使用这个引脚测量电源电压(用作电源的纽扣电池的电压),当我的电源电压变低时,参考电压也会变低,因此它显示 1023。有没有办法测量电源电压到 NTM88。
我尝试使用 TPMS_READ_V1 测量 PTB1 引脚上的电压,在"gau16UUMA" 中,无论电压值如何,原始计数都是 1023,而在"gu8CompVolt" 中,补偿后的电压计数是 255。我是不是做错了什么?
void vfnTakeSensorsMeasurements (UINT8 u8sens_select)
{
/* 启用带隙 - V 和 T 测量需要
* 需要 25µs 才能稳定。
*/
SPMSC1_BGBE = 1;
vfnDelayMicroSec(4); // 执行 28us 延迟
/* 清除采集状态 */
gu8StatusAcq = 0;
/*
* TEMPERATURE
*/
if ((u8sens_select& TAKE_T) == TAKE_T)
{
gu8StatusAcq |= TPMS_READ_TEMPERATURE (gau16UUMA);
if ((u8sens_select& COMP) == COMP)
{
gu8StatusAcq |= TPMS_COMP_TEMPERATURE (&gu8CompTemp, gau16UUMA);
}
}
/*
* VOLTAGE
*/
if ((u8sens_select& TAKE_V) == TAKE_V)
{
PTBDD_PTBDD1 = 0;
gu8StatusAcq |= TPMS_READ_V1 (gau16UUMA,1);
if ((u8sens_select& COMP) == COMP)
{
gu8StatusAcq |= TPMS_COMP_VOLTAGE (&gu8CompVolt, gau16UUMA);
}
}
/*
* PRESSURE
*/
if ((u8sens_select& TAKE_P) == TAKE_P)
{
gu8StatusAcq |= TPMS_READ_PRESSURE (gau16UUMA, 1u);
if ((u8sens_select& COMP) == COMP)
{
// 执行压力补偿需要原始温度和电压
if ((u8sens_select& TAKE_T) != TAKE_T)
{
gu8StatusAcq |= TPMS_READ_TEMPERATURE (gau16UUMA);
}
if ((u8sens_select& TAKE_V) != TAKE_V)
{
gu8StatusAcq |= TPMS_READ_VOLTAGE (gau16UUMA);
}
gu8StatusAcq |= TPMS_COMP_PRESSURE (&gu16CompPressure, gau16UUMA);
}
}
/*
* ACCELERATION X
*/
gu8AccelOffsetX = 7;
if ((u8sens_select& TAKE_X) == TAKE_X)
{
if ((u8sens_select& RAW_DYN) == RAW_DYN)
{
gu8StatusAcq |= TPMS_READ_DYNAMIC_ACCEL_X (LPF_500HZ,&gu8AccelOffsetX, gau16UUMA);
}
else
{
gu8StatusAcq |= TPMS_READ_ACCEL_X(gau16UUMA, 1, LPF_500HZ, gu8AccelOffsetX);
}
if ((u8sens_select& COMP) == COMP)
{
// 执行加速度补偿需要原始温度和电压
if ((u8sens_select& TAKE_T) != TAKE_T)
{
gu8StatusAcq |= TPMS_READ_TEMPERATURE (gau16UUMA);
}
if ((u8sens_select& TAKE_V) != TAKE_V)
{
gu8StatusAcq |= TPMS_READ_VOLTAGE (gau16UUMA);
}
gu8StatusAcq |= TPMS_COMP_ACCEL_X ((UINT16*)&gu16CompAccelX, gau16UUMA);
}
} }// 结束 X 测量
/*
* 加速 Z
*/
gu8AccelOffsetZ = 7;
if ((u8sens_select& TAKE_Z) == TAKE_Z)
{
if ((u8sens_select& RAW_DYN) == RAW_DYN)
{
gu8StatusAcq |= TPMS_READ_DYNAMIC_ACCEL_Z (LPF_500HZ,&gu8AccelOffsetZ, gau16UUMA);
}
else
{
gu8StatusAcq |= TPMS_READ_ACCEL_Z(gau16UUMA, 1, LPF_500HZ, gu8AccelOffsetZ);
}
if ((u8sens_select& COMP) == COMP)
{
// 执行加速度补偿需要原始温度和电压
if ((u8sens_select& TAKE_T) != TAKE_T)
{
gu8StatusAcq |= TPMS_READ_TEMPERATURE (gau16UUMA);
}
if ((u8sens_select& TAKE_V) != TAKE_V)
{
gu8StatusAcq |= TPMS_READ_VOLTAGE (gau16UUMA);
}
gu8StatusAcq |= TPMS_COMP_ACCEL_Z ((UINT16*)&gu16CompAccelZ, gau16UUMA);
}
} }// 结束 Z 测量
/* 禁用带隙 - 允许我们节省一些电能 */
SPMSC1_BGBE = 0;
}
嗨,安基特、
在 vfntakeSensorsMeasuremensions () 中调用的 TPMS_READ_VOLTAGE 函数用于测量电池电压。
使用 TPMS_READ_V0 功能可测量 PTB0 引脚的电压。调用该函数前,必须将 PTB0 引脚配置为输入。
通过 TPMS_READ_V1 功能测量 PTB1 引脚的电压。调用该功能前,必须将 PTB1 引脚配置为输入。
固件库用户指南中提供了所有库函数的列表和说明:
https://www.nxp.com/webapp/Download?colCode=UM11145
顺祝商祺!
托马斯