3658|13

1万

帖子

25

TA的资源

版主

楼主
 

[SAM R21]发现R21的ADC稳定性不太好 [复制链接]


这几天发现SAM R21的ADC转换不是太稳定,数据波动比较大。测试时将电位器接到ADC6上,使用内部1V基准,转换后发送到串口。

从图中可以看到,数据波动较大,最大991,最小967,波动有24,这还不是波动最大的数据。即使设置ADC采样数据平均,效果也没有任何改善。



参考代码:
  1. /**
  2. * \file
  3. *
  4. * \brief SAM ADC Quick Start
  5. *
  6. * Copyright (C) 2013-2014 Atmel Corporation. All rights reserved.
  7. *
  8. * \asf_license_start
  9. *
  10. * \page License
  11. *
  12. * Redistribution and use in source and binary forms, with or without
  13. * modification, are permitted provided that the following conditions are met:
  14. *
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. *    this list of conditions and the following disclaimer.
  17. *
  18. * 2. Redistributions in binary form must reproduce the above copyright notice,
  19. *    this list of conditions and the following disclaimer in the documentation
  20. *    and/or other materials provided with the distribution.
  21. *
  22. * 3. The name of Atmel may not be used to endorse or promote products derived
  23. *    from this software without specific prior written permission.
  24. *
  25. * 4. This software may only be redistributed and used in connection with an
  26. *    Atmel microcontroller product.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
  29. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  30. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  31. * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
  32. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  33. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  34. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  35. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  36. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  37. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  38. * POSSIBILITY OF SUCH DAMAGE.
  39. *
  40. * \asf_license_stop
  41. *
  42. */
  43. /**
  44. * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
  45. */
  46. #include <asf.h>
  47. #include <stdio.h>

  48. char str[50];

  49. void configure_adc(void);

  50. //! [module_inst]
  51. struct adc_module adc_instance;
  52. //! [module_inst]

  53. //! [setup]
  54. void configure_adc(void)
  55. {
  56. //! [setup_config]
  57.         struct adc_config config_adc;
  58. //! [setup_config]
  59. //! [setup_config_defaults]
  60.         adc_get_config_defaults(&config_adc);
  61. //! [setup_config_defaults]

  62. //! [setup_set_config]
  63.         adc_init(&adc_instance, ADC, &config_adc);
  64. //! [setup_set_config]

  65. //! [setup_enable]
  66.         adc_enable(&adc_instance);
  67. //! [setup_enable]
  68. }
  69. //! [setup]

  70. void configure_usart(void);

  71. //! [module_inst]
  72. struct usart_module usart_instance;
  73. //! [module_inst]

  74. //! [setup]
  75. void configure_usart(void)
  76. {
  77.         //! [setup_config]
  78.         struct usart_config config_usart;
  79.         //! [setup_config]
  80.         //! [setup_config_defaults]
  81.         usart_get_config_defaults(&config_usart);
  82.         //! [setup_config_defaults]

  83.         //! [setup_change_config]
  84.         config_usart.baudrate    = 9600;
  85.         config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING;
  86.         config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0;
  87.         config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1;
  88.         config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2;
  89.         config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3;
  90.         //! [setup_change_config]

  91.         //! [setup_set_config]
  92.         while (usart_init(&usart_instance,
  93.         EDBG_CDC_MODULE, &config_usart) != STATUS_OK) {
  94.         }
  95.         //! [setup_set_config]

  96.         //! [setup_enable]
  97.         usart_enable(&usart_instance);
  98.         //! [setup_enable]
  99. }
  100. //! [setup]

  101. int main(void)
  102. {
  103.         system_init();

  104. //! [setup_init]
  105.         delay_init();
  106.         configure_adc();
  107.         configure_usart();
  108. //! [setup_init]

  109. //! [main]


  110. //! [get_res]
  111.         uint16_t result;

  112.         while(1)
  113.         {
  114.                 //! [start_conv]
  115.                 adc_start_conversion(&adc_instance);
  116.                 //! [start_conv]
  117.                 do {
  118.                         /* Wait for conversion to be done and read out result */
  119.                 } while (adc_read(&adc_instance, &result) == STATUS_BUSY);
  120.                
  121.                 sprintf(str, "%d\r\n", result);
  122.                 usart_write_buffer_wait(&usart_instance, str, sizeof(str));
  123.                
  124.                 delay_ms(500);
  125.        
  126. //! [get_res]
  127.         }
  128. //! [inf_loop]
  129.         while (1) {
  130.                 /* Infinite loop */
  131.         }
  132. //! [inf_loop]
  133. //! [main]
  134. }
