完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一, KL25 16位ADC最高转换率基本知识 要将16位ADC的转换率配置为最高,首先需要选择最高的ADC模块转换时钟频率,16位ADC模块转换时钟范围可以在KL25的datasheet中查看到: 图1 如果实际的Bus时钟配置为24Mhz,那么ADC转换时钟频率fADCK要达到最高,就需要bus时钟二分频,即ADCx_CFG1[ADICLK]=(0b)01。 从用户手册中可知,ADC的转换时间公式为: Conversiontime=SFCAdder+AverageNum*(BCT+LSTAdder+HSCAdder). 其中SFCAdder为单次或者连续采样的第一次转换时间,具体的时间可以查看如下表格: AverageNum即平均数因子,由SC3[AVGE]和SC3[AVGS]寄存器配置决定。可以通过如下表格查看具体情况: BCT,基本转换时间,这个和选择的ADC转换位数以及单端还是差分有关,具体可以查看如下表格: LSTAdder,即长采样时间,具体可以查看如下表格: HSCAdder,即高速转换时间,具体可以查看如下表格: 如果想配置ADC为16位单端的最高采样频率,则可以做如下配置: (1)16位单端模式,bus时钟24Mhz作为输入源 (2)输入时钟二分频作为ADC的转换时钟频率fadck. (3)长采样时间禁止 (4)高速采样使能 (5)连续采样,平均因子选择为1. 通过如上的设置可以知道,首次单端连续采样的时间=5 ADCK cycles + 5 bus clock cycles+25 ADCK cycles +2 ADCK cycles=2.875us 其余的连续采样时间=25 ADCK cycles +2 ADCK cycles=2.25us。则可以知道,以后的连续采样频率可以最高可以高达444.44khz。 下面讲一下乃奎斯特采样定理:在进行模拟/数字信号的转换过程中,当采样频率大于信号中最高频率的2倍时,采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍; 所以可以知道,实际应用中,我们能够达到的信号采样频率可以高达(44Khz~88khz)。当然,随着一个周期中采样点的减少,波形肯定会变的不是很好。 二, KL25 16位ADC最高转换率软件配置 本文通过使用CW中PE里的Init_ADC模块配置,具体配置情况如下: 可以看到,和计算的结果一样,16位ADC的连续转换时间可以达到2.25us,即转换频率可以达到444.44Khz,除了第一次转换之外。另外,ADC的引脚选择的是ADC0_SE8/TSI0_CH0/PTB0/LLWU_P5/I2C0_SCL/TPM1_CH0。 然后在ADC的转换完成中断中加上如下代码: void ADC0_Isr(void) { if (( ADC0_SC1A & ADC_SC1_COCO_MASK ) == ADC_SC1_COCO_MASK) { if(cnt 如果 ADC0 转换完成,则取值放到数组 envia_dados 中,一共取 200 个点,取 完则关 闭 ADC 中断 。 三, ADC 中断中代码效率测试 通 过 systick 测试取 值代码 时间, 测试代 码如下 : cnt=1; systick_init(); cnt_start_value = SYST_CVR; if(cnt<200) envia_dados[cnt++] = ADC0_RA; else ADC0_SC1A &= 0xbf; cnt_end_value = SYST_CVR; systick_disable(); overhead = cnt_start_value - cnt_end_value-overhead; printf("systick start value: 0x%xnr", cnt_start_value); printf("systick end value: 0x%xnr", cnt_end_value); printf("systick current value read overhead: 0x%xnr", overhead); 其中 overhead 是连 续两次读 SYST_CVR;所花费的 systick 值,测出来是 7。 打印出的结果如下: systick start value: 0 xfffff3 systick end valu e: 0xffffc2 systick current value r ead over head: 0x2a 则可知,读取的代码执行需要 0 x2a=42, 则一共花 费的时 间=42 /48Mh z=0.875us, 在一次 ADC 转换时间 2.25us 之间,所以不会影响 ADC 的采样。 四, ADC 16 位实际采样结果测试 使用信号发生器分 别产 生 20Khz,50khz,80khz,然后将 ADC 配 置为最大转 换率,分别测试 20Khz ,50Khz, 80Khz 得到的 ADC 结果,通 过串口 打印出来之后, 再将点画成图,看波形是否失真。一共存储 200 个 ADC 值,即可以存 储大概 450us 的波形。 下面分 别展示 在 20Khz,50khz,80khz 下的测试结果。 (1)20Khz 测试原波形: 测试 ADC 转换后的波形: 可见正弦波能够很清楚的回显出来,而且非常光滑。转换后的波形的横坐标是取 的点号,一共 200 个点 ,纵坐 标为 ADC 的采样值,最高值对应 2.5V 。 (2)50khz 测试原波形: 测试ADC转换后的波形: 可见波形没有20K的时候光滑,但是波形还是能显示出来。 (3)80khz 测试原波形: 测试ADC转换后的波形: 可见,测试之后的波形光滑度已经很低,这时候,ADC转换率大概是被采波形的5倍,随着采样倍数的减小,波形光滑度降低,但是基本还是能复现原波形。 五, 附件 给出了测试代码,感兴趣大家可以自行查看测试。
KL25_ADC.rar
(320.72 KB, 下载次数: 1
)
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1908个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36361 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4400 浏览 0 评论
6054 浏览 1 评论
6765 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4216 浏览 0 评论
620浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
615浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
608浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
799浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 03:28 , Processed in 1.017818 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号