打印
[技术问题解答]

关于twr-km34z50m的SD-ADC的程序问题

[复制链接]
2180|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shawde|  楼主 | 2015-6-20 20:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ADC, sd, d-a, z5, ni
下面先展示案例源代码:
/******************************************************************************
* (c) Copyright 2010-2013, Freescale Semiconductor Inc.
* ALL RIGHTS RESERVED.
******************************************************************************
* afe_test.c
******************************************************************************/
#include "drivers.h"

/* static function prototype                                                  */
void diagnostic_setup (void);

/* static data definitions                                                    */
volatile int32 result;

#if defined(__ICCARM__)
  #pragma required=result
#endif
void main(void)
{
  /* initialize SIM module                                                    */
  SIM_Init  (SIM_MODULE_ALL_PERIPH_ON_CONFIG);
  
   /* clock mode 2:1:1, 48MHz                                                  */
  SIM_SetClkMode (SYSCLK_MODE1);
  SIM_SetClkDiv  (SYSCLK_DIV1);
  FLL_Init  (FLL_MODULE_FEE_48MHZ_CONFIG);
  
  /* Set 32 KHz RTC Oscillator as the source of the PLL and enable PLL        */
  PLL_Enable (PLL32KREF_SRC1);
  
  /* VREF module must be initialized after SIM module                         */
  VREF_Init (VREF_MODULE_CHOP_ON_1V75_0V4_HPWR_CONFIG,
             VREF_SWITCH_S1_L_S2_L_S3_L_BUFF_ON);
  VREFH_Trim(46);                                 /* VREFH trimmed to 1.200 V */
  VREFL_Trim( 3);                                 /* VREFL trimmed to 0.400 V */
  
  /* AFE_CH1 init                                                             */
  SIM_SelAfePllClkSrc (SIM_MCG_PLL_CLK);
  AFE_ChanInit (CH0, AFE_CH_SWTRG_CCM_PGAOFF_CONFIG(DEC_OSR64), 0, PRI_LVL0, NULL);
  AFE_Init     (AFE_MODULE_RJFORMAT_CONFIG(AFE_PLL_CLK, AFE_DIV2, 12288000));
  
  /* initialize UART and FreeMASTER                                           */
  PORT_Init (PORTI, PORT_MODULE_ALT2_MODE, PIN0|PIN1);
  UART_Init (UART1, UART_MODULE_POLLMODE_CONFIG(38400,48e6));  
  FMSTR_Init();
  
  diagnostic_setup ();
  
  /* trigger AFE conversions                                                  */
  AFE_SwTrigger (CH0);
  
  /* main loop                                                                */
  while (1)
  {
    if (AFE_ChanReady(CH0))
    {
      AFE_Read (CH0, &result);
      FMSTR_Recorder ();
    }
    FMSTR_Poll ();
  }
}

/* static function definition                                                 */
void diagnostic_setup (void)
{
  /* Route AFE_CH0 modulator & clock outputs to PTE0 & PTA7 for monitoring    */
  XBAR_Init (XBAR_MODULE_NO_EDGE_DETECT_CONFIG, PRI_LVL0, NULL);
  PORT_Init (PORTE,PORT_MODULE_ALT3_MODE,PIN0);
  PORT_Init (PORTA,PORT_MODULE_ALT2_MODE,PIN7);
  SIM_SelXbarAfeModOut (SIM_MOD_AFE_CH0);//有改动
  XBAR_Path (XBAR_AFEMDAT, XBAR_OUT4);
  XBAR_Path (XBAR_AFEMCLK, XBAR_OUT0);
  
  /* Route PLL clock output from MCG to PTF7 for monitoring                   */
  PORT_Init (PORTF,PORT_MODULE_ALT3_MODE,PIN7);
  SIM_SelClkoutSrc (CLKOUT_SRC7);  
}
问题是我不知道为什么转换后的结果一直在0X3a4d78这个数值左右徘徊。由于第一次接触这个ADC转换模块。一直没有找到问题所在。
下图中红圈中为调试后的结果。

problem2.png (166.28 KB )

problem2.png

相关帖子

沙发
Mancherstun| | 2015-6-20 21:55 | 只看该作者
这样是没问题的啊,你的输入什么都没接吧

使用特权

评论回复
板凳
舒斯特尔| | 2015-6-20 22:00 | 只看该作者
你把输入接到地上或者如果是差分输入的话短接再测试一下

使用特权

评论回复
地板
C洛达尔多| | 2015-6-20 22:03 | 只看该作者
楼主一点问题没有,你拿示波器看一下,是不是只有最后几位再跳呢

使用特权

评论回复
5
shawde|  楼主 | 2015-6-21 08:25 | 只看该作者
Mancherstun 发表于 2015-6-20 21:55
这样是没问题的啊,你的输入什么都没接吧

还是那句话,我刚开始接触这个。所以很多问题或许会让你觉得可笑。对于其他的adc如果不接输入的话,应该是为0啊,还有就是我外设加一个滑动变阻器以后,显示结果如下(两者不共地)

problem3.png (86.74 KB )

scope

scope

problem4.png (91.61 KB )

recorder

recorder

使用特权

