【 ST NUCLEO-H743ZI测评】(5)ADC转换速度与精度测试
<div class='showpostmsg'>本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!STM32H7NUCLEO_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。
2、配置ADC,这里使用通道5,单端模式,16位数据,连续转换,使能中断,不知道为什么BoostMode 只能选择Disable。
3、配置一个定时器,使能1秒中断,用于计算每秒转换的次数。
4、生成工程,添加代码
/* USER CODE BEGIN 0 */
uint32_t ConvCount;
uint16_t adcValue,Max,Min;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
ConvCount++;
adcValue = HAL_ADC_GetValue(hadc);
if(adcValue > Max)
{
Max = adcValue;
}
else if(adcValue < Min)
{
Min = adcValue;
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
uint32_t TmpCount;
uint16_t TmpMax,TmpMin;
char string;
if(htim->Instance == TIM6)
{
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
TmpCount = ConvCount;
ConvCount = 0;
TmpMax = Max;
TmpMin = Min;
Max = Min = adcValue;
sprintf(string, "ADC_CLOCK_ASYNC_DIV1: conversion speed:%d /Sec, Max:%d, Min:%d \r\n", TmpCount, TmpMax, TmpMin);
HAL_UART_Transmit(&huart3, (uint8_t *)string, strlen(string), 1000);
}
}
/* USER CODE END 0 */
/**
* @briefThe application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ETH_Init();
MX_USART3_UART_Init();
MX_ADC1_Init();
MX_TIM6_Init();
/* USER CODE BEGIN 2 */
HAL_ADC_Start_IT(&hadc1);
HAL_TIM_Base_Start_IT(&htim6);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
5、查看转换结果,每秒转换百万次以上不成问题,当然这个速度还是比较粗略的,不是极限。
6、修改为256分频再看看结果如何。速度降下来了,但稳定性提高了。
7、再把采样周期改成最高ADC_SAMPLETIME_810CYCLES_5,采样速度依然不慢,稳定性也很高了。。当然,电路上只是在PB1口上接了一个可调电阻,无任何模拟电路处理。
sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;
此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 有完整的adc处理代码吗 想学习一下你的速度是怎么计算的 littleshrimp 发表于 2019-3-13 08:42
有完整的adc处理代码吗 想学习一下你的速度是怎么计算的
我是开了ADC转换完成中断,有个变量在里在++,再开一个1秒的定时器中断,用来统计这1秒中,ADC一共有多少次完成中断。
页:
[1]