打印
[STM32F1]

ADC端口电压莫名其妙下降

[复制链接]
1615|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaoxqi|  楼主 | 2021-6-17 21:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

用STM32F103VET6单片机内部ADC采集电压,使用了12路,但是其中有一路电压莫名其妙下降

使用特权

评论回复
沙发
llljh| | 2021-6-17 21:10 | 只看该作者
采样电路图?

使用特权

评论回复
板凳
zhaoxqi|  楼主 | 2021-6-17 21:18 | 只看该作者

使用特权

评论回复
地板
jiajs| | 2021-6-17 21:21 | 只看该作者

还有什么现象?能再详细描述下吗?

使用特权

评论回复
5
xxrs| | 2021-6-17 21:23 | 只看该作者
采用电阻分压采集24V电压,R35电阻10K与150K分压大约1.4V,到达单片机端口的电压只有0.28V,怀疑端口吸收了电流。

使用特权

评论回复
6
zhaoxqi|  楼主 | 2021-6-17 21:26 | 只看该作者
其他11路都正常只有这一路不正常,电路都是一样的,多块电路板都一样的问题

使用特权

评论回复
7
zhaoxqi|  楼主 | 2021-6-17 21:28 | 只看该作者
电路板也重新打样过,问题依旧

使用特权

评论回复
8
dengdc| | 2021-6-17 21:30 | 只看该作者
硬件问题

使用特权

评论回复
9
zhaoxqi|  楼主 | 2021-6-17 21:32 | 只看该作者
应该不是硬件问题,但是程序上也检查不出问题。

使用特权

评论回复
10
llljh| | 2021-6-17 21:52 | 只看该作者
不是硬件问题,那就是软件问题了。贴出你的程序

使用特权

评论回复
11
zhaoxqi|  楼主 | 2021-6-17 21:55 | 只看该作者
//初始化ADC端口
void ADC_IO_init(void)
{
        RCC->APB2ENR|=1<<2;    //使能PORTA时钟
        RCC->APB2ENR|=1<<3;    //使能PORTB时钟
        RCC->APB2ENR|=1<<4;    //使能PORTC时钟
        
        GPIOA->CRL&=0X0000FFFF;//PA4-PA7 模拟输入
        GPIOB->CRL&=0XFFFFFF00;//PB0-PB1 模拟输入
        GPIOC->CRL&=0XFF000000;//PC0-PC5 模拟输入
}
//初始化ADC
void ADC_init(void)
{   
        //先初始化IO口
         ADC_IO_init();
//        //通道13设置        
        RCC->APB2ENR|=1<<9;    //ADC1时钟使能         
        RCC->APB2RSTR|=1<<9;   //ADC1复位
        RCC->APB2RSTR&=~(1<<9);//复位结束        
//        //SYSCLK/DIV2=12M ADC时钟设置为12M(6分频),ADC最大时钟不能超过14M!
//        //否则将导致ADC准确度下降!         
        RCC->CFGR&=~(3<<14);   //分频因子清零
        RCC->CFGR|=2<<14;      //ADC6分频
        ADC1->CR1&=0XF0FFFF;   //工作模式清零
        ADC1->CR1|=0<<16;      //独立工作模式
        ADC1->CR1&=~(1<<8);    //非扫描模式        
        ADC1->CR2&=~(1<<1);    //单次转换模式           
        ADC1->CR2&=~(7<<17);           
        ADC1->CR2|=7<<17;           //软件控制转换
        ADC1->CR2|=1<<20;      //使用用外部触发(SWSTART)!!!        必须使用一个事件来触发     
        ADC1->CR2&=~(1<<11);   //右对齐                          
        ADC1->SQR1&=~(0XF<<20);
        ADC1->SQR1|=12<<20;     //12个转换在规则序列中
//                                    
//        //设置通道1的采样时间  
         ADC1->SMPR2=0x3ffff000;     //通道4-9  239.5周期,提高采样时间可以提高精确度        
         ADC1->SMPR2=0x0003ffff;     //通道10-15  239.5周期,提高采样时间可以提高精确度
        ADC1->CR2|=1<<0;           //打开AD转换器
        ADC1->CR2|=1<<3;       //使能复位校准
        while(ADC1->CR2&1<<3); //等待校准结束                          
//    //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。         
        ADC1->CR2|=1<<2;        //开启AD校准            
        while(ADC1->CR2&1<<2);  //等待校准结束
        MY_NVIC_Init(1,0,ADC1_2_IRQn,1);//抢占优先级0,子优先级0,组0
        
        ADC1->CR1|=1<<5;        //打开规则转换中断
//        ADC1->SQR3=0xffffffe0;     //选择规则序列1
        ADC1->SQR3|=ADC_ch;                                             
        ADC1->CR2|=1<<22;       //启动规则转换通道
}
这是ADC相关的初始化程序

使用特权

评论回复
12
zhaoxqi|  楼主 | 2021-6-17 21:57 | 只看该作者
用的中断读取ADC数值,第一版的时候没发现问题,后面就有问题了,而且是有时候不行有时候正常

使用特权

评论回复
13
supernan| | 2021-6-17 22:00 | 只看该作者
好厉害呀,还用寄存器编程。

使用特权

评论回复
14
lizye| | 2021-6-17 22:02 | 只看该作者
你查一下datasheet,看ST推荐的ADC输入阻抗最大不超过多少?

使用特权

评论回复
15
zhaoxqi|  楼主 | 2021-6-17 22:04 | 只看该作者
一时半会没查到,现在奇怪的是只有这一个通道有问题,其他11个通道没问题,而且是有时正常有时不正常

使用特权

评论回复
16
ousj| | 2021-6-17 22:07 | 只看该作者
估计这个端口被配置成别的模式了

使用特权

评论回复
17
chuxh| | 2021-6-17 22:10 | 只看该作者
建议检查IO配置

使用特权

评论回复
18
zhaoxqi|  楼主 | 2021-6-17 22:13 | 只看该作者
我也怀疑是这个问题,检查了所有的IO口配置,检查不出问题

使用特权

评论回复
19
supernan| | 2021-6-17 22:15 | 只看该作者
硬件问题不大,你可以测一下你的1K电阻上压降,知道电流多大,看看是哪里问题

使用特权

评论回复
20
juventus9554| | 2021-6-17 22:17 | 只看该作者
感觉你的电路 不对啊%

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

808

主题

10636

帖子

4

粉丝