你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】给你的 ART-Pi (STM32H7) 降降温

[复制链接]
STMCU小助手 发布时间:2021-12-24 18:00
一,ART-Pi 是什么
ART-Pi 是 RT-Thread 团队为嵌入式软件工程师、开源创客设计的一款极具扩展功能的 DIY 开源硬件。致力打造一个开源的软硬件平台。详细资料都可以从 ART-Pi主页 来获取。

二,ART-Pi 全速运行时的温度
相信每一位第一次使用 STM32H7 系列 MCU 的用户都会被他的发热量吓到,内心 OS:这个板子是不是有问题,第一次遇到这么热的 STM32。时间长了的用户都会知道只要手还能摸得住说明就是正常的。但是这个温度到底是多少呢?
因此我做了一个读取 MCU 内存温度的实验
主频为 480M 时的温度:
  1. [40978145] D/board: System Clock information
  2. [40978153] D/board: SYSCLK_Frequency = 480000000
  3. [40978162] D/board: HCLK_Frequency   = 240000000
  4. [40978171] D/board: PCLK1_Frequency  = 120000000
  5. [40978180] D/board: PCLK2_Frequency  = 120000000
  6. [40978188] D/board: STM32H7 temp is 49.610136
复制代码

主频为 120M 时的温度:

  1. [33922714] D/board: System Clock information
  2. [33922722] D/board: SYSCLK_Frequency = 120000000
  3. [33922731] D/board: HCLK_Frequency   = 60000000
  4. [33922740] D/board: PCLK1_Frequency  = 30000000
  5. [33922749] D/board: PCLK2_Frequency  = 30000000
  6. [33922758] D/board: STM32H7 temp is 32.261209
复制代码

如何实现测量 STM32H7 的内部温度:

在 CUBEMX 中打开 ADC3-IN18 的测量引脚,这个是自带的测量温度通道:

20210627211423973.png


温度的计算公式

20210627211650162.png


TS_CAL2 的值保存在 :0x1FF1E840
TS-CAL1 的值保存在:0x1FF1E820

所以可得
  1.     adc_v = HAL_ADC_GetValue(&ADC3_Handler);
  2.     adcx = (110.0-30.0)/(*(unsigned short*)(0x1FF1E840) - *(unsigned short*)(0x1FF1E820));
  3.     temp = adcx*(adc_v - *(unsigned short*)(0x1FF1E820))+30;
复制代码

ADC 的初始化
ADC 的初始化代码就比较常规了,简单的测试也就不需要使用 DMA 等配置
  1.     ADC3_Handler.Instance=ADC3;
  2.     ADC3_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;
  3.     ADC3_Handler.Init.Resolution=ADC_RESOLUTION_16B;
  4.     ADC3_Handler.Init.ScanConvMode=DISABLE;
  5.     ADC3_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV;
  6.     ADC3_Handler.Init.LowPowerAutoWait=DISABLE;
  7.     ADC3_Handler.Init.ContinuousConvMode=DISABLE;
  8.     ADC3_Handler.Init.NbrOfConversion=1;
  9.     ADC3_Handler.Init.DiscontinuousConvMode=DISABLE;
  10.     ADC3_Handler.Init.NbrOfDiscConversion=0;
  11.     ADC3_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;
  12.     ADC3_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;
  13.     ADC3_Handler.Init.Overrun=ADC_OVR_DATA_OVERWRITTEN;
  14.     ADC3_Handler.Init.OversamplingMode=DISABLE;
  15.     ADC3_Handler.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DR;
  16.     HAL_ADC_Init(&ADC3_Handler);

  17.     HAL_ADCEx_Calibration_Start(&ADC3_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED);

  18.     ADC_ChannelConfTypeDef ADC3_ChanConf;

  19.     ADC3_ChanConf.Channel=ADC_CHANNEL_TEMPSENSOR;
  20.     ADC3_ChanConf.Rank=ADC_REGULAR_RANK_1;
  21.     ADC3_ChanConf.SamplingTime=ADC_SAMPLETIME_810CYCLES_5;
  22.     ADC3_ChanConf.SingleDiff=ADC_SINGLE_ENDED;
  23.     ADC3_ChanConf.OffsetNumber=ADC_OFFSET_NONE;
  24.     ADC3_ChanConf.Offset=0;
  25.     HAL_ADC_ConfigChannel(&ADC3_Handler,&ADC3_ChanConf);

  26.     return 0;
复制代码

获取温度与系统时钟的频率
  1.     unsigned int adc_v;
  2.     double adcx;
  3.     double temp;

  4.     HAL_ADC_Start(&ADC3_Handler);
  5.     HAL_ADC_PollForConversion(&ADC3_Handler,10);

  6.     LOG_D("System Clock information");
  7.     LOG_D("SYSCLK_Frequency = %d", HAL_RCC_GetSysClockFreq());
  8.     LOG_D("HCLK_Frequency   = %d", HAL_RCC_GetHCLKFreq());
  9.     LOG_D("PCLK1_Frequency  = %d", HAL_RCC_GetPCLK1Freq());
  10.     LOG_D("PCLK2_Frequency  = %d", HAL_RCC_GetPCLK2Freq());

  11.     adc_v = HAL_ADC_GetValue(&ADC3_Handler);
  12.     adcx = (110.0-30.0)/(*(unsigned short*)(0x1FF1E840) - *(unsigned short*)(0x1FF1E820));
  13.     temp = adcx*(adc_v - *(unsigned short*)(0x1FF1E820))+30;

  14.     LOG_D("STM32H7 temp is %f",temp);
复制代码

三,未完待续
后续测试了不同频率,不同编译器,不同优化选项的性能对比,后续结果放在了传送门, 整个测是工程也开源在了 GITEE,欢迎 Start.



收藏 评论0 发布时间:2021-12-24 18:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版