查看: 2322|回复: 8

[求助] KLxx系列实验问题

[复制链接]
  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-2-14 10:32:53 | 显示全部楼层 |阅读模式
    本讨论针对MKLxxZ128xxx系列的芯片做的一些测试和实验,目的是为了弄明白Freescale——老外们[也许是国人在函数编程上的一些思路——因为函数的嵌套太多以致让人想完全弄明白则必须就是用这款芯片——这不是在设计和选芯时的好方法,有时会丢了大量的客户!!!],此外弄明白ADC的可用性也是实用中的必须。
    1.adc的测试函数
    ADC是MCU应用中最主要的一个模块,看了手册和函数:对应的有MKL_adc.h和MKL_adc.c。一大堆DRV中只找到两个不同的,也只是稍微有点差别。参照手册和函数,一个定义了adcInit(),另一个多了个adcInit1();一个里定义了中断ADC0_IRQHandler(void),另一个没有定义中断;一个里多了一种中断采样的方法trigger_adc(void),两者都有adcGetUint(void)函数。
    参照手册和次函数没有弄明白如何同时开通ADC0+-~ADC3+-共8个通道的采样方法。尝试按照按例函数编写了一个,结果ADC1就是不执行——就是这个函数while ((ADC0_SC1(1) & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);不发生采样结束的置1信号,因此他在这里不动了。而在许多其他的MCU中,仅仅需要写明开那个ADC通道,采用for循环,一下就搞定了。无奈只好册1路ADC,看看这16位ADC的效果如何。
    2.试验方法
    定义一个adc[5]5个的数组,0~3存放1~4次采样的结果,adc[4]存放4次的平均值。程序简单,直接用for循环采样,完成4次后结果送到LCD显示5组数据。
    3.结果
    为了可靠,测试结果分送串口给PC模拟串口显示和LCD显示,发现奇怪的问题:
    连续4次采样,第一次的误差非常非常大,为了验证,程序改为先测1个数据,而后循环采样4个,再计算后4个平均值,结果如下:
    First 39130
    73031
    95912
    105353
    10931
    VG: 9590
    First 41150
    74831
    94842
    102963
    10519
    AVG: 9445
    First 39650
    76731
    93532
    102503
    10434
    AVG: 9427
    可以看出,首次采样的数据居然是后4次平均值误差近3千mv,可以看出一次比一次高?但从第二次开始的数据已经相差不太大了。
    4.分析
    分析带有明显的个人成分,仅供参考和讨论。
    KL系列的ADC远不如XS128系列的和MKxx系列的芯片。记的在参加Freescale赛车时用的ADC采样,只是用LQ[龙丘]的原始主板采用跳线的方式做的ADC采样,忽略的信号在50mV以内——算法中,每次采样的数据在50mV算是没有变化。而KL系列的就不行了,好像需要千mV+的忽略——同样没有采用平均算法——为了快速响应。当然有规可循吗?答案是有的,如果都是首次采样比较他们的差别在百mV左右,如果在做上短时间常数的滤波电路应该能降到百mV以内的。
    比较其他品牌的ADC得出的结论是:同样是ARM级别的,新唐的M0,M4;Freescale的M4,还有其他的8~16位的MCU比如C8051F350,F060,AduC834、TiMSP430F系列的带有16位或24位的ADC都比KL的误差小。当然漏了PIC的廉价型MCU PIC16FxxxA,这些12位的ADC直接连线测试,稳定在+-1个字之间。
    如果想采用这款KL的MCU做ADC测试,建议丢失前1~3组采样数据,从后边几组开始取平均值,应该比较可靠的。
    补充测试如下[丢失1~3个数据]:
    丢失2组 丢失3组
    F 12438 F 14125
    0 10886 0 11284
    1 10944 1 10909
    2 10818 2 10884
    3 10944 3 10821
    A 10898 A 10974
    F 12126 F 17617
    0 10690 0 13084
    1 10576 1 11761
    2 10861 2 11087
    3 10682 3 11140
    A 10702 A 11768
    F 12241 F 17489
    0 10537 0 13024
    1 10730 1 11635
    2 10624 2 11004
    3 10683 3 10880
    A 10643 A 11635
    上述数据,F表示丢失数据的最后一个,比如丢失2个,F表示第2个;A表示0~3数据的平均;测试结果是丢失2个数据后的连续数据比较接近,再多丢就又出现大幅波动。
    按照丢失前两个数据而后采样4个平均这样的结果还是可以的,误差在百mV左右,远小于千mV+了。当然必要的滤波处理是必须的——手册上建议焊接821P电容1个。
    我知道答案 目前已有8人回答
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-11-17 14:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    296

    帖子

    0

    高级会员

    Rank: 4

    积分
    945
    最后登录
    2017-3-15
    发表于 2016-2-15 07:29:35 | 显示全部楼层
    严重支持! 过几天我也做下测试,发上来
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2016-2-20 19:33:36 | 显示全部楼层
    这个误差应该和硬件本身的关系不大,我用KL03 12位分辨率的ADC做温度采集,精度和准确度可以达到0.1度。而且使用的是内部1.2v参考电压. 测试过十多个不同的板子,一致性非常好。
    不过,使用的KSDK1.2

    下面是部分数据截图,3个不同设备
    QQ图片20160220193237.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-2-21 10:23:59 | 显示全部楼层
    本帖最后由 zhjb1 于 2016-2-21 10:28 编辑
    cxtarm 发表于 2016-2-20 19:33
    这个误差应该和硬件本身的关系不大,我用KL03 12位分辨率的ADC做温度采集,精度和准确度可以达到0.1度。而 ...

    很好的讨论。问题的基点不一样,不清楚您是多少mV换算成1度,还是采用差分ADC方式。我没有做数据转换,直接显示数据结果。我尝试外接了1个104p无极性电容,误差可以缩小到百个以内[0~65536-16位ADC],如果我拿PIC的基本MCU——PIC16F873A的12位采样——同样没有外加如何补偿滤波电路,那可是0~1023中的几乎任意值都在个位稳定不变。只是针对KL——手中有KL16和KL26这两款做的实验。如果有时间,我可以将我手中所有的8,16,32位和ARM0,3,4,7,9都做一个相同的实验—— 各自ADC的单口采样——不加任何补偿电路列一个表。我想,KL不会在前边,中间的位置怕都站不住。
    但如果数字滤波,在取样100次后的平均到不知道数据如何,以后实验数据说话吧。谢谢您的讨论。额外说一下,不知道在专用MCU网站上讨论多种MCU的性能比较是否会影响本网站,请教小七和网友。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2016-2-21 17:32:12 | 显示全部楼层
    zhjb1 发表于 2016-2-21 10:23
    很好的讨论。问题的基点不一样,不清楚您是多少mV换算成1度,还是采用差分ADC方式。我没有做数据转换,直 ...

    我是通过高精度PT100热敏电阻实现的测温。要求测量范围是 -40 ~ 65度
    使用的内部参考电压,1.2V
    KL03只有单端模式,没有差分模式
    如果换算成电压,应该不到20mV就可以换算成1度了,我可以实现0.1度的精度,也就是说电压采样误差也就是2mv左右
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2016-2-21 17:35:25 | 显示全部楼层
    zhjb1 发表于 2016-2-21 10:23
    很好的讨论。问题的基点不一样,不清楚您是多少mV换算成1度,还是采用差分ADC方式。我没有做数据转换,直 ...

    另外,我是单次采样,硬件4次平均
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-2-22 09:32:43 | 显示全部楼层
    cxtarm 发表于 2016-2-21 17:35
    另外,我是单次采样,硬件4次平均

    这个电路设计的相当不错了,只是采样速度慢了点。我是浙江采样压到约百次/每秒,误差也非常大,如果忽略掉低4位,当12位用,大约上下几个字的跳吧,如果降低到每秒几次[没有具体计算]大约属于整体误差,大约连续数十个数据采样结果在2~3个不同数据,这3个数据的误差在几十左右,但没有乱蹦的现象[16位]。我更关心的是高速采样,一般能达到手册SPS的80%或以上,100%最好。谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2016-2-22 10:07:42 | 显示全部楼层
    zhjb1 发表于 2016-2-22 09:32
    这个电路设计的相当不错了,只是采样速度慢了点。我是浙江采样压到约百次/每秒,误差也非常大,如果忽略 ...

    首先我单次采样不代表就是低速采样,只是我的应用中不需要那么多数据。
    其次根据我的配置,四次硬件平均的情况下,采样速度可以达到100K,我调试程序的时候试过,
    也就是说采样速度可以达到400K,我不认为这个速度是低速。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-2-23 08:04:11 | 显示全部楼层
    本帖最后由 zhjb1 于 2016-2-23 08:08 编辑
    cxtarm 发表于 2016-2-22 10:07
    首先我单次采样不代表就是低速采样,只是我的应用中不需要那么多数据。
    其次根据我的配置,四次硬件平均 ...

    关于硬件问题不与你争辩,无意义。玩单片机比的首先是硬实力——相同的外设条件下,手册的最大SPS,和手册建议最佳SPS下的测试。软件解决问题才是玩家的目标——无论是多次平均,还是软件滤波,或是其他概率取中,...。因为有些工程必须选用xxx芯片,即便是项目主管或总监或顾问无一例外,建议只是在选型时期有意义。顺便说一下,上述的测试是在KL16Z128上做的。在本网得到的板子KL26Z128上的测试比这个好的多——电位器含在板子上,已有退偶电容了。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 13:09 , Processed in 0.106935 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表