【翌创ETEB-6001DPX测评】第5篇 测试ADC最大采样率
[复制链接]
一 基本参数
看下手册里的基本参数
可以看到基本的信息,12Bit SAR ADC 采样率最高可到4MBPS
不知道这个4M是单独的一个通道,还是双ADC采样的最大采样率
再翻看一下数据手册
转换周期是固定的13个CLK,ST的是可以配置的
二 ADC采样
搞一个单通道采样吧,自带的例程里都有,但是我的自带例程缺少头文件,没法编译,自己搞一个试试了
ET的ADC结构体,相对简化了一些
STM32的
ADC配置成SRPWM触发
测试一下实验结果
外接的1.1V 测试比较准确
三 ADC采样率最大测试
ADC的采样速率必须小于转换速率,常用单位是 ksps 和 Msps,表示每秒 采样千/百万次(kilo / Million Samples per Second)。
来计算这个采样率
我采用的方法是使用定时器定时采样,一个ADC的15个通道一起采样,定时时间是A,如果能在时间A内完成15个通道的采样,说明采样率>A/15,不断调试PITIMER的定时时间,直到无法完成15个通道的采样,则得到了最大的采样率
ADC的配置代码
static void ADC_Config(void)
{
uint8_t i;
ADC_InitTypeDef stInit;
/* 复位ADC,并开启该外设的时钟 */
ADC_DeInit(ADC0);
/* 校准ADC */
ADC_StartCalibration(ADC0);
/* 初始化ADC */
ADC_StructInit(&stInit);
stInit.virtualChannelMask = ADC_VIRTUAL_CHANNELALL;
stInit.workMode = ADC_WORK_MODE_SINGLE;
stInit.trigMode = ADC_TRIGGER_MODE_CONTINUOUS;
stInit.trigger = ADC0_TRIGGER_PIT0;
ADC_Init(ADC0, &stInit);
/* 将所有的虚拟通道都映射到模拟通道0 */
for(i = 0; i < 16; i++)
{
ADC_ACRemapSingle(ADC0, (uint16_t)BIT_MASK(i), ADC_ANALOG_CHANNEL0);
}
/* 选择虚拟通道事件冲突的处理方式 */
ADC_EventConflictSel(ADC0, ADC_EVT_CONFLICT_DEAL_LOW_PRIORITY_QUEUE);
/* 开启中断功能 */
ADC_ITEnable(ADC0,ADC_IT_RESULT_VC15);
ADC_ITUnMask(ADC0,ADC_IT_RESULT_VC15);
NVIC_EnableIRQ(ADC0_IRQn);
/* 使能ADC */
ADC_CoreEnable(ADC0);
/* 使能虚拟通道 */
ADC_VCEnable(ADC0, ADC_VIRTUAL_CHANNELALL);
}
开始调试PITIMER 100MHz
手动不断修改period这个值,一直修改,当改成359-1就无法进入ADC完成中断了,是个极限值了
100M/360*15 = 1500/360 M = 4.16666M
和手册匹配
|