0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >健康医疗 > 基于澎湃微PT32x033系列的NTC应用 血糖仪环境温度监测设计方案?

基于澎湃微PT32x033系列的NTC应用 血糖仪环境温度监测设计方案?

来源:
2024-10-15
类别:健康医疗
eye 9
文章创建人 拍明芯城

基于澎湃微PT32x033系列的NTC应用:血糖仪环境温度监测设计方案

一、引言

血糖仪作为现代医疗诊断的重要工具,其准确性和稳定性对病患的健康管理至关重要。血糖仪的工作原理是通过电化学原理,测试血糖试纸反应区内的生化酶与血液中的葡萄糖产生的微电流,再转化成葡萄糖浓度读数。这一过程对于测试环境的温度有着较高的要求,适宜血糖仪运作的温度一般来说在10℃~40℃之间,太冷或者太热的环境均会影响其测试准确性。因此,设计一个有效的环境温度监测系统,对血糖仪的测试精度和可靠性具有重大意义。

image.png

本文基于澎湃微PT32x033系列MCU,提出了一种基于NTC电阻(负温度系数热敏电阻)的血糖仪环境温度监测设计方案。通过详细阐述主控芯片的型号、功能及其在设计中的具体作用,旨在为血糖仪的环境温度监测提供一种高效、可靠的解决方案。

二、主控芯片型号及功能

2.1 主控芯片型号

本方案采用的主控芯片为澎湃微PT32x033系列MCU。该系列MCU以其低功耗和丰富的外设模块著称,特别适用于血糖仪等便携式医疗设备。

具体来说,PT32x033系列MCU包括多个型号,如PT32L033等。这些型号在功能和外设上略有差异,但均具备强大的数据处理能力和低功耗特性,能够满足血糖仪环境监测的需求。

2.2 主控芯片功能

PT32x033系列MCU的主要功能包括:

  1. 低功耗设计

    • 提供正常工作模式和低功耗模式,其中低功耗模式又分为普通休眠低功耗模式和深度休眠低功耗模式。

    • 一颗纽扣电池至少能保障仪器正常工作3年。

    • 可以通过失能未被使用的时钟源、外设,以及配置GPIO为输入同时做下拉处理等方式进一步降低功耗。

  2. 高性能外设

    • 内嵌LCD驱动器,支持多种复用技术,可用于驱动液晶显示屏。

    • 集成两路高性能的OPA(运算放大器),用于小信号放大。

    • 集成一路12位的ADC(模数转换器)和一路12位的DAC(数模转换器),用于信号的采集和转换。

  3. 实时时钟(RTC)

    • 提供高精度的实时时钟功能,可用于记录血糖测试的时间。

  4. 灵活的电源管理

    • 提供多种电源管理策略,包括电源调整器部分(Power Regulator),用于产生LCD驱动所需的最高直流电平。

  5. 丰富的接口

    • 提供多种通信接口,如UART、SPI、I2C等,便于与其他外设或上位机进行通信。

三、NTC电阻在血糖仪中的应用

3.1 NTC电阻概述

NTC电阻,即负温度系数热敏电阻,指的是阻值随温度上升而呈指数关系减小的现象和材料。NTC热敏电阻一般以锰、钴、镍和铜等金属氧化物为主要材料,采用陶瓷工艺制造而成。这些金属氧化物在导电方式上完全类似锗、硅等半导体材料:温度越低,这些氧化物材料的载流子(电子和空穴)数目减少,其电阻增大;温度越高,氧化物材料的载流子数目增多,其电阻减小。NTC电阻以其成本低、精度高的特性,被越来越广泛地应用在各种场合。

3.2 NTC电阻在血糖仪中的应用

血糖仪采用电化学原理,测试血糖试纸反应区内的生化酶与血液中的葡萄糖产生的微电流,再转化成葡萄糖浓度读数。这一过程对于测试环境的温度有着较高的要求。使用NTC电阻检测温度并对结果进行温度补偿,可以避免测试结果因外界温度产生偏差,耽误病患的治疗。

