找回密码
 立即注册
查看: 214|回复: 10

【整个小活】基于STC8H内部RC时钟温飘的温度计,0外设测量温度

[复制链接]
  • TA的每日心情
    慵懒
    2024-4-13 22:07
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    5

    主题

    16

    回帖

    25

    积分

    新手上路

    积分
    25
    发表于 2024-4-1 20:29:38 | 显示全部楼层 |阅读模式
    众所周知,STC8H系列内部32K时钟温飘特别大,频率温飘基本相当于一个NTC电阻的阻值。


    2024-04-01_20-19.png

    把系统时钟调低,比如11.0592MHz,这样内部16位计时器就能充分的测量一个1/32的RTC中断,即可从计时器值估测内部RTC频率;
    再根据温飘映射到文档数值,就知道此时单片机的温度了。

    1. void init_rtc() {
    2.     // 选择内部 32K
    3.     IRC32KCR = 0x80; // 启动内部 32K 振荡器
    4.     while (!(IRC32KCR & 0x01))
    5.         ;           // 等待时钟稳定
    6.     RTCCFG |= 0x02; // 选择内部 32K 作为 RTC 时钟源
    7.     // 设置 RTC 时间
    8.     INIYEAR = 00;
    9.     INIMONTH = 1;
    10.     INIDAY = 15;
    11.     INIHOUR = 15;
    12.     INIMIN = 30;
    13.     INISEC = 0;
    14.     INISSEC = 0;
    15.     RTCCFG |= 0x01; // 触发 RTC 寄存器初始化
    16.     RTCIF = 0;     // 清中断标志
    17.     RTCIEN = 0x01; // 使能 RTC 1/32秒中断
    18.     RTCCR = 0x01;  // RTC 使能
    19. }
    20. // @11.0592MHz
    21. void init_tm0(void) {
    22.     AUXR &= 0x7F; // 定时器时钟12T模式
    23.     TMOD &= 0xF0; // 设置定时器模式
    24.     TMOD |= 0x01; // 设置定时器模式
    25. }
    26. uint8_t data temp_tl = 0;
    27. uint8_t data temp_th = 0;
    28. void isr_rtc() interrupt(RTC_VECTOR) using(1) {
    29.     RTCIF = 0; // 清中断标志
    30.     TR0 = 0;
    31.     temp_tl = TL0;
    32.     temp_th = TH0;
    33.     TL0 = 0xff;
    34.     TH0 = 0xff;
    35.     TF0 = 0;
    36.     TR0 = 1;
    37. }
    38. void main() {
    39.     init_sys();
    40.     init_uart();
    41.     init_tm0();
    42.     init_rtc();
    43.     while (1) {
    44.         uint16_t c = 0xffff - (temp_th << 8 | temp_tl);
    45.         int16_t t = (650 * ((int32_t)33563 - c)) / 7900;
    46.         printf("t: %d\r\n", t);
    47.         delay_ms(1000);
    48.     }
    49. }
    复制代码


    量程0 ~ 65度,上面的简单线性映射是我用冰块和热水校准的。
    其中映射关系因为每个芯片的体制不一样,必须校准。
    为了避免计算浮点数,温度t的数值单位是10摄氏度,既24.3C => 243。
    假定电压和主时钟是稳定的。

    测量精度在室温还说的过去

    1. // 室温输出
    2. t: 242
    3. // 手按上去加热
    4. t: 271
    5. // 冰块贴到芯片上
    6. t: 18
    复制代码



    各位愚人节快乐

    回复 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-13 22:07
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    5

    主题

    16

    回帖

    25

    积分

    新手上路

    积分
    25
     楼主| 发表于 2024-4-1 20:31:39 | 显示全部楼层
    测试用的芯片是stc8h8k64u,实测。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:41
  • 签到天数: 63 天

    [LV.6]常住居民II

    0

    主题

    157

    回帖

    425

    积分

    中级会员

    积分
    425
    发表于 2024-4-1 22:13:35 | 显示全部楼层
    未曾设想的逆向思维
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 16:59
  • 签到天数: 164 天

    [LV.7]常住居民III

    9

    主题

    310

    回帖

    3789

    积分

    荣誉版主

    积分
    3789
    发表于 2024-4-1 22:46:09 | 显示全部楼层
    很有趣的想法
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 23:21
  • 签到天数: 174 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1371

    积分

    荣誉版主

    积分
    1371
    发表于 2024-4-2 05:50:10 | 显示全部楼层
    楼主的想象力很丰富。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    3 小时前
  • 签到天数: 83 天

    [LV.6]常住居民II

    4

    主题

    497

    回帖

    1353

    积分

    金牌会员

    积分
    1353
    发表于 2024-4-2 07:44:45 | 显示全部楼层
    奇思妙想
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 74 天

    [LV.6]常住居民II

    7

    主题

    144

    回帖

    394

    积分

    中级会员

    积分
    394
    发表于 2024-4-2 07:49:13 | 显示全部楼层
    还能这么搞啊
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 159 天

    [LV.7]常住居民III

    0

    主题

    408

    回帖

    500

    积分

    高级会员

    积分
    500
    发表于 2024-4-2 08:05:43 | 显示全部楼层
    佩服楼主的思维
    靡不有初,鲜克有终
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    1 小时前
  • 签到天数: 178 天

    [LV.7]常住居民III

    12

    主题

    353

    回帖

    1178

    积分

    金牌会员

    积分
    1178
    发表于 2024-4-2 08:14:32 | 显示全部楼层
    可以,用MATLAB拟合一下可以比较准确的获取当前温度
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    1 小时前
  • 签到天数: 145 天

    [LV.7]常住居民III

    20

    主题

    1101

    回帖

    2627

    积分

    金牌会员

    积分
    2627
    发表于 2024-4-2 08:51:19 | 显示全部楼层
    是不是还可以将ADC参考电压和MCU电源接起来,根据ADC15通道 测量单片机的供电电压再根据电压图修正一下。。
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-21 09:44 , Processed in 0.073947 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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