[LKS32 硬件] 【LKS32MC081评测】+片内温度检测与显示

[复制链接]
1739|7
 楼主| jinglixixi 发表于 2022-6-13 00:36 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2022-6-13 00:38 编辑

LKS08X系列芯片内集成了高速的12BIT ADC ,并可接入12路外部ADC输入通道。
此外,它还内置温度传感器,当温度在-40~85℃之间时,其精度为 2℃;当温度在85~105℃时,其精度为3℃。且在出厂前,已进行温度校正,其校正值保存在 flash info 区。
在上电后的默认状态下,该温度传感器是关闭的。若开启该传感器,需要先开启 BGP 模块。
温度传感器通过设置 TMPPDN=1 打开,开启到稳定需要约 2us,因此需在 ADC测量传感器之前 2us 打开。温度传感器的信号被连到 ADC 的通道 18。
温度校正后的温度传感器曲线如图1所示,其中X轴为温度传感器的温度信号所对应的 ADC 值, Y 轴为传感器所对应的温度。
1.jpg
图1 温度曲线
在测温时,通过读取ADC 值即可推算出温度,其对应的计算公式为:
y=-0.6032x+364.96
实现片内温度检测的主程序为:
  1. uint32_t a = 0, b = 0;
  2. uint32_t TEMP = 0;
  3. extern int Voltage0_Value1;
  4. int main(void)
  5. {
  6.          Hardware_init();                                      // 硬件初始化
  7.          while (1)
  8.          {
  9.                    SYS_AFE_REG5 |= BIT13;                                                 // 开启温度传感器
  10.                    Read_More_Flash(0x00000398, 1, &a, 1);               // 读NVR温度校正系数a程序
  11.                    Read_More_Flash(0x0000039C, 1, &b, 1);               // 读NVR温度校正系数b内程序
  12.                    TEMP = (-((Voltage0_Value1 >> 4) * a / 10000)) + (b / 10);  // 当前芯片温度单位℃
  13.                    delay(0xffff0);                                     // 延时
  14.          }
  15. }

由于该检测程序并没有配置相应的显示输出功能,故在测试时只能在调试模式下通过查看变量值来解决。
为了能更直观地查看结果,可将该程序与前面介绍的串行数码管模块结合起来,其显示效果如图2所示。
2.jpg
图2 片内温度显示
实现该显示效果的主程序如下:
  1. uint32_t a = 0, b = 0;
  2. uint32_t TEMP = 0;
  3. extern int Voltage0_Value1;
  4. int main(void)
  5. {
  6.          uint8_t n;
  7.          Hardware_init();
  8.          smg_init();
  9.          GPIO_SetBits(GPIO1, GPIO_Pin_10);
  10.          GPIO_SetBits(GPIO1, GPIO_Pin_11);
  11.          Init_MAX7219();
  12.          delay(2000);
  13.          Write_Max7219(0x0f, 0x00);
  14.          Write_Max7219(1, 0x0f);
  15.          Write_Max7219(2, 0x0f);
  16.          Write_Max7219(3, 0x0f);
  17.          Write_Max7219(4, 0x0f);
  18.          Write_Max7219(5 ,0x0f);
  19.          Write_Max7219(6,0x0f);
  20.          Write_Max7219(7,0x0f);
  21.          Write_Max7219(8,0x0f);
  22.          while (1)
  23.          {
  24.                    SYS_AFE_REG5 |= BIT13;
  25.                    Read_More_Flash(0x00000398, 1, &a, 1);
  26.                    Read_More_Flash(0x0000039C, 1, &b, 1);
  27.                    TEMP = (-((Voltage0_Value1 >> 4) * a / 10000)) + (b / 10);
  28.                    Write_Max7219(4,0x0f);
  29.                    Write_Max7219(3,0x0f);
  30.                    n=TEMP%100/10;
  31.                    Write_Max7219(2,n);
  32.                    n=TEMP%10;
  33.                    Write_Max7219(1,n);
  34.                    delay(0xffff0);
  35.          }
  36. }

此外,由于数码管显示模块所使用的引脚为P1.10、P1.11及P0.4,它与例程中函数Hardware_init()的处理有一些重叠,故需要加以适当的修改。对应的方法不外乎2个,一个是修改数码管显示模块所占用的引脚,另一个就是排除引脚的冲突。相对来讲还是选取后者比较快捷,修改完成后其内容如下:
  1. void Hardware_init(void)
  2. {
  3.   __disable_irq();
  4.   SYS_WR_PROTECT = 0x7a83;
  5.   FLASH_CFG |= 0x00080000;
  6.   ADC0_init();
  7.   NVIC_EnableIRQ(ADC0_IRQn);
  8.   NVIC_SetPriority(ADC0_IRQn, 2);
  9.   __enable_irq();
  10. }


yangxiaor520 发表于 2022-6-13 19:10 来自手机 | 显示全部楼层
又喜提开发板了吗?
 楼主| jinglixixi 发表于 2022-6-14 08:45 | 显示全部楼层
yangxiaor520 发表于 2022-6-13 19:10
又喜提开发板了吗?

哪方面的?
lcr12 发表于 2022-6-14 09:16 | 显示全部楼层
这个用片内温度传感器测温度
pixhw 发表于 2022-6-20 15:41 | 显示全部楼层
这个不是电机控制吗?   
littlelida 发表于 2022-6-22 20:50 | 显示全部楼层
数码管这亮相了,厉害厉害
 楼主| jinglixixi 发表于 2022-6-23 09:09 | 显示全部楼层
pixhw 发表于 2022-6-20 15:41
这个不是电机控制吗?

没错,它也可进行功能扩展。
呐咯密密 发表于 2022-6-23 16:13 | 显示全部楼层
速度挺快啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部