51单片机-AD(模拟信号转数字信号)-实验(电压采集)

介绍AD

AD转换(Analog to Digital Conversion,模数转换)是将连续的模拟信号转换为离散的数字信号的过程。这个过程在各种电子设备中都非常重要,特别是在涉及传感器、音频信号、视频信号等需要进行数字化处理的领域。

个人理解:就是将连续变换的函数,以离散的形式表达出来,(如正弦波转方波)。一般情况下就是单通道的模拟信号,转多通道的数字信号!

AD转换的主要步骤:

  1. 采样

    • 对模拟信号在特定的时间间隔进行采样。采样率是每秒采集的样本数,通常以赫兹 (Hz) 为单位表示。根据采样定理(奈奎斯特定理),采样率必须至少是信号最高频率的两倍,以避免混叠效应。
  2. 量化

    • 将采样得到的连续信号幅度值转换为离散的数值。量化会产生一个误差,称为量化误差,因为模拟信号是连续的,而数字信号是离散的。
  3. 编码

    • 将量化后的离散幅度值用二进制数字表示,以便在计算机中进行处理或存储。编码的精度取决于使用的位数,位数越高,表示信号的精度越高。

示例:

假设我们有一个音频信号,采样率为 44.1kHz(即每秒采集 44100 个样本),并使用 16 位来表示每个采样点的幅度。AD转换会定期从模拟音频波形中采样,将每个样本的幅度值量化为 16 位的数字,并以二进制形式表示。

关键概念:

  • 采样率:决定了信号被捕获的频率。
  • 量化精度:决定了信号幅度的精度,位数越高,信号越精确。
  • 混叠:当采样率低于奈奎斯特频率时,高频信号会被错误地采样,导致失真。

通过AD转换,模拟信号可以被计算机处理或传输,从而应用在数字化处理任务中,如音频录制、图像处理、传感器数据采集等场景。

常见的的AD转化电路

通过驱动触摸屏的芯片来做AD(51单片机)

(自己查数据手册)

AD实验

#include "xpt2046.h"
#include "intrins.h"

/*******************************************************************************
* 函 数 名       : xpt2046_wirte_data
* 函数功能		 : XPT2046写数据
* 输    入       : dat:写入的数据
* 输    出    	 : 无
*******************************************************************************/
void xpt2046_wirte_data(u8 dat)
{
	u8 i;

	CLK = 0;
	_nop_();
	for(i=0;i<8;i++)//循环8次,每次传输一位,共一个字节
	{
		DIN = dat >> 7;//先传高位再传低位
		dat <<= 1;//将低位移到高位
		CLK = 0;//CLK由低到高产生一个上升沿,从而写入数据
		_nop_();	
		CLK = 1;
		_nop_();
	}
}

/*******************************************************************************
* 函 数 名       : xpt2046_read_data
* 函数功能		 : XPT2046读数据
* 输    入       : 无
* 输    出    	 : XPT2046返回12位数据
*******************************************************************************/
u16	xpt2046_read_data(void)
{
	u8 i;
	u16 dat=0;

	CLK = 0;
	_nop_();
	for(i=0;i<12;i++)//循环12次,每次读取一位,大于一个字节数,所以返回值类型是u16
	{
		dat <<= 1;
		CLK = 1;
		_nop_();
		CLK = 0; //CLK由高到低产生一个下降沿,从而读取数据
		_nop_();
		dat |= DOUT;//先读取高位,再读取低位。	
	}
	return dat;	
}

/*******************************************************************************
* 函 数 名       : xpt2046_read_adc_value
* 函数功能		 : XPT2046读AD数据
* 输    入       : cmd:指令
* 输    出    	 : XPT2046返回AD值
*******************************************************************************/
u16 xpt2046_read_adc_value(u8 cmd)
{
	u8 i;
	u16 adc_value=0;

	CLK = 0;//先拉低时钟
	CS  = 0;//使能XPT2046
	xpt2046_wirte_data(cmd);//发送命令字
	for(i=6; i>0; i--);//延时等待转换结果
	CLK = 1;
	_nop_();
	CLK = 0;//发送一个时钟,清除BUSY
	_nop_();
	adc_value=xpt2046_read_data();
	CS = 1;//关闭XPT2046
	return adc_value;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值