IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 嵌入式实操----基于RT1170 首板硬件之ADC调试(十六) -> 正文阅读

[嵌入式]嵌入式实操----基于RT1170 首板硬件之ADC调试(十六)

本文主要是通过迁移的思维,记录本人初次使用NXP MCUXpresso SDK API进行BSP开发

前面调通了SDRAM Flash GPIO EEPROM之后,接下来调试ADC功能,硬件设计如下所示

1. 首先阅读原理图

在这里插入图片描述

针对ADC调试,在RT1052上面ADC的参考电压是3.3V,如下所示:
在这里插入图片描述
但是在RT1170上面,ADC的参考电压是1.8V,如下所示:
在这里插入图片描述
这是硬件设计需要注意的地方。

2. 调试过程

2. 1 时钟初始化

void bsp_adc_clock_init(){
    /* Configure ADC1 using OSC_24M */
    rootCfg.mux = kCLOCK_ADC1_ClockRoot_MuxOsc24MOut;
    rootCfg.div = 1;
    CLOCK_SetRootClock(kCLOCK_Root_Adc1, &rootCfg);
}

2. 2 引脚初始化

/**
 * @brief adc pin mux init
 *
 * @param [in] None
 * @param [out] None
 * 
 * @return 
 * 
 * @history
 * 1.Date         : 2021-5-27 14:43:9
 *   Author       : panzidong
 *   Modification : Created function
 */
void bsp_adc_pin_init(){
 IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_13_GPIO_MUX3_IO12,       /* GPIO_AD_13 is configured as GPIO_MUX3_IO12 */
      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
  IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_13_GPIO_MUX3_IO12,       
      IOMUXC_SW_PAD_CTL_PAD_PUE(0x0));       /*Forbidden Pull Down Pull Up*/ 
}

2.3 解决ADC参考电压设计问题

在这里插入图片描述
ADC_VREFH = 1.8V *(64/30) = 3.84V

开了ADC的cscale功能之后,可以这么理解就是假设采样位数12位, ADC引脚的电压 = 采样值 * 3.84 * 1000 / 4096 mV.

/**
* @brief adc controller enable cscale func, reference :  IMXRT1170RM.pdf  page:6162   87.7.13..2
 *
 * @param [in] None
 * @param [out] None
 * 
 * @return 
 * 
 * @history
 * 1.Date         : 2021-7-1 14:43:9
 *   Author       : panzidong
 *   Modification : Created function
 */
void bsp_adc_controller_enable_cscale_func(){
 
    int i=0;
	  uint32_t data;
	  uint32_t *address;
	
	  for(i = 1; i<15; i++){
			   PRINTF("%x \r\n", *(volatile uint32_t *)(0x40050000 + 0xf8 + i * 0x8) );
		     data = *(volatile uint32_t *)(0x40050000 + 0xf8 + i * 0x8);
			   address = (uint32_t *)(0x40050000 + 0xf8 + i * 0x8);
			   data = data  & (~(1<<13));
			   *address = data;
			   PRINTF("%x \r\n", *(volatile uint32_t *)(0x40050000 + 0xf8 + i * 0x8) );			
		}
		
		for(i = 1; i<15; i++){
			   PRINTF("%x \r\n", *(volatile uint32_t *)(0x40054000 + 0xf8 + i * 0x8) );
		     data = *(volatile uint32_t *)(0x40054000 + 0xf8 + i * 0x8);
			   address = (uint32_t *)(0x40054000 + 0xf8 + i * 0x8);
			   data = data  & (~(1<<13));
			   *address = data;
			   PRINTF("%x \r\n", *(volatile uint32_t *)(0x40054000 + 0xf8 + i * 0x8) );			
		}

}

3. 总结

ADC的硬件设计最关键的就是ADC的参考电压以及电路设计引入的误差要小,才能满足设计的要求。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:54:10  更:2021-07-30 12:54:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 7:17:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码