打印

ad的采样转换值的问题请教

[复制链接]
3455|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2012-12-17 15:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在发现的问题是ad的采样转换值怎么到1000多点就满量程了呢?!12位的ad不是4096才满嘛?!
沙发
拿起书本|  楼主 | 2012-12-17 15:18 | 只看该作者
怎么可以实现调用一次ad就转换一次,不调用就不转换?!

使用特权

评论回复
板凳
IJK| | 2012-12-17 15:38 | 只看该作者
拿起书本 发表于 2012-12-17 15:18
怎么可以实现调用一次ad就转换一次,不调用就不转换?!

可以。

记得 STM32有AD进行单次转换的例子。

使用特权

评论回复
地板
uet_cache| | 2012-12-17 15:45 | 只看该作者
用软件启动AD软件,采用单次采集模式。

使用特权

评论回复
5
uet_cache| | 2012-12-17 15:46 | 只看该作者
12位Ad 最大4095,最小0

使用特权

评论回复
6
拿起书本|  楼主 | 2012-12-17 21:49 | 只看该作者
ad初始化设置
void ADC_Configure(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
     ADC_TempSensorVrefintCmd(ENABLE);
ADC_InjectedSequencerLengthConfig(ADC1,1);
ADC_RegularChannelConfig(ADC1, ADC_Channel_17,  1,ADC_SampleTime_239Cycles5);//ADC_SampleTime_239Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_0,  1,ADC_SampleTime_239Cycles5);//ADC_SampleTime_239Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_0,  2,ADC_SampleTime_239Cycles5);//ADC_SampleTime_239Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_0,  3,ADC_SampleTime_239Cycles5);//ADC_SampleTime_239Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_0,  4,ADC_SampleTime_239Cycles5);//ADC_SampleTime_239Cycles5);  
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_AutoInjectedConvCmd(ADC1, ENABLE);
ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigInjecConv_None);
ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE);
}
ad数据采集转换
uint32_t AD_Start(void)
{ ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!(ADC_GetFlagStatus(ADC1,ADC_FLAG_JEOC)));
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
ADC_ClearFlag(ADC1,ADC_FLAG_JEOC);
ref_12v=ADC1->DR; //neibucankaovcc

ad1=ADC1->JDR1;
ad2=ADC1->JDR2;
ad3=ADC1->JDR3;
ad4=ADC1->JDR4;
return ((ad1+ad2+ad3+ad4)/4);
}

使用特权

评论回复
7
拿起书本|  楼主 | 2012-12-17 21:49 | 只看该作者
为什么我用注入通道模式ad转换值高不了1096?

使用特权

评论回复
8
MrWang_| | 2012-12-17 23:23 | 只看该作者
应该是模式问题

使用特权

评论回复
9
拿起书本|  楼主 | 2012-12-18 14:49 | 只看该作者
同样的输入电压(忘了多少了),ad转换的数:
规则的是1600左右
注入的是300左右

使用特权

评论回复
10
拿起书本|  楼主 | 2012-12-18 14:50 | 只看该作者
输入21mV,ADC1->JDR1读出来的是6

使用特权

评论回复
11
huangfeng33| | 2012-12-18 15:41 | 只看该作者
可以使用定时器触发,关掉使能

使用特权

评论回复
12
拿起书本|  楼主 | 2013-9-13 20:58 | 只看该作者
按照11楼朋友的方法搞定问题,感谢各位朋友,结贴了,祝大家周末愉快。

使用特权

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

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

粉丝