常见泽1 发表于 2024-11-19 18:55

【翌创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>&nbsp;</p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">可以看到基本的信息,12Bit SAR ADC 采样率最高可到4MBPS</span></p>

<p><span style="font-family:宋体;">不知道这个4M是单独的一个通道,还是双ADC采样的最大采样率</span></p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">再翻看一下数据手册</span></p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p><span style="font-family:宋体;">转换周期是固定的13个CLK,ST的是可以配置的</span></p>

<p>&nbsp;</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>&nbsp;</p>

<p><span style="font-family:宋体;">搞一个单通道采样吧,自带的例程里都有,但是我的自带例程缺少头文件,没法编译,自己搞一个试试了</span></p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">ET的ADC结构体,相对简化了一些</span></p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">STM32的</span></p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">ADC配置成SRPWM触发</span></p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">测试一下实验结果</span></p>

<p><span style="font-family:宋体;"> &nbsp;</span></p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">外接的1.1V 测试比较准确</span></p>

<p>&nbsp;</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>&nbsp;</p>

<p><span style="font-family:宋体;">ADC的采样速率必须小于转换速率,常用单位是 ksps 和 Msps,表示每秒 采样千/百万次(kilo / Million Samples per Second)。</span></p>

<p>&nbsp;</p>

<p><span style="font-family:宋体;">来计算这个采样率</span></p>

<p><span style="font-family:宋体;">我采用的方法是使用定时器定时采样,一个ADC的15个通道一起采样,定时时间是A,如果能在时间A内完成15个通道的采样,说明采样率&gt;A/15,不断调试PITIMER的定时时间,直到无法完成15个通道的采样,则得到了最大的采样率</span></p>

<p>&nbsp;</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(&amp;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, &amp;stInit);



    /* 将所有的虚拟通道都映射到模拟通道0 */

    for(i = 0; i &lt; 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>&nbsp;</p>

<p><span style="font-family:宋体;">开始调试PITIMER&nbsp; 100MHz</span></p>

<p><span style="font-family:宋体;"> &nbsp;</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:宋体;"> &nbsp;</span></p>

<p><span style="font-family:宋体;">和手册匹配</span></p>

Jacktang 发表于 2024-11-20 07:22

<p>采样率的计算是技术技巧,收藏学习</p>

常见泽1 发表于 2024-11-25 08:57

Jacktang 发表于 2024-11-20 07:22
采样率的计算是技术技巧,收藏学习

<p>现学现卖&nbsp; 第一次找到这种测试方法</p>
页: [1]
查看完整版本: 【翌创ETEB-6001DPX测评】第5篇 测试ADC最大采样率