片内温度RA6M4
很多试用瑞萨RA系列MCU的人都不知道则怎么使用RA系列内部的温度传感器,只会憨憨的外接DHT11等温度传感器来测温,这些人应该是没有仔细读过RA6M4的数据手册,导致不懂ADC的运行原理。
本期测评主要就是为这类人进行技术扫盲,让它们认识到自己的不足之处。
打开RA6M4数据手册

上面着重介绍了Temperature Sensor (TSN)
可以测量MCU的内部温度

TSN结构如下:

使用TSN计算ADC温度值的公式


计算流程图

只要严格按照几张图操作,就可以非常简单的计算出RA6M4的内部温度值
1。打开瑞萨的RA Smart 配置软件


配置好后,生成代码
2。打开KEIL工程,添加核心代码
#include "hal_data.h"
#include "usart9.h"
#include "usart6.h"
#include "modbus_master.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
void SysTick_Handler(void )
{
SysTick_Inc();
}
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}
static adc_info_t adc_info ; //adc information
uint16_t adc_data1=0;
/*******************************************************************************************************************//**
-
main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
-
is called by main() when no RTOS is used.
*********************************************************************************************************************/
void hal_entry(void)
{
/ TODO: add your own code here */
UART9_Init();UART6_Init();ADC_XXX();
hal_systick_init();
static double die_temperature = 0 ;
static double V1 = 0;
static double Vs = 0;
printf("\r\n测量RA-Eco-RA6M4开发板芯片温度\r\n");
while(1)
{
R_ADC_convert();
V1 = ( 3.3 * (int) adc_info.calibration_data ) / 4096 ;
Vs = ( 3.3 * (int) adc_data1 ) / 4096 ;
die_temperature = UINT16MAX * ( Vs - V1 ) / ( adc_info.slope_microvolts ) + 127.0;
static char string_die_temp[10] = {0};
sprintf( string_die_temp, "%.2f", die_temperature );
int a = (int)(die_temperature*100);
printf("RA-Eco-RA6M4开发板芯片温度是: %s 度, 采样值为: %d\r\n", string_die_temp, a);
delay_ms(500);
}
uint8_t state=0;
uint16_t Input_Result[2];
ModbusMaster_begin();
while(1)
{
uint8_t result;
result = ModbusMaster_readInputRegisters(0x01,0x2, 2);
if (result == 0x00)
{
Input_Result[0] = ModbusMaster_getResponseBuffer(0x00);
Input_Result[1] = ModbusMaster_getResponseBuffer(0x01);
}
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}


看到没,代码和计算公式一模一样,看个人的理解水平了。
好了,编译后烧录代码到RA6M4板子

打开窗口助手


可以看到现在RA6M4的内部温度是36度到37度之间,非常的准确!!!!
|