[STM32F1] ADC端口电压莫名其妙下降

[复制链接]
2084|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 | 显示全部楼层

还有什么现象?能再详细描述下吗?
xxrs 发表于 2021-6-17 21:23 | 显示全部楼层
采用电阻分压采集24V电压,R35电阻10K与150K分压大约1.4V,到达单片机端口的电压只有0.28V,怀疑端口吸收了电流。
 楼主| zhaoxqi 发表于 2021-6-17 21:26 | 显示全部楼层
其他11路都正常只有这一路不正常,电路都是一样的,多块电路板都一样的问题
 楼主| zhaoxqi 发表于 2021-6-17 21:28 | 显示全部楼层
电路板也重新打样过,问题依旧
dengdc 发表于 2021-6-17 21:30 | 显示全部楼层
硬件问题
 楼主| zhaoxqi 发表于 2021-6-17 21:32 | 显示全部楼层
应该不是硬件问题,但是程序上也检查不出问题。
llljh 发表于 2021-6-17 21:52 | 显示全部楼层
不是硬件问题,那就是软件问题了。贴出你的程序
 楼主| 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相关的初始化程序
 楼主| zhaoxqi 发表于 2021-6-17 21:57 | 显示全部楼层
用的中断读取ADC数值,第一版的时候没发现问题,后面就有问题了,而且是有时候不行有时候正常
supernan 发表于 2021-6-17 22:00 | 显示全部楼层
好厉害呀,还用寄存器编程。
lizye 发表于 2021-6-17 22:02 | 显示全部楼层
你查一下datasheet,看ST推荐的ADC输入阻抗最大不超过多少?
 楼主| zhaoxqi 发表于 2021-6-17 22:04 | 显示全部楼层
一时半会没查到,现在奇怪的是只有这一个通道有问题,其他11个通道没问题,而且是有时正常有时不正常
ousj 发表于 2021-6-17 22:07 | 显示全部楼层
估计这个端口被配置成别的模式了
chuxh 发表于 2021-6-17 22:10 | 显示全部楼层
建议检查IO配置
 楼主| zhaoxqi 发表于 2021-6-17 22:13 | 显示全部楼层
我也怀疑是这个问题,检查了所有的IO口配置,检查不出问题
supernan 发表于 2021-6-17 22:15 | 显示全部楼层
硬件问题不大,你可以测一下你的1K电阻上压降,知道电流多大,看看是哪里问题
juventus9554 发表于 2021-6-17 22:17 | 显示全部楼层
感觉你的电路 不对啊%
您需要登录后才可以回帖 登录 | 注册

本版积分规则

808

主题

10636

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部