我原本希望要给STM32芯片输入两路信号电压V1,V2,所以在通道选择的时候用
[mw_shl_code=c,true]//主程序
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
#include "dma.h"
#define ADC1_DR_Address ((uint32_t)0x4001244C)
#define M 6
u16 AD_Value[6];
float volta[6];
u8 i;
float AD_SUM(u16 x,float y)
{ float v;
v=0;
for(i=0;i<80;i++)
{
y=(float) x/4095*3.3;
v+=y;
}
v=v/i;
return v;
}
int main()
{
float v1,v2,v3,v4,v5,v6;
SystemInit();
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);
DMA_Config(DMA1_Channel1,(u32)ADC1_DR_Address,(u32)&AD_Value,6);//cndtr对应所开信道个数
DMA_Cmd(DMA1_Channel1, ENABLE); //启动DMA通道
Adc_Init();
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件启动AD转换
while(1)
{ v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;
v1=AD_SUM(AD_Value[0],volta[0]);
v2=AD_SUM(AD_Value[1],volta[1]);
v3=AD_SUM(AD_Value[2],volta[2]);
v4=AD_SUM(AD_Value[3],volta[3]);
v5=AD_SUM(AD_Value[4],volta[4]);
v6=AD_SUM(AD_Value[5],volta[5]);
/*for(i=0;i<80;i++) //循环2次转换AD值
{
volta[0] =(float) AD_Value[0]/4095*3.3;
volta[1] =(float) AD_Value[1]/4095*3.3;
v1+=volta[0];
v2+=volta[1];
volta[2] =(float) AD_Value[1]/4095*3.3;
v3+=volta[2];
volta[3] =(float) AD_Value[1]/4095*3.3;
v4+=volta[3];
volta[4] =(float) AD_Value[1]/4095*3.3;
v5+=volta[4];
volta[5] =(float) AD_Value[1]/4095*3.3;
v6+=volta[5];
}
v1=v1/i;
v2=v2/i;
v3=v3/i;
v4=v4/i;
v5=v5/i;
v6=v6/i;
printf("AD1=%d\n",AD_Value[0]); printf(" volta1 = %2.3f V \r\n",v1);
printf("AD2=%d\n",AD_Value[1]); printf(" volta2 = %2.3f V \r\n\r\n",v2);
printf("AD3=%d\n",AD_Value[2]); printf("\r\n volta3 = %f V \r\n",volta[2]);
printf("AD4=%d\n",AD_Value[3]); printf("\r\n volta4 = %f V \r\n",volta[3]);
printf("AD5=%d\n",AD_Value[4]); printf("\r\n volta5 = %f V \r\n",volta[4]);
printf("AD6=%d\n",AD_Value[5]); printf("\r\n volta6 = %f V \r\n",volta[5]);
*/
printf(" v1 = %2.3f V ",v1);
printf(" v2 = %2.3f V ",v2);
printf(" v3 = %2.3f V ",v3);
printf(" v4 = %2.3f V ",v4);
printf(" v5 = %2.3f V ",v5);
printf(" v6 = %2.3f V \r\n",v6);
delay_ms(400);
}
}
[/mw_shl_code]
在这里选择的6个脚都悬空的情况下,用串口输出电脑上打印到的电压值不是应该一样的么?这6个电压明显不一样
v1 = 1.622 V v2 = 1.978 V v3 = 1.986 V v4 = 1.727 V v5 = 1.605 V v6 = 1.763 V
v1 = 1.621 V v2 = 1.978 V v3 = 1.985 V v4 = 1.728 V v5 = 1.604 V v6 = 1.762 V
v1 = 1.617 V v2 = 1.978 V v3 = 1.985 V v4 = 1.729 V v5 = 1.603 V v6 = 1.761 V
v1 = 1.622 V v2 = 1.978 V v3 = 1.985 V v4 = 1.729 V v5 = 1.604 V v6 = 1.763 V
v1 = 1.620 V v2 = 1.978 V v3 = 1.986 V v4 = 1.729 V v5 = 1.601 V v6 = 1.762 V
v1 = 1.618 V v2 = 1.978 V v3 = 1.984 V v4 = 1.723 V v5 = 1.604 V v6 = 1.762 V
v1 = 1.617 V v2 = 1.979 V v3 = 1.985 V v4 = 1.726 V v5 = 1.603 V v6 = 1.762 V
v1 = 1.620 V v2 = 1.978 V v3 = 1.985 V v4 = 1.723 V v5 = 1.606 V v6 = 1.762 V
v1 = 1.617 V v2 = 1.978 V v3 = 1.985 V v4 = 1.728 V v5 = 1.601 V v6 = 1.762 V
v1 = 1.618 V v2 = 1.978 V v3 = 1.985 V v4 = 1.727 V v5 = 1.603 V v6 = 1.761 V
v1 = 1.622 V v2 = 1.978 V v3 = 1.984 V v4 = 1.729 V v5 = 1.606 V v6 = 1.762 V
在我实际使用的时候我试过程序只开放两个通道采集(程序修改为2个通道),也就PA0,PA1这两个脚分别测的电压实际为1.8V,0.85V ;
可是只有PA0测1.8V几乎正确,PA1测0.85测出来就不对了,是1.85V的样子。但是我把0.85V链接到PA0上又能正确,PA1就不对,这是什么原因呢??
|