【翌创ETEB-6001DPX测评】第5篇 测试ADC最大采样率
<p><span style="font-family:宋体;"><span style="font-size:22px;"><span style="color:#cc0000;"><b>一</b><b> </b><b>基本参数</b></span></span></span></p><p><span style="font-family:宋体;">看下手册里的基本参数</span></p>
<p> </p>
<p><span style="font-family:宋体;"> </span></p>
<p> </p>
<p> </p>
<p><span style="font-family:宋体;">可以看到基本的信息,12Bit SAR ADC 采样率最高可到4MBPS</span></p>
<p><span style="font-family:宋体;">不知道这个4M是单独的一个通道,还是双ADC采样的最大采样率</span></p>
<p> </p>
<p><span style="font-family:宋体;">再翻看一下数据手册</span></p>
<p><span style="font-family:宋体;"> </span></p>
<p><span style="font-family:宋体;"> </span></p>
<p><span style="font-family:宋体;">转换周期是固定的13个CLK,ST的是可以配置的</span></p>
<p> </p>
<p><span style="font-family:宋体;"><span style="color:#cc0000;"><span style="font-size:22px;"><b>二</b><b> ADC</b><b>采样</b></span></span></span></p>
<p> </p>
<p><span style="font-family:宋体;">搞一个单通道采样吧,自带的例程里都有,但是我的自带例程缺少头文件,没法编译,自己搞一个试试了</span></p>
<p> </p>
<p><span style="font-family:宋体;">ET的ADC结构体,相对简化了一些</span></p>
<p><span style="font-family:宋体;"> </span></p>
<p> </p>
<p><span style="font-family:宋体;">STM32的</span></p>
<p><span style="font-family:宋体;"> </span></p>
<p> </p>
<p> </p>
<p><span style="font-family:宋体;">ADC配置成SRPWM触发</span></p>
<p><span style="font-family:宋体;"> </span></p>
<p> </p>
<p><span style="font-family:宋体;"> </span></p>
<p> </p>
<p><span style="font-family:宋体;">测试一下实验结果</span></p>
<p><span style="font-family:宋体;"> </span></p>
<p> </p>
<p><span style="font-family:宋体;">外接的1.1V 测试比较准确</span></p>
<p> </p>
<p><span style="font-family:宋体;"><span style="font-size:22px;"><span style="color:#cc0000;"><b>三</b><b> ADC</b><b>采样率最大测试</b></span></span></span></p>
<p> </p>
<p><span style="font-family:宋体;">ADC的采样速率必须小于转换速率,常用单位是 ksps 和 Msps,表示每秒 采样千/百万次(kilo / Million Samples per Second)。</span></p>
<p> </p>
<p><span style="font-family:宋体;">来计算这个采样率</span></p>
<p><span style="font-family:宋体;">我采用的方法是使用定时器定时采样,一个ADC的15个通道一起采样,定时时间是A,如果能在时间A内完成15个通道的采样,说明采样率>A/15,不断调试PITIMER的定时时间,直到无法完成15个通道的采样,则得到了最大的采样率</span></p>
<p> </p>
<p><span style="font-family:宋体;">ADC的配置代码</span></p>
<pre>
<code class="language-cpp">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);
}</code></pre>
<p> </p>
<p><span style="font-family:宋体;">开始调试PITIMER 100MHz</span></p>
<p><span style="font-family:宋体;"> </span></p>
<p><span style="font-family:宋体;">手动不断修改period这个值,一直修改,当改成359-1就无法进入ADC完成中断了,是个极限值了</span></p>
<p><span style="font-family:宋体;">100M/360*15 = 1500/360 M = 4.16666M</span></p>
<p><span style="font-family:宋体;"> </span></p>
<p><span style="font-family:宋体;">和手册匹配</span></p>
<p>采样率的计算是技术技巧,收藏学习</p>
Jacktang 发表于 2024-11-20 07:22
采样率的计算是技术技巧,收藏学习
<p>现学现卖 第一次找到这种测试方法</p>
页:
[1]