1614809_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1614809_zh-CN

1614809_zh-CN

读取 NTM88 上 PTB0 引脚的电压

我使用的是 NTM88 TPMS 传感器,我想读取 PTB0 引脚上的电压。我正在调用函数 vfnTakeSensorsMeasurements(TAKE_P|TAKE_V|TAKE_T|TAKE_Z|COMP); 来获取压力、电压、温度和 Z 轴读数。我的其他参数读数正常,但电压读数却不正常。无论引脚接地还是连接到 Vcc,它的原始读数都是 195。我想测量 PTB0 引脚上的电压,还有什么其他步骤没有完成吗?在哪里配置测量电压的引脚?我的情况是 PTB0

Re: reading voltage on pin PTB0 on NTM88

嗨,安基特、

如果 VDD 连接到 PTB1,那么函数返回 1023 是正常的。

使用 TPMS_READ_VOLTAGE 测量电源电压,然后再使用 TPMS_COMP_VOLTAGE。数据手册中给出了将补偿电压值从计数转换为伏特的转换函数。

顺祝商祺!

托马斯

Re: reading voltage on pin PTB0 on NTM88

嗨,托马斯、

浏览完数据表后我发现,在测量引脚 PTB0 和 PTB1 上的外部电压时,它采用 VDD 作为参考电压,这就是它可能始终将 1023 作为原始计数的原因,因为我正在尝试使用这个引脚测量电源电压(用作电源的纽扣电池的电压),当我的电源电压变低时,参考电压也会变低,因此它显示 1023。有没有办法测量电源电压到 NTM88。

Re: reading voltage on pin PTB0 on 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;
}

Re: reading voltage on pin PTB0 on NTM88

嗨,安基特、

在 vfntakeSensorsMeasuremensions () 中调用的 TPMS_READ_VOLTAGE 函数用于测量电池电压。

使用 TPMS_READ_V0 功能可测量 PTB0 引脚的电压。调用该函数前,必须将 PTB0 引脚配置为输入。

通过 TPMS_READ_V1 功能测量 PTB1 引脚的电压。调用该功能前,必须将 PTB1 引脚配置为输入。

固件库用户指南中提供了所有库函数的列表和说明:

https://www.nxp.com/webapp/Download?colCode=UM11145

顺祝商祺!

托马斯

Tags (1)
No ratings
Version history
Last update:
‎02-04-2026 09:09 AM
Updated by: