找回密码
 立即注册
查看: 447|回复: 20

STC8H1K08-36I-TSSOP20温感控制处理,需要技术联系

[复制链接]
已绑定手机

1

主题

1

回帖

7

积分

新手上路

积分
7
发表于 2026-7-27 15:12:46 | 显示全部楼层 |阅读模式
STC8H1K08-36I-TSSOP20需要技术联系,芯片现在温感控制一直没处理到,模拟MUX 一直无法处理,请问如何解决?
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
发表于 2026-7-27 15:17:08 | 显示全部楼层
截图202607271516509258.jpg
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
发表于 2026-7-27 15:17:31 | 显示全部楼层

您好!我是 STC 的 FAE 工程师,看到您在论坛上发的帖子,关于 STC8H1K08-36I-TSSOP20 的温感控制(温度传感器)和模拟 MUX(模拟多路选择器/ADC 通道切换)的问题,我来帮您分析一下。


问题分析

您提到的"温感控制"和"模拟MUX",我理解应该是:

  1. 芯片内部温度传感器的读取
  2. ADC 模拟多路选择器(通道切换) 的配置

这两个功能在 STC8H 系列中都是通过 ADC 模块 来实现的。下面我为您梳理一下关键配置步骤。


1. ADC 模拟多路选择器(MUX)配置

STC8H1K08 的 ADC 通道选择是通过 ADC_CONTR 寄存器 中的 CHS[3:0] 位来控制的。根据手册,ADC 的通道选择如下:

CHS3 CHS2 CHS1 CHS0 ADC 通道
0 0 0 0 ADC0 (P10)
0 0 0 1 ADC1 (P11)
0 0 1 0 ADC2 (P12)
0 0 1 1 ADC3 (P13)
0 1 0 0 ADC4 (P14)
0 1 0 1 ADC5 (P15)
0 1 1 0 ADC6 (P16)
0 1 1 1 ADC7 (P17)
1 1 1 0 内部温度传感器
1 1 1 1 内部 1.19V 参考电压

关键点: 要读取内部温度传感器,需要将 CHS[3:0] 设置为 1110(即 0x0E)。


2. 内部温度传感器读取示例代码

以下是一个完整的示例程序,演示如何配置 ADC 并读取内部温度传感器:

#include "STC8H.h"

#define ADC_POWER   0x80    // ADC 电源控制位
#define ADC_START   0x40    // ADC 启动控制位
#define ADC_FLAG    0x20    // ADC 完成标志位
#define ADC_SPEED   0x60    // ADC 速度控制(最快)

// 内部温度传感器通道
#define ADC_CH_TEMP    0x0E    // CHS[3:0] = 1110

// 延时函数
void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for(i = 0; i < ms; i++)
        for(j = 0; j < 1000; j++);
}

// ADC 初始化
void ADC_Init(void)
{
    P_SW2 |= 0x80;          // 使能访问 XFR(扩展寄存器)
  
    // 配置 ADCTIM 寄存器(ADC 时序控制)
    // 使用默认值即可,如需调整可参考手册
  
    // 配置 ADC_CONTR
    ADC_CONTR = ADC_POWER | ADC_SPEED;  // 开启 ADC 电源,设置转换速度
    delay_ms(1);            // 等待 ADC 电源稳定
}

// 读取 ADC 值(指定通道)
unsigned int ADC_Read(unsigned char channel)
{
    unsigned int result;
  
    ADC_CONTR &= ~0x0F;     // 清除通道选择位
    ADC_CONTR |= channel;   // 设置 ADC 通道
  
    ADC_CONTR |= ADC_START; // 启动 ADC 转换
    _nop_();
    _nop_();
  
    while(!(ADC_CONTR & ADC_FLAG));  // 等待转换完成
  
    ADC_CONTR &= ~ADC_FLAG; // 清除完成标志
  
    // 读取结果(ADC_RES 高8位,ADC_RESL 低2位)
    result = ((unsigned int)ADC_RES << 2) | (ADC_RESL & 0x03);
  
    return result;
}

// 计算温度值(近似公式,需根据实际校准)
// 参考电压 1.19V,温度传感器输出电压与温度成线性关系
// 典型值:25°C 时约 0.75V,温度系数约 -2.0mV/°C
float Calc_Temperature(unsigned int adc_value)
{
    float voltage;
    float temp;
  
    // 计算电压值(假设 ADC 参考电压为内部 1.19V,10位分辨率)
    voltage = (float)adc_value * 1.19f / 1024.0f;
  
    // 温度计算公式(典型值,实际需校准)
    // Vtemp = 0.75 - (T - 25) * 0.002
    // 反推:T = 25 + (0.75 - Vtemp) / 0.002
    temp = 25.0f + (0.75f - voltage) / 0.002f;
  
    return temp;
}

void main(void)
{
    unsigned int adc_val;
    float temperature;
  
    // 设置系统时钟(使用内部 IRC)
    // 默认即可
  
    ADC_Init();
  
    while(1)
    {
        // 读取内部温度传感器
        adc_val = ADC_Read(ADC_CH_TEMP);
      
        // 计算温度
        temperature = Calc_Temperature(adc_val);
      
        // 此处可添加串口输出或其它处理
        // 例如通过串口发送温度值
      
        delay_ms(1000);     // 每秒读取一次
    }
}

