AD/DA(模数数模转换)

news2025/1/18 6:55:26

文章目录

  • 前言
  • 一、介绍部分
    • 介绍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.coloradmin.cn/o/1416541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell常用命令,参数传递,函数,挂载磁盘

一、shell常用命令 1、ls 功能:显示文件和目录的信息ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls -lh 显示文件的大小,以容易理解的格式印出文件大小 (例如 1K 234M2…

echarts多个折线图共用X轴,实现tooltip合并和分离

echarts共享X轴案例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</…

数据结构(栈stack)

文章目录 一、栈1、栈的定义2、顺序栈2.1、初始化2.2、进栈2.3、出栈2.4、读取 3、链栈 一、栈 1、栈的定义 逻辑结构&#xff1a;与普通线性表相同数据的运算&#xff1a;插入、删除操作有区别 2、顺序栈 2.1、初始化 ”.”适用于结构体变量&#xff0c;”->”适用于…

【算法专题】二分查找(入门)

&#x1f4d1;前言 本文主要是二分查找&#xff08;入门&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日…

探索元宇宙的未来:数字人对话系统 - Linly-Talker —— “数字人交互,与虚拟的自己互动”

探索元宇宙的未来&#xff1a;数字人对话系统 - Linly-Talker —— “数字人交互&#xff0c;与虚拟的自己互动” 之前空闲的时候我似乎已经写过了有关于数字人的两篇文章&#xff0c;今天更多的写这篇文章就是想探索一下元宇宙的未来&#xff0c;这种数字人对话系统能做什么&…

算法沉淀——双指针算法(leetcode真题剖析)

算法沉淀——双指针算法 01.移动零02.复写零03.快乐数04.盛最多水的容器05.有效三角形的个数06.和为s的两个数字07.三数之和08.四数之和 双指针算法&#xff08;Two Pointer Algorithm&#xff09;是一种常用于数组&#xff08;或链表&#xff09;操作的算法技巧。它的核心思想…

2024年1月的论文推荐

又到月底了&#xff0c;在月初推荐论文的基础上又整理了10篇推荐阅读的论文 1、MosaicBERT https://mosaicbert.github.io/ 一种用于快速预训练的双向编码器。MosaicBERT是针对快速预训练优化的自定义BERT架构。主要架构修改:FlashAttention, ALiBi&#xff0c;门控线性单元…

【JavaWeb程序】【C00150】基于SSM的二手交易平台管理系统-(论文+PPT)

基于SSM的二手交易平台管理系统-&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目包运行、免费远程调试 项目简介 这是一个基于ssm的二手交易平台管理系统 本系统分为用户和管理员两个模块。 其中用户的权限为&#xff1a;修改个人信息、闲置商…

log4j2 java api 入门介绍

概述 Log4j 2 API 提供了应用程序应该编码的接口&#xff0c;并提供了实现者创建日志实现所需的适配器组件。 虽然 Log4j 2 在 API 和实现之间被分解&#xff0c;但这样做的主要目的不是允许多个实现&#xff0c;尽管这当然是可能的&#xff0c;而是明确定义在“正常”应用程…

探索机器学习的奥秘

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 机器学习的定义二. 机器学习的发展历程三. 机器学习的原理四. 机器学习的分类…

路由、组件目录存放

文章目录 单页应用程序&#xff1a;SPA- Single Page Application路由的介绍VuePouter的介绍VueRouted 的使用 组件目录存放问题&#xff08;组件分类&#xff09; 单页应用程序&#xff1a;SPA- Single Page Application 单页应用&#xff08;SPA&#xff09;:所有功能在一个…

四. 基于环视Camera的BEV感知算法-BEVFormer实战

目录 前言1. BEVFormer实战 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Camera的BEV感知算法&#xff0c;一起去学习下 BEVFormer 的相关代码 课程…

MySQL之索引分类,语法以及SQL性能分析(慢日志,profile,explain)

索引分类 分类含义特定关键字主键索引针对于表中主键创建的索引默认自动创建&#xff0c;只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以有多个UNIQUE常规索引快速定位特定数据可以有多个全文索引全文索引查找的文本中的关键字&#xff0c;而不是比较索引中的…

04.领域驱动设计:了解聚合和聚合根,怎样设计聚合

目录 1、概述 2、聚合 3、聚合根 4、怎么设计聚合 4.1 聚合的构建过程主要步骤 第 1 步&#xff1a;采用事件风暴。 第 2 步&#xff1a;选出聚合根。 第 3 步&#xff1a;找出与聚合根关联的所有紧密依赖的实体和值对象。 第 4 步&#xff1a;画出对象的引用和依赖模型…

web前端项目-五子棋【附源码】

五子棋&#xff08;人机对弈&#xff09; 本项目【五子棋】是一款人机对弈的策略型棋类游戏。可以选择落子方&#xff1b;游戏难度和是否显示落子次序。游戏双方分别使用黑白两色的棋子&#xff0c;在棋盘直线与横线的交叉点上进行对弈。五子棋可以促进大脑发育、提高思维能力…

go语言基础之泛型

1.泛型 泛型是一种独立于所使用的特定类型的编写代码的方法。使用泛型可以编写出适用于一组类型中的任何一种的函数和类型。 1.1 为什么需要泛型 func reverse(s []int) []int {l : len(s)r : make([]int, l)for i, e : range s {r[l-i-1] e}return r }fmt.Println(reverse…

Docker—入门及Centos7安装

1、Docker入门 1.1、Docker是什么&#xff1f; Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build&#xff0c;Ship&#xff0c;and Run Any App,Anywhere”&#xff0c;也就是通过对应组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP&…

指数计算(填空)

解题思路&#xff1a; 7的2020次方很大&#xff0c;需要用BigInteger来进行运算。 pow用来算指数运算。 remainder用来算BigInteger之间的取余。 解题代码&#xff1a; public static void main(String[] args) {BigInteger xnew BigInteger ("7");BigInteger ynew…

Tools工具安装及模板制作

Tools工具&#xff1a; 如何安装tools 1、右键单击——tools——挂载tools 2、把光盘里面的内容挂载到系统的临时挂载目录里面 mount /dev/cdrom /mnt 先卸载光盘 安装zip包 ********************************************** 使用yum源 1、挂载光盘 2、配置yum 写文件 安装…

java servlet勤工助学家教管系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet 勤工助学家教管系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myecli…