四、基于PT32x033的NTC应用方案

4.1 NTC电路设计

NTC常规的应用是将热敏电阻和普通电阻器串联连接,并施加以恒定电压VIN,再将端点电压VNTC接入到ADC中采样。使用这种电路,热敏电阻此时的阻值可以通过相应的公式计算得出。

在血糖仪应用中,PT32x033提供了几种配置策略来提供恒定的电压源VIN,如通过AVREF+引脚或间接通过DVREF+引脚接入BG2v0作为恒压源。

4.2 ADC配置与采样

PT32x033内部集成了一个12bit分辨率的高精度ADC,提供了多个可选的参考源,如VDDA、BG2V0、AVREF+等。在血糖仪应用中,选择BG2v0以提供成本和精度间的最佳平衡。

ADC的采样率可支持到500KSPS,能够满足血糖仪对环境温度实时监测的需求。通过ADC采样得到的VNTC电压值,可以进一步通过计算得出NTC电阻的阻值。

4.3 温度算法实现

NTC的温度算法常见的有三种:B值法、查表法和线性拟合法。其中,B值法需要占用较大的计算资源,但其得出的数据准确度较高。血糖仪Demo板上使用的就是这种方法。

B值法根据一条公式,仅需要代入NTC电阻值和B值这两个变量,即可获取温度值。公式中的TN为常量,表示25℃的开尔文温度单位(298.15K),B为变量,指NTC电阻的B值。血糖仪Demo板上使用的NTC电阻B值为3380。

通过PT32x033的MCU内部处理器,可以实时计算并得出环境温度值,从而实现对血糖仪测试环境的实时监测和补偿。

五、低功耗设计与实现

5.1 低功耗模式配置

PT32x033提供两种低功耗模式:普通休眠低功耗模式和深度休眠低功耗模式。在正常工作模式下,可以通过失能未被使用的时钟源、外设,以及配置GPIO为输入同时做下拉处理等方式进一步降低功耗。

使用ARM Cortex-M0的Wait for Interrupt (WFI)和wait for Event (WFE)两条指令可以使芯片进入休眠模式或深度睡眠模式。当执行WFI或WFE指令后,芯片进入哪种低功耗模式,由系统控制寄存器(SCR)的SLP位决定。

5.2 超低功耗设计注意事项

在超低功耗模式下,需要注意以下几点:

  • PB9管脚由于作为Crystal_OUT管脚内部存在下拉反馈电阻,因此休眠过程不能存在外部或者内部上拉电阻导致漏电。

  • 超低功耗模式下,不相关的模拟外设软件需要主动关闭,比如内部2V参考以及OPA。

  • 超低功耗模式下,不相关的引脚复用功能全部清除并且软件做下拉处理。

  • WFE为事件唤醒方式,那么只需要配置NVIC以及中断类型(无需响应中断)即可产生唤醒;如配置为WFI中断唤醒方式,那么需要使能中断(需要响应中断)才可产生唤醒。

六、软件设计与实现

6.1 软件架构

软件设计采用模块化架构,主要包括以下几个模块:

  • 初始化模块:负责系统初始化、时钟配置、外设初始化等。

  • ADC采样模块:负责NTC电阻电压的采样和转换。

  • 温度计算模块:根据采样得到的电压值,通过B值法计算得出环境温度值。

  • LCD显示模块:将环境温度值显示在液晶显示屏上。

  • 低功耗管理模块:负责低功耗模式的配置和切换。

6.2 关键代码实现

以下是部分关键代码的实现示例:


// ADC初始化配置  

void ADC_Init(void)  

{

// 配置ADC控制寄存器  

ADC_CR = ...;

// 配置ADC状态寄存器  

ADC_STAU = ...;

// 配置ADC数据寄存器  

ADC_DATA = ...;

// 配置ADC采样时间寄存器  

ADC_SAMPLE = ...;

// 启动ADC  

ADC_CR |= ADC_CR_EN;

}



