打印
[单片机芯片]

CH32V307片上温度传感器使用

[复制链接]
2512|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2023-9-1 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过活动获得了一块CH32V307EVT开发板,最高主频为 120Mhz,该开发板芯片为 CH32V307VCT6。
主板 - CH32V307EVT
1.主控MCU :CH32V307VCT6
2.SDI&UART 接口 :用于下载、仿真调试,需跳线选择是否使用板载WCH-Link
3.LED :通过J3 插针连接主控MCU的IO口进行控制
4.WCH-Link MCU :实现WCH-Link 功能的MCU
5.按键 S1 :复位按键,用于外部手动复位主控MCU
6.开关 S3 :用于切断或连接外部5V 供电或USB供电
7.USB type-C接口P7 :连接主芯片USB2.0全速通信接口
8.USB接口P6:连接主芯片USB2.0高速通信接口
9.稳压芯片U1 :用于实现将5V 电压转成芯片可用的3.3V 电源电压
10.Download 接口J1 :当J1跳线短接时,可用于实现WCH-Link固件更新
11.WCH-Link 接口 :用于连接PC 和WCH-Link功能模块
12.MCU I/O 口 : 主控MCU 的I/O 引出接口
13.USER 按键S2 :通过J3 插针连接主控 MCU的IO口进行按键控制
14.WCH-Link 指示灯:包括D1、D2和D3三个LED灯,指示WCH-Link运行状态
15.网口:主芯片的网络通讯接口
16.ARDUINO 接口:方便连接ARDUINO接口的开发板
板载的资源还是很丰富的,常见的外设这上边都有,板上自带了一个温度传感器,可以用于监视板上的运行温度。
通过产看手册可以知道,温度传感器连接在ADC_IN16通道上。
使用片上温度传感器检测芯片运行温度的流程如下:
ADC外设初始化和校正代码如下:
void ADC_Function_Init(void){        ADC_InitTypeDef ADC_InitStructure={0};        GPIO_InitTypeDef GPIO_InitStructure={0};        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );        RCC_ADCCLKConfig(RCC_PCLK2_Div8);        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;        GPIO_Init(GPIOA, &GPIO_InitStructure);        ADC_DeInit(ADC1);        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        ADC_InitStructure.ADC_ScanConvMode = DISABLE;        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        ADC_InitStructure.ADC_NbrOfChannel = 1;        ADC_Init(ADC1, &ADC_InitStructure);        ADC_Cmd(ADC1, ENABLE);    ADC_BufferCmd(ADC1, DISABLE);   //disable buffer    ADC_ResetCalibration(ADC1);    while(ADC_GetResetCalibrationStatus(ADC1));    ADC_StartCalibration(ADC1);    while(ADC_GetCalibrationStatus(ADC1));        Calibrattion_Val = Get_CalibrationValue(ADC1);                    ADC_BufferCmd(ADC1, ENABLE);   //enable buffer                ADC_TempSensorVrefintCmd(ENABLE);}
获取ADC值得代码如下,
u16 Get_ADC_Val(u8 ch){    u16 val;        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );        ADC_SoftwareStartConvCmd(ADC1, ENABLE);        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));        val = ADC_GetConversionValue(ADC1);        return val;}
转换为温度值的代码如下:
u16 Get_ConversionVal(s16 val){        if((val+Calibrattion_Val)<0) return 0;        if((Calibrattion_Val+val)>4095||val==4095) return 4095;        return (val+Calibrattion_Val);}
通过串口打印ADC采样值和温度值的代码如下:
int main(void){        u16 ADC_val;        s32 val_mv;        SystemCoreClockUpdate();        Delay_Init();        USART_Printf_Init(115200);                        printf("SystemClk:%d\r\n",SystemCoreClock);        printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );        ADC_Function_Init();    printf("CalibrattionValue:%d\n", Calibrattion_Val);                while(1)        {                ADC_val = Get_ADC_Average( ADC_Channel_TempSensor, 10 );                Delay_Ms(500);                ADC_val = Get_ConversionVal(ADC_val);                printf( "ADC-Val:%04d\r\n", ADC_val);                val_mv = (ADC_val*3300/4096);                printf("mv-T-%d,%0d\n",val_mv ,TempSensor_Volt_To_Temper(val_mv));                Delay_Ms(2);        }}
运行效果如图所示

使用特权

评论回复
沙发
modesty3jonah| | 2023-9-5 15:43 | 只看该作者
集成了温度传感器的芯片?              

使用特权

评论回复
板凳
nomomy| | 2023-9-5 15:47 | 只看该作者
需要参考其数据手册和应用指南              

使用特权

评论回复
地板
dspmana| | 2023-9-5 16:06 | 只看该作者
片上温度传感器一般集成在单片机内部,可以为单片机提供温度信息,帮助其进行过温保护、节能控制、工作状态监测等应用。

使用特权

评论回复
5
houjiakai| | 2023-9-5 16:23 | 只看该作者
在单片机中使用温度传感器,可以帮助系统更好地了解自己的运行状况,并进行温度控制和优化,提高系统的效率和稳定性。

使用特权

评论回复
6
pl202| | 2023-9-5 16:37 | 只看该作者
片上温度传感器的作用是测量芯片内部的温度

使用特权

评论回复
7
jonas222| | 2023-9-5 16:50 | 只看该作者
温度传感器可以实时监测芯片工作环境的温度,帮助系统更好地了解芯片的工作状态。

使用特权

评论回复
8
sanfuzi| | 2023-9-5 17:11 | 只看该作者
单片机片上温度传感器通常依赖芯片的电源和参考电压。

使用特权

评论回复
9
bestwell| | 2023-9-5 17:51 | 只看该作者
单片机片上温度传感器是集成在微控制器芯片内部的传感器,用于测量芯片周围的温度

使用特权

评论回复
10
modesty3jonah| | 2023-9-5 18:11 | 只看该作者
片上温度传感器的精度可能不如外部传感器高,因此在关键应用中可能需要进行校准。

使用特权

评论回复
11
adolphcocker| | 2023-9-5 18:32 | 只看该作者
获取传感器数据后,需要适当的数据处理和滤波,以获得准确的温度值。

使用特权

评论回复
12
wangdezhi| | 2023-9-5 18:54 | 只看该作者
通过监测芯片内部温度,可以触发过热保护机制,防止芯片过热损坏。

使用特权

评论回复
13
hearstnorman323| | 2023-9-5 19:11 | 只看该作者
在低负载时自动降低芯片频率以减少功耗。

使用特权

评论回复
14
chuxh| | 2023-9-5 22:15 | 只看该作者
芯片过热损坏是很严重的事故

使用特权

评论回复
15
tpgf| | 2023-9-7 08:23 | 只看该作者
就是使用单片机自己内置的温度传感器吗

使用特权

评论回复
16
chenqianqian| | 2023-9-7 08:40 | 只看该作者
片上温度传感器是测量芯片内部温度哇?

使用特权

评论回复
17
kxsi| | 2023-9-7 09:08 | 只看该作者
这个传感器的测量误差比较大啊

使用特权

评论回复
18
zljiu| | 2023-9-7 10:01 | 只看该作者
是不是可以通过这种方式实现单片机的自保

使用特权

评论回复
19
drer| | 2023-9-7 10:50 | 只看该作者
其实并不需要精确的温度 这个只是一种定性的测量

使用特权

评论回复
20
tfqi| | 2023-9-7 11:22 | 只看该作者
如果是这种引用的话 只能作为一种辅助手段

使用特权

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

本版积分规则

1522

主题

4615

帖子

6

粉丝