1056|7

1239

帖子

68

TA的资源

纯净的硅(中级)

楼主
 

【STM32H7S78-DK】测评+STM32CubeIDE配置ADC单通道轮询 [复制链接]

本帖最后由 dql2016 于 2024-9-19 23:00 编辑

STM32H7S78支持2个12bit ADC,采样率高达5Msps,这对于一般的工业工频电信号如电压、电流的采集足够了,上一个采样率这么高的芯片还是STM32F303,可以说12bit 5Msps应该是ST系列MCU最高配置了。ADC主要特点与其它系列类似:

两个ADC1和ADC2可以交替模式采集,ADC1作为主设备,ADC2作为从设备,交替采集这样采样率可以达到10Msps

ADC1和ADC2特性一览表:

ADC通道描述:

可以看到,和STM32H743系列一样, ADC通道分为快速通道和慢速通道,但是没有STM32H743系列的直接通道。

 

ADC时钟最高支持75MHz,和STM32H743系列玩法类似,不同时钟对应的最高采样率不同。

 

 

最终的ADC转换时间=(采样时间+0.5+分辨率)N个时钟周期,时钟配置最高75MHz,采样时间配置最短2.5个clk时,达到最大5Msps采样率,75/(2.5+0.5+12)=5

 

 

需要注意的是注释部分,这些性能数据只有BGA封装能够保证,熟悉STM32H743系列的朋友知道,不同封装的ADC性能数据不同,差别很大,尤其LQFP和BGA封装之间,至于当前板卡的芯片型号是否能达到这些最大性能数值,还没找到相关资料说明,只有在后续的测试中验证了。

 

下载官方软件包后,发现官方SDK包暂时没提供ADC例程:

 

熟悉STM32系列的话,通过查看数据和用户手册,了解ADC的特性,使用STM32CubeMX进行配置也是十分简单,这里不得不说ST的开发生态超级牛逼。

 

先看看原理图,板卡的ADC模拟电源和参考电压,可以看到模拟电源和参考电压都是接到了VDD电源3.3V,也可以断开相应的0欧姆电阻,外接高性能的电压基准和独立的模拟供电电源,来提高ADC的精度。

 

板载了Arduino接口,可以看到模拟输入一共有5个,综合前面的快速通道和慢速通道,这里选择了A4---PF13进行实验,它是ADC2的快速通道:

 

在之前的工程配置了串口pritnf打印的基础上增加单通道ADC轮询采集,将数据打印出来。ADC的轮询模式,指的是软件开始ADC转换后,一直等到转换完成后,才向后执行。

首先将ADC时钟配置为25MHz:

 

这里我采用ADC2的通道2,单端输入模式,并开启连续采样模式,否则每次开启ADC采样后只进行一次采样就自动关闭了:

 

开启ADC全局中断,如果只采用轮询模式也可以不用开启,我这里开启是为了后面方进行中断模式的采集:

然后就可以生成工程,在main.c添加用户代码,首先加入只执行一次的校准(不校准也可以,但精度会低一点):

	if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED) != HAL_OK)
	{
		printf("ADC Calibration Err\n");
		Error_Handler();
	}
	printf("ADC Calibration End\n");

  uint32_t adc_value = 0;

然后在主循环就可以使用ADC轮询转换了,只需要三步:启动转换、等待转换完成、读取转换数据,即可完成一次ADC转换,如下代码所示,将转换数据和换算的电压数据通过串口打印出来:

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

	  HAL_ADC_Start(&hadc2);
	  if(HAL_ADC_PollForConversion(&hadc2, 0xFFFF) == HAL_OK)
	  {
		  adc_value = HAL_ADC_GetValue(&hadc2);
		  printf("raw=%d voltage=%fV\n",adc_value,1.0*adc_value/4096*3.3);
	  }
	  HAL_ADC_Stop(&hadc2);
	  HAL_Delay(100);
  }
  /* USER CODE END 3 */

由于开启了连续转换模式,因此每次转换完成后都要调用HAL_ADC_Stop关闭ADC,如果不想每次都调用HAL_ADC_Stop来关闭ADC,可以配置关闭连续转换模式,这样每次开启ADC转换以后只会进行一次采样,就不用每次都关闭ADC。

 

将A4连接到3.3V位置,如下:

效果:

将A4连接到GND位置,如下:

效果:

 

可以看到,接地后,跳动1-2个字左右,如果连接外部电压基准跳动可能减少许多。

 

后面将测试ADC中断采集模式和DMA传输模式。

 

 

此帖出自stm32/stm8论坛

最新回复

不错不错,值得学习   详情 回复 发表于 2024-9-21 21:41
点赞 关注
 

回复
举报

7618

帖子

18

TA的资源

五彩晶圆(高级)

沙发
 

谢谢分享,很详细

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复

6987

帖子

11

TA的资源

版主

板凳
 
我在前面测试过,好象参考电压不是3.3v,你分个压过去测试一下看是不是这样的。
此帖出自stm32/stm8论坛

点评

看原理图是3.3V,测试VCC计算也得到3.3V,大佬教我学学touchgfx呀,折腾了一下,无法下载到外部flash  详情 回复 发表于 2024-9-21 10:23
 
 

回复

1239

帖子

68

TA的资源

纯净的硅(中级)

4
 
lugl4313820 发表于 2024-9-21 08:32 我在前面测试过,好象参考电压不是3.3v,你分个压过去测试一下看是不是这样的。

看原理图是3.3V,测试VCC计算也得到3.3V,大佬教我学学touchgfx呀,折腾了一下,无法下载到外部flash

此帖出自stm32/stm8论坛

点评

看我前面的帖子,秒秒搞定呀,官方的屏驱动好了的,非常简单。  详情 回复 发表于 2024-9-21 13:30
我前面分压直接测,好象不是3.3V,是2.5V  详情 回复 发表于 2024-9-21 13:29
 
 
 

回复

6987

帖子

11

TA的资源

版主

5
 
dql2016 发表于 2024-9-21 10:23 看原理图是3.3V,测试VCC计算也得到3.3V,大佬教我学学touchgfx呀,折腾了一下,无法下载到外部flash

我前面分压直接测,好象不是3.3V,是2.5V

此帖出自stm32/stm8论坛
 
 
 

回复

6987

帖子

11

TA的资源

版主

6
 
dql2016 发表于 2024-9-21 10:23 看原理图是3.3V,测试VCC计算也得到3.3V,大佬教我学学touchgfx呀,折腾了一下,无法下载到外部flash

看我前面的帖子,秒秒搞定呀,官方的屏驱动好了的,非常简单。

此帖出自stm32/stm8论坛

点评

简单的可以,我试了自带的复杂demo,固件太大了,那个一键下载不行,它是下载到内部flash  详情 回复 发表于 2024-9-21 21:47
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

7
 

不错不错,值得学习

此帖出自stm32/stm8论坛
 
 
 

回复

1239

帖子

68

TA的资源

纯净的硅(中级)

8
 
lugl4313820 发表于 2024-9-21 13:30 看我前面的帖子,秒秒搞定呀,官方的屏驱动好了的,非常简单。

简单的可以,我试了自带的复杂demo,固件太大了,那个一键下载不行,它是下载到内部flash

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表