新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2019-3-14
- 在线时间
- 11 小时
|
1金钱
我要使用单片机的AD转换功能,进行电压数据的采集存储进SD卡里,使用的是STM32F429的板子,因为DMA功能不熟悉,所以没有使用DMA,程序可以正常运行,但是我把保存成txt格式的数据导入EXCEL中发现数目量和我预计的完全不同,我是进行6通道采集,最低要求每通道1K,也就是6k,单片机我预设的是:22.5M/(28+12)=0.562M=562K,均分到6路上也是93K,但是在实际程序中只能达到大概230HZ,连1k都没有,我把采集程序单独拿出来,进行调试,更改采样周期,关闭延时函数,依旧还是只能达到230HZ左右的频率,我手头上两块STM32F429都是这个情况,下面是我的部分程序,希望有大神指导一下,我是个小白。@原子哥
u16 Get_Adc(u32 ch)
{
ADC_ChannelConfTypeDef ADC1_ChanConf;
ADC1_ChanConf.Channel=ch; //通道
ADC1_ChanConf.Rank=1; //第1个序列,序列1
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_28CYCLES; //采样时间
ADC1_ChanConf.Offset=0;
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //通道配置
HAL_ADC_Start(&ADC1_Handler); //开启ADC
HAL_ADC_PollForConversion(&ADC1_Handler,10); //轮询转换
return (u16)HAL_ADC_GetValue(&ADC1_Handler); //返回最近一次ADC1规则组的转换结果
}
adcx=Get_Adc(ADC_CHANNEL_5);
temp0=(float)adcx*(3.3/4096);
adcx=Get_Adc(ADC_CHANNEL_4);
temp1=(float)adcx*(3.3/4096);
adcx=Get_Adc(ADC_CHANNEL_3);
temp2=(float)adcx*(3.3/4096);
adcx=Get_Adc(ADC_CHANNEL_2);
temp3=(float)adcx*(3.3/4096);
adcx=Get_Adc(ADC_CHANNEL_1);
temp4=(float)adcx*(3.3/4096);
adcx=Get_Adc(ADC_CHANNEL_0);
temp5=(float)adcx*(3.3/4096);
printf("%6.4f %6.4f %6.4f %6.4f %6.4f %6.4f\r\n ",temp0,temp1,temp2,temp3,temp4,temp5);
|
|