本帖最后由 DHZFSYJ 于 2020-7-8 09:59 编辑
使用单通道ADC DMA采集3v电压,50次平均之后约为2.7v,没有找到测量不准确的原因。配置界面如下图:
[img]
[/img]
/*
* [url=home.php?mod=space&uid=247401]@brief[/url] The 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_DMA_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue, 50);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if( adc_dma_ok ==1 )
{
adc_dma_ok = 0;
ADC_Value = 0;
for(i = 0; i < 50; i++)
{
ADC_Value += ADC_ConvertedValue;
}
ADC_Value = ADC_Value / 50;
ADC_Volt = ADC_Value * 3.3f / 4096;
//printf("ADC Value %d\r\n",ADC_Value);
printf("vol %f\r\n", ADC_Volt);
printf("------------------------\r\n");
HAL_Delay(5000);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue, 50);
}
}
/* USER CODE END 3 */
}
中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{
HAL_ADC_Stop(&hadc1);
adc_dma_ok = 1;
i++;
}
|
你的采样频率多大,多长时间触发一次?我现在也用F407,ADC1采集8路,ADC2采集8路,定时器100KHz去触发采样,DMA传输,没有这么大误差。我只测试了一个通道,采集3.3v的供电,理论是4095,实际也只有个位数摆动。