复制代码


最新回复

good  详情 回复 发表于 2015-7-8 14:43
点赞 关注
 

回复
举报

1291

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
波动挺大的
 
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
确实够大呀,回去试试
 
 
 

回复

1305

帖子

0

TA的资源

纯净的硅(高级)

4
 
帮忙测一下内部温度检测通道吧,我的转换结果始终为0。

我的内部电压转换正常。

 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

5
 
你的电源供电不稳吧!
 
 
 

回复

1万

帖子

25

TA的资源

版主

6
 
测过的,可以测出来,但是效果也不好,误差很大。
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
yangshoot 发表于 2015-3-2 14:38
你的电源供电不稳吧!

USB供电,很稳定。测试内部VCCIO的电压,基本是不波动。


 
 
 

回复

1305

帖子

0

TA的资源

纯净的硅(高级)

8
 
dcexpert 发表于 2015-3-2 06:42
测过的,可以测出来,但是效果也不好,误差很大。


我的怎么测不出来呢?除了和测内部VCCIO电压相同设置外,不同的地方就是改了转换通道。还有其他什么特殊的地方要设置吗?


 
 
 

回复

1万

帖子

25

TA的资源

版主

9
 
yang_alex 发表于 2015-3-2 17:04
我的怎么测不出来呢?除了和测内部VCCIO电压相同设置外,不同的地方就是改了转换通道。还有其他什么特殊的地方要设置吗?


没有了,你把程序发上来看看。

 
 
 

回复

1305

帖子

0

TA的资源

纯净的硅(高级)

10
 
本帖最后由 yang_alex 于 2015-3-3 10:54 编辑
dcexpert 发表于 2015-3-2 13:24
没有了,你把程序发上来看看。

就是atmel Studio中的例子程序,只是修改了转换通道

  1. void configure_adc(void)
  2. {
  3. //! [setup_config]
  4.         struct adc_config config_adc;
  5. //! [setup_config]
  6. //! [setup_config_defaults]
  7.         adc_get_config_defaults(&config_adc);
  8. //! [setup_config_defaults]

  9. //! [setup_modify_conf]
  10.         config_adc.gain_factor     = ADC_GAIN_FACTOR_DIV2;
  11.         config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV8;
  12.         config_adc.reference       = ADC_REFERENCE_INTVCC1;        
  13.         config_adc.positive_input  = ADC_POSITIVE_INPUT_PIN6;
  14.         config_adc.resolution      = ADC_RESOLUTION_12BIT;
  15. //! [setup_modify_conf]

  16. //! [setup_set_config]
  17.         adc_init(&adc_instance, ADC, &config_adc);
  18. //! [setup_set_config]

  19. //! [setup_enable]
  20.         adc_enable(&adc_instance);
  21. //! [setup_enable]
  22. }
复制代码




 
 
 

回复

1万

帖子

25

TA的资源

版主

11
 
这段代码没有什么问题,不知道是不是其它部分设置或者初始化部分问题。

还有一种可能就是芯片本身的问题。
 
 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

12
 
感觉ADC模块想做好,还是比较困难的
 
个人签名

So TM what......?

 

 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

13
 
good
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

14
 
good
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表