// 温度计算函数  

float CalculateTemperature(uint16_t adcValue)  

{

// 根据NTC电阻的阻值和B值计算温度  

// 公式:TN = (B * T * ln(R/R0)) / (B + T * ln(R/R0)) + T0  

// 其中,TN为温度(K),T为常数(298.15K),R为NTC电阻阻值,R0为NTC电阻在25℃时的阻值,B为NTC电阻的B值  

// adcValue为ADC采样得到的电压值,需要通过公式转换为NTC电阻的阻值  

float R = ...; // 根据adcValue计算得到的NTC电阻阻值  

float TN = (B * 298.15 * log(R / R0)) / (B + 298.15 * log(R / R0)) + 298.15;

return TN - 273.15; // 将开尔文温度转换为摄氏度  

}



// LCD显示函数  

void LCD_DisplayTemperature(float temperature)  

{

// 将温度值显示在LCD上  

// 具体实现依赖于LCD驱动器的配置和显示逻辑  

...

}



// 低功耗管理函数  

void LowPowerMode_Enter(void)  

{

// 配置系统控制寄存器,准备进入低功耗模式  

SCR = ...;

// 执行WFI或WFE指令,

进入低功耗模式。


// 对于WFI指令,芯片会等待中断唤醒;

// 对于WFE指令,芯片会等待特定事件唤醒。

__WFI(); // 或者使用 __WFE() 根据具体需求选择。



// 注意:在实际应用中,需要根据具体的低功耗需求和唤醒条件,

// 配置相应的中断和事件,以确保在低功耗模式下能够正确唤醒。

}

// 主函数
int main(void)
{
// 系统初始化
System_Init();


// ADC初始化

ADC_Init();



// 无限循环,实时监测环境温度

while (1)

{

// 采集NTC电阻的电压值

uint16_t adcValue = ADC_Sample();



// 计算环境温度

float temperature = CalculateTemperature(adcValue);



// 显示环境温度

LCD_DisplayTemperature(temperature);



// 如果没有其他任务需要处理,进入低功耗模式

LowPowerMode_Enter();

}



// 注意:在实际应用中,通常不会直接在这里进入低功耗模式,

// 因为会有其他任务(如按键扫描、通信处理等)需要处理。

// 这里只是为了演示低功耗模式的进入方式。



return 0; // 虽然对于嵌入式系统来说,main函数通常不会返回。

}

// ADC采样函数(示例)
uint16_t ADC_Sample(void)
{
// 启动ADC采样
ADC_CR |= ADC_CR_START;


// 等待采样完成(可以通过查询状态寄存器或中断方式实现)

// 这里为了简化示例,使用简单的延时等待(不推荐在实际应用中使用)

for (volatile int i = 0; i < 1000000; i++);



// 读取ADC数据

uint16_t adcValue = ADC_DATA;



// 停止ADC采样(如果需要)

ADC_CR &= ~ADC_CR_START;



return adcValue;

}

// 系统初始化函数(示例)
void System_Init(void)
{
// 配置系统时钟
SystemClock_Config();


// 初始化GPIO

GPIO_Init();



// 初始化LCD

LCD_Init();



// 其他初始化操作...

}

// 系统时钟配置函数(示例)
void SystemClock_Config(void)
{
// 根据具体需求配置系统时钟
// 这里只是一个示例,具体实现依赖于具体的MCU型号和时钟源
...
}

// GPIO初始化函数(示例)
void GPIO_Init(void)
{
// 根据具体需求配置GPIO
// 这里只是一个示例,具体实现依赖于具体的MCU型号和GPIO配置需求
...
}

// LCD初始化函数(示例)
void LCD_Init(void)
{
// 根据具体需求初始化LCD
// 这里只是一个示例,具体实现依赖于具体的LCD型号和驱动方式
...
}

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告