当前位置: 首页 > news >正文

AD/DA(模数数模转换)

文章目录

  • 前言
  • 一、介绍部分
    • 介绍AD/DA
    • 硬件电路模型
    • 硬件电路
      • ADC模块
      • DAC模块
      • ADC0809
      • DAC0832
    • 运算放大器(运放)
      • 运放电路
    • DA原理
      • 两种不同的DA转换器
    • AD原理
    • 部分AD/DA性能指标
    • XPT2046介绍
      • 主要功能
      • XPT2046时序结构
        • 控制字节解释
        • 单端模式配置表
  • 二、实例
    • 使用AD读取单片机上四种电阻的值
      • 配置XPT2046.c
      • 主函数测试
    • 使用DA实现呼吸灯


前言

模数转换,即Analog-to-Digital Converter,常称ADC,是指将连续变量的模拟信号转换为离散的数字信号的器件,比如将模温度感器产生的电信号转为控制芯片能处理的数字信号0101,这样ADC就建立了模拟世界的传感器和数字世界的信号处理与数据转换的联系。反之,能把数字信号转换为模拟信号的电路称为数模转换器 (Digital to Analog Converter,简称为DAC或D/A转换器)


`

一、介绍部分

介绍AD/DA

硬件电路模型

在这里插入图片描述

硬件电路

ADC模块

在这里插入图片描述

DAC模块

在这里插入图片描述

这里以两个老器件学习

ADC0809

在这里插入图片描述

DAC0832

在这里插入图片描述

运算放大器(运放)

理想的运放电路分析有两大重要原则贯穿始终,即“虚短”与“虚断”。
“虚短”的意思是正端和负端接近短路,即V+=V-,看起来像“短路”;
“虚断”的意思是流入正端及负端的电流接近于零,即I+=I-=0,看起来像断路(因为输入阻抗无穷大)

在这里插入图片描述

运放电路

在这里插入图片描述
在这里插入图片描述

DA原理

两种不同的DA转换器

在这里插入图片描述

两个滤波器效果更好,让留下的直流点电更平滑

在这里插入图片描述

AD原理

逐次逼近:对8位依次判断,若小于这个值则置0判断下一位,若大于这个值则置1继续判断下一位

在这里插入图片描述

部分AD/DA性能指标

在这里插入图片描述

XPT2046介绍

主要功能

在这里插入图片描述

XPT2046时序结构

上升沿写入,下降沿输出

在这里插入图片描述

控制字节解释

本单片机AD为单端模式
在这里插入图片描述

详解
在这里插入图片描述

单端模式配置表

在这里插入图片描述

二、实例

使用AD读取单片机上四种电阻的值

配置XPT2046.c

#include <REGX52.H>
#include "Delay.h"// 引脚定义
sbit XPT2046_CS = P3^5;
sbit XPT2046_DCLK = P3^6;
sbit XPT2046_DIN = P3^4;
sbit XPT2046_DOUT = P3^7;/*** @brief		XPT2046读取ad* @param		Command 写入的命令地址* @retval	ADValue 返回的AD值*/
unsigned int XPT2046_ReadAD(unsigned char Command){unsigned int ADValue = 0;unsigned char i;XPT2046_DCLK = 0;XPT2046_CS = 0;for(i=0;i<8;i++){XPT2046_DIN = Command & (0x80 >> i);		// 写入命令XPT2046_DCLK = 1;			// 高电平写入XPT2046_DCLK = 0;			// 复位}// Delayms(1);							// 时序忙等时间for(i=0;i<16;i++){XPT2046_DCLK = 1;	XPT2046_DCLK = 0;		if(XPT2046_DOUT){ADValue |= (0x8000>>i);}}XPT2046_CS = 1;						// 结束时序if(Command & 0x08){return ADValue>>8;}else{return ADValue>>4;}
}

主函数测试

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"unsigned int ADValue;
void main(){LCD_Init();LCD_ShowString(1,1,"ADC");while(1){ADValue = XPT2046_ReadAD(XPT2046_XP_12);LCD_ShowNum(2,1,ADValue,4);ADValue = XPT2046_ReadAD(XPT2046_YP_12);LCD_ShowNum(2,6,ADValue,4);ADValue = XPT2046_ReadAD(XPT2046_VBAT_12);LCD_ShowNum(2,11,ADValue,4);ADValue = XPT2046_ReadAD(XPT2046_AUX_12);LCD_ShowNum(1,11,ADValue,4);Delayms(100);}
}

使用DA实现呼吸灯

大部分情况可以直接使用PWM代替DA,所以应用并不广泛

#include <REGX52.H>
#include "Delay.h"
#include "Time0Init.h"sbit DA = P2^1;unsigned char Counter,Compare;	// 周期、比较值
unsigned char KeyNum,i;
void main(){Time0_Init();while(1){for(i=0;i<100;i++){Compare = i;Delayms(10);}for(i=100;i>0;i--){Compare = i;Delayms(10);}}
}// 中断函数
void Timer0_Routine() interrupt 1
{	TL0 = 0xA4;				//设置定时初始值TH0 = 0xFF;				//设置定时初始值Counter++;// 设置周期if(Counter>=100){Counter = 0;}	//	与比较值进行比较if(Counter<Compare){DA = 1;			// 给电}else{DA = 0;			// 不给电}
}
http://www.lryc.cn/news/289428.html

相关文章:

  • Docker数据卷挂载(以容器化Mysql为例)
  • YOLOv8-Seg改进:注意力系列篇 | non-local自注意力,助力小目标分割
  • 【Qt无门槛入门】信号以及信号机制及其常用控件(1)
  • 【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】
  • 排序(插入排序)
  • Spring MVC 请求流程
  • 鸿蒙ArkUI 宫格+列表+HttpAPI实现
  • 【C++中的STL】常用算法1——遍历算法和查找算法
  • Jmeter性能测试: 基于JDK 21 安装 Jmeter 5.6.3
  • Linux命令-apropos命令(在 whatis 数据库中查找字符串)
  • 【算法】解决动态规划问题的通用步骤思路及示例算法:打家劫舍【动态规划】
  • 蓝桥杯之即约分数
  • Pointnet++改进优化器系列:全网首发Sophia优化器 |即插即用,实现有效涨点
  • 1.27回溯(中等)
  • sql管理工具archery简介
  • DEM高程地形瓦片数据Cesium使用教程
  • 3个精美的wordpress律师网站模板
  • 在windows环境下安装hadoop
  • 大数据分析组件Hive-集合数据结构
  • 单核QPS近6000S,陌陌基于OceanBase的持久化缓存探索与实践
  • 关于css 的基础试题
  • Keil-C语言小总结
  • react的withRouter高阶组件:
  • 小程序 样式 WXSS
  • LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论
  • Scikit-learn (sklearn)速通 -【莫凡Python学习笔记】
  • 支持向量机(SVM)详解
  • huggingface学习|云服务器部署Grounded-Segment-Anything:bug总会一个一个一个一个又一个的解决的
  • 【最佳实践】Go 组合模式对业务解耦
  • arm 汇编调用C