社区导航

 

搜索
查看: 500|回复: 2

[原创] 【 ST NUCLEO-H743ZI测评】(5)ADC转换速度与精度测试

[复制链接]

33

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-3-12 19:35 | 显示全部楼层 |阅读模式
本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!  STM32H7  
NUCLEO_H743ZI  
【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI  
【 ST NUCLEO-H743ZI测评】(2)以太网测试  
【 ST NUCLEO-H743ZI测评】(3)以太网转串口测试  
【 ST NUCLEO-H743ZI测评】(4)移植Modbus测试(RTU)

上周公司安排出差了,没时间测试。。。回来第一件事就想着测试。
1、还是基于CUBEMX来配置工程,由于是选择的NUCLEO-H743ZI的默认工程配置,这里先把USB_OTG_FS关掉,再把主频调到400MHZ,ADC的时钟频率调到30MHz。
1、配置频率.jpg 2、手册说明.jpg

2、配置ADC,这里使用通道5,单端模式,16位数据,连续转换,使能中断,不知道为什么BoostMode 只能选择Disable。
3、配置ADC.jpg

3、配置一个定时器,使能1秒中断,用于计算每秒转换的次数。
4、配置定时器.jpg

4、生成工程,添加代码
  1. /* USER CODE BEGIN 0 */
  2. uint32_t ConvCount;
  3. uint16_t adcValue,Max,Min;
  4. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
  5. {
  6.   ConvCount++;
  7.   adcValue = HAL_ADC_GetValue(hadc);
  8.   if(adcValue > Max)
  9.   {
  10.     Max = adcValue;
  11.   }
  12.   else if(adcValue < Min)
  13.   {
  14.     Min = adcValue;
  15.   }
  16. }

  17. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  18. {
  19.   uint32_t TmpCount;
  20.   uint16_t TmpMax,TmpMin;
  21.   char string[200];
  22.   if(htim->Instance == TIM6)
  23.   {
  24.     HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
  25.     TmpCount = ConvCount;
  26.     ConvCount = 0;
  27.     TmpMax = Max;
  28.     TmpMin = Min;
  29.     Max = Min = adcValue;
  30.     sprintf(string, "ADC_CLOCK_ASYNC_DIV1: conversion speed:%d /Sec, Max:%d, Min:%d \r\n", TmpCount, TmpMax, TmpMin);
  31.     HAL_UART_Transmit(&huart3, (uint8_t *)string, strlen(string), 1000);
  32.   }
  33. }
  34. /* USER CODE END 0 */

  35. /**
  36.   * [url=home.php?mod=space&uid=159083]@brief[/url]  The application entry point.
  37.   * @retval int
  38.   */
  39. int main(void)
  40. {
  41.   /* USER CODE BEGIN 1 */

  42.   /* USER CODE END 1 */

  43.   /* MCU Configuration--------------------------------------------------------*/

  44.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  45.   HAL_Init();

  46.   /* USER CODE BEGIN Init */

  47.   /* USER CODE END Init */

  48.   /* Configure the system clock */
  49.   SystemClock_Config();

  50.   /* USER CODE BEGIN SysInit */

  51.   /* USER CODE END SysInit */

  52.   /* Initialize all configured peripherals */
  53.   MX_GPIO_Init();
  54.   MX_ETH_Init();
  55.   MX_USART3_UART_Init();
  56.   MX_ADC1_Init();
  57.   MX_TIM6_Init();
  58.   /* USER CODE BEGIN 2 */
  59.   HAL_ADC_Start_IT(&hadc1);
  60.   HAL_TIM_Base_Start_IT(&htim6);
  61.   /* USER CODE END 2 */

  62.   /* Infinite loop */
  63.   /* USER CODE BEGIN WHILE */
  64.   while (1)
  65.   {
  66.     /* USER CODE END WHILE */

  67.     /* USER CODE BEGIN 3 */
  68.   }
  69.   /* USER CODE END 3 */
  70. }
复制代码


5、查看转换结果,每秒转换百万次以上不成问题,当然这个速度还是比较粗略的,不是极限。
5、转换结果.jpg
6、修改为256分频再看看结果如何。速度降下来了,但稳定性提高了。
5、转换结果1.jpg
7、再把采样周期改成最高ADC_SAMPLETIME_810CYCLES_5,采样速度依然不慢,稳定性也很高了。。当然,电路上只是在PB1口上接了一个可调电阻,无任何模拟电路处理。
  1. sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;
复制代码

5、转换结果2.jpg



此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处


此帖出自stm32/stm8论坛


回复

使用道具 举报

5951

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-3-13 08:42 | 显示全部楼层
有完整的adc处理代码吗 想学习一下你的速度是怎么计算的

点评

我是开了ADC转换完成中断,有个变量在里在++,再开一个1秒的定时器中断,用来统计这1秒中,ADC一共有多少次完成中断。  详情 回复 发表于 2019-3-25 18:59
虾扯蛋


回复

使用道具 举报

33

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2019-3-25 18:59 | 显示全部楼层
littleshrimp 发表于 2019-3-13 08:42
有完整的adc处理代码吗 想学习一下你的速度是怎么计算的

我是开了ADC转换完成中断,有个变量在里在++,再开一个1秒的定时器中断,用来统计这1秒中,ADC一共有多少次完成中断。


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-5-24 09:25 , Processed in 0.130952 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表