找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于STM32F401的ADC模数转换测量输入电压的问题

查看数: 3619 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-7-22 23:53

正文摘要:

我想用STM32F401的最小系统板做一个ADC模数转换读出相应的电压值,但是现在遇到的问题就是,无论我将ADC对应的PA1引脚接到GND还是V5,它转化后的电压值都是0.00几(按理说GND应该是0,V5应该是5伏)。然后ADC通道测 ...

回复

ID:898445 发表于 2021-7-25 16:51
y∩__∩y 发表于 2021-7-24 20:26
temp=(float)adcx*3.3/4096要这样写才对,要把括号去掉,不然3.3/4096都等于零了,而且这计算的结果也没有 ...

没有变量进行储存是啥意思呀,不是存给temp了吗
ID:898445 发表于 2021-7-24 23:14
daemondong 发表于 2021-7-23 08:43
Adc_Init()的代码要发上来,应该是初始化的问题。

麻烦帮忙看看是什么的问题
ID:88023 发表于 2021-7-24 20:26
temp=(float)adcx*3.3/4096要这样写才对,要把括号去掉,不然3.3/4096都等于零了,而且这计算的结果也没有变量进行储存
ID:898445 发表于 2021-7-24 20:18
cpu小白白 发表于 2021-7-23 08:43
1.测量电压的时候要共地,不知道你公地没有
2.看一下ADC是否使能,时钟是否打开等等,配置问题,查看一下 ...

你好,第一点就是测量的GND接单片机的GND,然后模拟信号的值接单片机的ADC引脚对吧
2.这些我都检查了,感觉没有问题
3.ADC历程怎么找呀,引脚我换过了也没用
量程检查过了,不是这个的问题
ID:898445 发表于 2021-7-24 20:15
lishengaha 发表于 2021-7-24 07:14
stm32的参考电压都是直接接电源的也就是3.3v。。你这个16 18是咋算出来的,首先公式肯定错了,看你adc转换 ...

你好,16  18是ADC测出来的值。不是公式转换后的电压值
ID:898445 发表于 2021-7-24 20:14
daemondong 发表于 2021-7-23 08:43
Adc_Init()的代码要发上来,应该是初始化的问题。

void  Adc_Init(void)
{        
        ADC_InitTypeDef ADC_InitStructure;
        ADC_CommonInitTypeDef ADC_CommonInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA |RCC_APB2Periph_ADC1        , ENABLE );          //


        //                     
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;  //PA1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;               
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//
        GPIO_Init(GPIOA, &GPIO_InitStructure);       

       
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);          //
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);        //
       
//
  //
        //
       
        ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;  //
        ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;  //
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;  //
  ADC_CommonInit(&ADC_CommonInitStructure);
       
       
       
//
//

        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;        //
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;//       
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//
        ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //
        ADC_InitStructure.ADC_NbrOfConversion = 1;        //
        ADC_Init(ADC1, &ADC_InitStructure);        //
       
        ADC_Cmd(ADC1, ENABLE);        //开启ADC
       


}                               
ID:939710 发表于 2021-7-24 07:14
stm32的参考电压都是直接接电源的也就是3.3v。。你这个16 18是咋算出来的,首先公式肯定错了,看你adc转换出的 数字结果
ID:123289 发表于 2021-7-23 10:10
查一下手册,看看硬件连接是否符合要求,参考电压是否选对。
ID:827243 发表于 2021-7-23 08:43
Adc_Init()的代码要发上来,应该是初始化的问题。
ID:689247 发表于 2021-7-23 08:43
1.测量电压的时候要共地,不知道你公地没有
2.看一下ADC是否使能,时钟是否打开等等,配置问题,查看一下初始化引脚是否对应。
3.上面三个都不对,找ADC历程走一遍(换个引脚)
107的ADC都是3.3V的量程,407的不太清楚量程,要是3.3最好不要接5v的吧

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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