zhaoxqi 发表于 2021-6-17 21:05

ADC端口电压莫名其妙下降


用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-9239.5周期,提高采样时间可以提高精确度      
         ADC1->SMPR2=0x0003ffff;   //通道10-15239.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

感觉你的电路 不对啊%
页: [1] 2
查看完整版本: ADC端口电压莫名其妙下降