3. 常见问题排查

如果您遇到"模拟 MUX 一直无法处理"的情况,请检查以下几点:

✅ 检查1:ADC 电源是否开启

ADC_CONTR |= 0x80;   // 必须置位 ADC_POWER 位

开启后需要等待约 1ms 让 ADC 内部电路稳定。

✅ 检查2:端口模式配置

如果使用外部 ADC 通道(如 P10~P17),必须将对应的 I/O 口设置为 高阻输入模式

P1M0 |= 0x01;   // P10 设置为高阻输入
P1M1 |= 0x01;

✅ 检查3:内部温度传感器通道选择

读取内部温度传感器时,必须选择通道 0x0E(CHS[3:0]=1110),不是外部引脚通道。

✅ 检查4:ADC 参考电压

  • 内部温度传感器的输出与 ADC 参考电压 有关
  • 如果使用内部 1.19V 作为参考,则 ADC 满量程为 1.19V
  • 如果使用外部 AVREF 引脚(如果有),则需确保外部参考电压正确

✅ 检查5:ADC 时序配置

如果 ADC 转换结果异常,可以调整 ADCTIM 寄存器中的采样时间:

P_SW2 |= 0x80;
ADCTIM = 0x3F;   // 设置较长的采样时间,确保采样稳定

4. 需要进一步确认的信息

为了更准确地帮您解决问题,请您提供以下信息:

  1. 您具体想读取的是内部温度传感器,还是外部 NTC 热敏电阻等温感元件?
  2. "模拟MUX一直无法处理"的具体现象是什么?(例如:ADC 转换结果始终为 0?始终为最大值?通道切换无效?)
  3. 您是否已经配置了 ADC 相关的寄存器? 能否贴出您当前的代码片段?
  4. 您使用的参考电压是内部 1.19V 还是外部参考?

如果您方便的话,可以直接回复此帖或联系我,我会进一步协助您调试。STC8H1K08 的 ADC 和温度传感器功能是经过充分验证的,只要配置正确就能正常工作。


🔍 搜索 "https://www.stcaimcu.com/thread-25021-1-1.html"

⏱️ 查找用时 3.3s | 总回答用时 21.6s

回复

使用道具 举报 送花

已绑定手机

1

主题

1

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2026-7-27 15:27:59 | 显示全部楼层
好的,谢谢解疑。
回复

使用道具 举报 送花

0

主题

6

回帖

20

积分

新手上路

积分
20
发表于 2026-7-27 15:38:30 | 显示全部楼层
神*** 发表于 2026-7-27 15:17
您好!我是 STC 的 FAE 工程师,看到您在论坛上发的帖子,关于 STC8H1K08-36I-TSSOP20 的温感控制(温度传 ...

你看下我们的操作是否哪里有问题
01.png
02.png


03.png
04.png
05.png

点评

你自己直接将问题放到 【AI助手】中问  详情 回复 发表于 2026-7-27 15:39
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
发表于 2026-7-27 15:39:45 | 显示全部楼层
逆胜*** 发表于 2026-7-27 15:38
你看下我们的操作是否哪里有问题

你自己直接将问题放到 【AI助手】中问


截图202607271540445576.jpg
回复

使用道具 举报 送花

83

主题

8219

回帖

1万

积分

超级版主

积分
17644
发表于 2026-7-27 16:17:19 | 显示全部楼层
能否贴出电路?
回复

使用道具 举报 送花

0

主题

6

回帖

20

积分

新手上路

积分
20
发表于 2026-7-27 19:52:38 | 显示全部楼层
梁*** 发表于 2026-7-27 16:17
能否贴出电路?

001.png

这个做的温感控制,NTC温度高了就升压,温度降了就降压,环境温度的电压大约2.5V。

点评

NTC测温是很基本的,就是ADC转换后计算温度而已,没有一点难度,请详细描述一下你的问题所在。  详情 回复 发表于 2026-7-27 22:13
回复

使用道具 举报 送花

0

主题

6

回帖

20

积分

新手上路

积分
20
发表于 2026-7-27 19:58:14 | 显示全部楼层
神*** 发表于 2026-7-27 15:17
您好!我是 STC 的 FAE 工程师,看到您在论坛上发的帖子,关于 STC8H1K08-36I-TSSOP20 的温感控制(温度传 ...

现在我们自己的工程师始终无法实时获取温控保护,而外包的技术只要NTC温度升高就可以实时获取,通过AI说硬件不支持,这就让我们工程师很疑惑。不清楚外包人员怎么做的。外包人员代码加密,只让烧录,不给源代码。
回复

使用道具 举报 送花

已绑定手机

10

主题

409

回帖

1119

积分

金牌会员

积分
1119
发表于 2026-7-27 20:08:27 | 显示全部楼层
神*** 发表于 2026-7-27 15:17
您好!我是 STC 的 FAE 工程师,看到您在论坛上发的帖子,关于 STC8H1K08-36I-TSSOP20 的温感控制(温度传 ...

STC8H1K08有内部温度传感器吗?怎么用户手册未见表述。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-23 15:05 , Processed in 0.082740 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表