打印
[LKS32 硬件]

【LKS32MC081评测】+片内温度检测与显示

[复制链接]
1274|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 温度曲线
在测温时,通过读取ADC 值即可推算出温度,其对应的计算公式为:
y=-0.6032x+364.96
实现片内温度检测的主程序为:
uint32_t a = 0, b = 0;
uint32_t TEMP = 0;
extern int Voltage0_Value1;
int main(void)
{
         Hardware_init();                                      // 硬件初始化
         while (1)
         {
                   SYS_AFE_REG5 |= BIT13;                                                 // 开启温度传感器
                   Read_More_Flash(0x00000398, 1, &a, 1);               // 读NVR温度校正系数a程序
                   Read_More_Flash(0x0000039C, 1, &b, 1);               // 读NVR温度校正系数b内程序
                   TEMP = (-((Voltage0_Value1 >> 4) * a / 10000)) + (b / 10);  // 当前芯片温度单位℃
                   delay(0xffff0);                                     // 延时
         }
}

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

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


使用特权

评论回复
沙发
yangxiaor520| | 2022-6-13 19:10 | 只看该作者
又喜提开发板了吗?

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2022-6-14 08:45 | 只看该作者
yangxiaor520 发表于 2022-6-13 19:10
又喜提开发板了吗?

哪方面的?

使用特权

评论回复
地板
lcr12| | 2022-6-14 09:16 | 只看该作者
这个用片内温度传感器测温度

使用特权

评论回复
5
pixhw| | 2022-6-20 15:41 | 只看该作者
这个不是电机控制吗?   

使用特权

评论回复
6
littlelida| | 2022-6-22 20:50 | 只看该作者
数码管这亮相了,厉害厉害

使用特权

评论回复
7
jinglixixi|  楼主 | 2022-6-23 09:09 | 只看该作者
pixhw 发表于 2022-6-20 15:41
这个不是电机控制吗?

没错,它也可进行功能扩展。

使用特权

评论回复
8
呐咯密密| | 2022-6-23 16:13 | 只看该作者
速度挺快啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