评论回复
6
shawde|  楼主 | 2015-6-21 08:27 | 只看该作者
C洛达尔多 发表于 2015-6-20 22:03
楼主一点问题没有,你拿示波器看一下,是不是只有最后几位再跳呢

最后几位是一直再跳,所以我一直不明白为什么什么都没有,输出结果还这么高,跳动还这么夸张。

使用特权

评论回复
7
shawde|  楼主 | 2015-6-21 08:33 | 只看该作者
舒斯特尔 发表于 2015-6-20 22:00
你把输入接到地上或者如果是差分输入的话短接再测试一下

输入接地以后,result结果变成了0xffcad075相当于没接地之前对result各位取反的结果。

使用特权

评论回复
8
奥德赛| | 2015-6-21 22:01 | 只看该作者
楼主描述的这个问题还真没遇到过啊

使用特权

评论回复
9
shawde|  楼主 | 2015-6-22 09:56 | 只看该作者
奥德赛 发表于 2015-6-21 22:01
楼主描述的这个问题还真没遇到过啊

不知道为什么,这个例程,只有在0.63V到2.23V之间才会变化,低于0.63V的时候,数值一直在0xffcb0cxxxx跳动(xxxx代表任意数值),高于2.23V以后,数值又会急剧变小。这是ADC转换区间决定的还是什么问题造成的?

使用特权

评论回复
10
小狗爱吃骨头| | 2015-6-22 21:00 | 只看该作者
shawde 发表于 2015-6-22 09:56
不知道为什么,这个例程,只有在0.63V到2.23V之间才会变化,低于0.63V的时候,数值一直在0xffcb0cxxxx跳 ...

楼主你的参考电压是多少呢?

使用特权

评论回复
11
Luis德华| | 2015-6-22 21:21 | 只看该作者
楼主你这个问题解决了没有呢

使用特权

评论回复
12
Mancherstun| | 2015-6-22 22:25 | 只看该作者
什么都不接也不应该是0啊,即使接地也不完全是0呢

使用特权

评论回复
13
shawde|  楼主 | 2015-6-23 09:13 | 只看该作者
小狗爱吃骨头 发表于 2015-6-22 21:00
楼主你的参考电压是多少呢?

Vrefl是0.4v,vrefh是1.2v,因为i我刚接触,还有很多不懂的,如果您方便的话,能否告知一下QQ号或者加一下我的QQ号705391309,

使用特权

评论回复
14
shawde|  楼主 | 2015-6-23 09:16 | 只看该作者
Luis德华 发表于 2015-6-22 21:21
楼主你这个问题解决了没有呢

由于我刚接触这一块,对于什么锁频,锁相什么的还不是多了解。我只想快速了解如何去设置她的转换区间,包括设置外置参考电压;还有就是如何去掉后几位的抖动。如果您方便的话,能否留一下你的QQ或者加一下我的QQ

使用特权

评论回复
15
shawde|  楼主 | 2015-6-23 09:17 | 只看该作者
Mancherstun 发表于 2015-6-22 22:25
什么都不接也不应该是0啊,即使接地也不完全是0呢

我接地时候输出结果是0xffffxxxxx(后面的xxxx代表任意数值。)

使用特权

评论回复
16
FSL_TICS_ZJJ| | 2015-6-23 12:47 | 只看该作者
shawde 发表于 2015-6-23 09:13
Vrefl是0.4v,vrefh是1.2v,因为i我刚接触,还有很多不懂的,如果您方便的话,能否告知一下QQ号或者加一 ...

你用的是ADC的单端还是差分?
你测试的值需要在vrefl 到vrefh之间,不可以越界。

使用特权

评论回复
17
shawde|  楼主 | 2015-6-23 13:00 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-6-23 12:47
你用的是ADC的单端还是差分?
你测试的值需要在vrefl 到vrefh之间,不可以越界。 ...

在寄存器设置中,我没发现单端还是差分设置啊?还有就是SD-ADC的测试范围我用电压表测的是0.63v到1.25v(这是SD-ADC2和SD-ADC3的测量范围)对于不采用PGA时候的SD-ADC0和SD-ADC1,他们的测量范围是0.63到2.23v (我跑的就是给的例程。)

使用特权

评论回复
18
舒斯特尔| | 2015-6-23 13:33 | 只看该作者
shawde 发表于 2015-6-21 08:33
输入接地以后,result结果变成了0xffcad075相当于没接地之前对result各位取反的结果。 ...

你用示波器看看,是不是和你得到的结果一致呢?

使用特权

评论回复
19
FSL_TICS_ZJJ| | 2015-6-23 14:24 | 只看该作者
shawde 发表于 2015-6-23 13:00
在寄存器设置中,我没发现单端还是差分设置啊?还有就是SD-ADC的测试范围我用电压表测的是0.63v到1.25v( ...

不好意思,KM的是单端的。
所以,你外部输入ADC的信号要在你的VREFH,VREFL之间。
你用电位器给个输入1V测试,然后自己根据输出的值,倒过来计算看看是不是1V。

使用特权

评论回复
20
quray1985| | 2015-6-23 20:15 | 只看该作者
楼主把得到的值转换一下,再和输入的值做对比

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

35

帖子

0

粉丝