找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2982|回复: 10
收起左侧

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

[复制链接]
ID:898445 发表于 2021-7-22 23:53 | 显示全部楼层 |阅读模式
我想用STM32F401的最小系统板做一个ADC模数转换读出相应的电压值,但是现在遇到的问题就是,无论我将ADC对应的PA1引脚接到GND还是V5,它转化后的电压值都是0.00几(按理说GND应该是0,V5应该是5伏)。然后ADC通道测出来的值就一直保持在12~18这样子。也不懂是啥问题,希望大佬们能帮我看看。谢谢大家了。
1.png
回复

使用道具 举报

ID:689247 发表于 2021-7-23 08:43 | 显示全部楼层
1.测量电压的时候要共地,不知道你公地没有
2.看一下ADC是否使能,时钟是否打开等等,配置问题,查看一下初始化引脚是否对应。
3.上面三个都不对,找ADC历程走一遍(换个引脚)
107的ADC都是3.3V的量程,407的不太清楚量程,要是3.3最好不要接5v的吧

回复

使用道具 举报

ID:827243 发表于 2021-7-23 08:43 | 显示全部楼层
Adc_Init()的代码要发上来,应该是初始化的问题。
回复

使用道具 举报

ID:123289 发表于 2021-7-23 10:10 | 显示全部楼层
查一下手册,看看硬件连接是否符合要求,参考电压是否选对。
回复

使用道具 举报

ID:939710 发表于 2021-7-24 07:14 | 显示全部楼层
stm32的参考电压都是直接接电源的也就是3.3v。。你这个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: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:18 | 显示全部楼层
cpu小白白 发表于 2021-7-23 08:43
1.测量电压的时候要共地,不知道你公地没有
2.看一下ADC是否使能,时钟是否打开等等,配置问题,查看一下 ...

你好,第一点就是测量的GND接单片机的GND,然后模拟信号的值接单片机的ADC引脚对吧
2.这些我都检查了,感觉没有问题
3.ADC历程怎么找呀,引脚我换过了也没用
量程检查过了,不是这个的问题
回复

使用道具 举报

ID:88023 发表于 2021-7-24 20:26 | 显示全部楼层
temp=(float)adcx*3.3/4096要这样写才对,要把括号去掉,不然3.3/4096都等于零了,而且这计算的结果也没有变量进行储存
回复

使用道具 举报

ID:898445 发表于 2021-7-24 23:14 | 显示全部楼层
daemondong 发表于 2021-7-23 08:43
Adc_Init()的代码要发上来,应该是初始化的问题。

麻烦帮忙看看是什么的问题
回复

使用道具 举报

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

没有变量进行储存是啥意思呀,不是存给temp了吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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