2301_78822044 2025-01-06 18:49 采纳率: 0%
浏览 99

ADC数据采集异常,只在0到3.3跳变

请问用ADC多通道DMA采集,用的就是b站上这一集的那个程序改了一下,结果一接上传感器就只在0到3.3之间跳变了采不了数据,是咋回事啊?代码没有报错

img

  • 写回答

4条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-06 18:50
    关注
    让【道友老李】来帮你解答,本回答参考通义千问大模型编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    问题描述: 使用ADC多通道DMA采集时,修改了b站上某教程的程序,但连接传感器后,采集到的数据只在0到3.3之间跳变,无法正常采集数据。代码没有报错。请问是什么原因导致的? 回答: 可能出现这个问题的原因有几种可能性:
    1. 电源供应不稳定:传感器需要稳定的电源供应才能正常工作,如果电源有波动或者不稳定,可能会导致采集数据不准确。检查一下电源线连接是否良好,电源电压是否稳定。
    2. ADC等设置问题:可能是ADC的采集参数设置有误,包括采样时间、参考电压等设置。确保ADC参数设置正确并且与传感器输出信号匹配。
    3. 采样频率问题:采集到的数据只在0到3.3之间跳变,可能是采样频率不够高导致的。增加采样频率可能会改善这个问题。
    4. DMA设置问题:可能是DMA设置有误导致数据传输出错。检查DMA配置是否正确,确保数据传输正常。 建议检查以上可能性并逐一排查,确保各个部分的设置和连接都正确。以下是一个简单DMA多通道ADC采集的示例代码供参考:
    #include "stm32xxx.h"
    #include <stdio.h>
    ADC_HandleTypeDef hadc1;
    DMA_HandleTypeDef hdma_adc1;
    uint32_t ADC_Value[4];
    void DMA_ADC_Init(void)
    {
        // 初始化ADC
        HAL_ADC_Init(&hadc1);
        // 初始化DMA
        HAL_DMA_Init(&hdma_adc1);
        // 配置DMA传输数据源和目的地
        hdma_adc1.Instance = DMA1_Channel1;
        hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
        hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
        hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
        hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
        hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
        hdma_adc1.Init.Mode = DMA_CIRCULAR;
        hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH;
        HAL_DMA_Init(&hdma_adc1);
        __HAL_LINKDMA(&hadc1, DMA_Handle, hdma_adc1);
        // 启动ADC和DMA
        HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC_Value, 4);
    }
    int main(void)
    {
        // 初始化各个模块,包括ADC、DMA等
        HAL_Init();
        SystemClock_Config();
        MX_GPIO_Init();
        MX_ADC1_Init();
        MX_DMA_Init();
        // 初始化DMA和ADC
        DMA_ADC_Init();
        while (1)
        {
            // 等待数据采集完成
            HAL_Delay(1000);
            // 打印采集到的数据
            printf("ADC Value: %d %d %d %d\n", ADC_Value[0], ADC_Value[1], ADC_Value[2], ADC_Value[3]);
        }
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月6日