您的当前位置:首页光敏电阻ad转换

光敏电阻ad转换

2021-11-16 来源:爱问旅游网
 课程名称: 单片机原理及应用

实验题目: A/D转换实验

附:实验报告

一、 实验目的

1. 掌握Keil软件的基本使用

2. 学习和掌握C语言编写程序的一般格式

3. 学习单片机简单的I/O口的控制方法

4. 学习数码管的控制方法

5. 学会看时序图,简单的SPI协议的使用

6. 掌握XPT2046把模拟信号转化为数字信号输出的方式

二、 实验内容

使用XPT2046芯片把光敏电阻采集的信号转化为数字信号,再使用数码管显示出亮度值(随光敏电阻的受光照程度不同,值也不一样)

三、 实验原理

(1) 光敏电阻的电路图

2

(2) 基础知识介绍

光敏电阻的工作原理

光敏电阻的工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。用于制造光敏电阻的材料主要是金属的硫化物、硒化物和碲化物等半导体。通常采用涂敷、喷涂、烧结等方法在绝缘衬底上制作很薄的光敏电阻体及梳状欧姆电极,接出引线,封装在具有透光镜的密封壳体内,以免受潮影响其灵敏度。

入射光消失后,由光子激发产生的电子—空穴对将复合,光敏电阻的阻值也就恢复原值。在光敏电阻两端的金属电极加上电压,其中便有电流通过,受到一定波长的光线照射时,电流就会随光强的增大而变大,从而实现光电转换。光敏电阻没有极性,纯粹是一个电阻器件,使用时既可加直流电压,也加交流电压。半导体的导电能力取决于半导体导带内载流子数目的多少。

光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。随着的光照强度的增加,光敏电阻的阻值开始迅速下降。若进一步增大光照强度,则电阻值变化减小,然后逐渐趋向平缓。在大多数情况下,该特性为非线性。

3

XPT2046是一款4线电阻式触摸屏控制器,采用12位125 kHz采样SAR型A / D转换器。

XPT2046工作电压低至2.2V,支持1.5V至VCC的数字I / O接口电压,以连接低压uP。 XPT2046可以通过执行两次A / D转换来检测按下的屏幕位置。 除了定位,XPT2046还可测量触摸屏压力。片上VREF可用于模拟辅助输入,温度测量和电池监控,能够测量0V至5V的电压。

XPT2046还具有片上温度传感器XPT2046采用16引脚QFN薄封装(高度0.75mm),工作温度范围宽:-40°C至+ 85°

(3) XPT2046芯片引脚图

4

(4) 芯片时序图

四、 实验过程

1. 这次实验需要用到xpt2046芯片,光敏电阻和数码管相关知识,首先对数据类型进行声明定义,定义共阴数码管0-F对应编码

Unsigned char table[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

定义P2两个端口,定义xpt2046芯片控制字输入端口、使能端(为低电平有效)、时钟输入端(在时钟时钟上升沿或下降沿进行数据输入或输出)、ad转换后,数字量输出口(串行输出)。代码如下:

5

sbit DIN=P3^4; sbit CS=P3^5; sbit CLK=P3^6; sbit DOUT=P3^7;

2. 主函数中while循环中开启模块使能,输入控制字0xD4 1101 0100,再延迟一些,等待下一个转换结果,结合时序图需要延迟一个时钟周期。SPI读取数据,再关闭模块使能

while(1) { CLK=0; CS=0;

SPI_write(0XD4); for(i=6;i>0;i--); CLK=1;_nop_();_nop_(); CLK=0;_nop_();_nop_(); SPI_read(); CS=1;

display(number); }

3. 接下来设置数码管显示的数字,也是电压值在光敏电阻作用下的变化值。结合for循环来对四位数字进行动态显示

void display(uint number1) {

6

int i=0;

number1=100-(number1/33); qian=number1/1000; bai=number1%1000/100; shi=number1%100/10; ge=number1%10; for(i=0;i<100;i++) {

AIN=0,BIN=0; P0=table[ge]; delayms(5); P0=0; AIN=1,BIN=0; P0=table[shi]; delayms(5); P0=0; AIN=0,BIN=1; P0=table[bai]; delayms(5); P0=0; AIN=1;BIN=1; P0=table[qian]; delayms(5); } }

7

4. 然后定义控制信号,控制位最高位赋给DIN输入口,接着串行输入,时钟上升沿将会控制字一位一位的输入

void SPI_write(uchar controlword) { uchar m; CLK=0;

for (m=0;m<8;m++) {

DIN=controlword>>7; controlword=controlword<<1; CLK=0; CLK=1; } }

5. 最后要注意清零,,number是全局变量,如果不清零下次再进行移位时运算的结果得不到所需要的number,number不赋初值的话全局变量默认初值为0。时钟下降沿,把一位数据从DOUT口输出,每次循环把DOUT输出的数字放在number最低位,同时number进行左移一位,十二个周期后,ad转换的12位数字量全部赋给了number=数字信号,实现ad转换完整过程。

void SPI_read(void) { uchar n; CLK=0;

8

number=0; for(n=0;n<12;n++) {

number=number<<1; CLK=1; CLK=0;

number = number | DOUT; } }

四、思考并回答以下问题

1、XPT2046芯片使用的数据传输协议是什么?请大概介绍一下这个协议。

XPT2046内部包含了一个多路选择器,能够测量电池电压、AUX电压、芯片温度。一个12位的ADC用于对选择的模拟输入通道进行模数转换,得到数字量,然后送入控制逻辑电路,供主控CPU进行读取,同时,具体选择哪个通道进行转换,也是由主控CPU发送命令给控制逻辑来设置的。同时支持笔触中断,即当触摸屏检测到触摸被按下时,可以立即产生笔触中断,通知主控制器可以控制开始转换并读取数据。在转换过程中,通过busy信号指示当前忙状态,以避免主控发出新的命令中断之前的命令,通过SPI接口与主控制器进行通信。

XPT2046可以单电源供电,电源电压范围为2.7V~5.5V。参考电压值直接决定ADC的输入范围,参考电压可以使用内部参考电压,也可以从外部直接输入1V~VCC范围内的参考电压(要求外部参考电压源输出阻抗低)。X、Y、Z、VBAT、Temp和AUX模拟信

9

号经过片内的控制寄存器选择后进入ADC,ADC可以配置为单端或差分模式。选择VBAT、Temp和AUX时可以配置为单端模式;作为触摸屏应用时,可以配置为差分模式。

2、为什么这个芯片的编程需要根据时序图来进行编写?

因为要想正确的读到X、Y坐标,需要按照芯片规定的控制协议进行数据的读写。XPT2046实现一次X、Y坐标的读取需要完成两次转换,单一一次转换只能得到单一X或Y的坐标,因此,我们必须通过两次控制才能到到结果。至于每一次转换的对象为X或Y坐标,由控制器发出的控制字决定。ADC在转换时能够被配置为单端或差分模式,具体的控制字在每次传输开始的时候,由主控MCU驱动DIN信号传输。

XPT2046数据接口是串行接口,其典型工作时序如下图所示,图中展示的信号来自带有基本串行接口的单片机或数据信号处理器。处理器和转换器之间的的通信需要8个时钟周期,可采用SPI、SSI和Microwire等同步串行接口。一次完整的转换需要24个串行同步时钟(DCLK)来完成。

前8个时钟用来通过DIN引脚输入控制字节。当转换器获取有关下一次转换的足够信息后,接着根据获得的信息设置输入多路选择器和参考源输入,并进入采样模式,如果需要,将启动触摸面板驱动器。3个多时钟周期后,控制字节设置完成,转换器进入转换状

10

态。这时,输入采样-保持器进入保持状态,触摸面板驱动器停止工作(单端工作模式)。接着的12个时钟周期将完成真正的模数转换。

3、大概介绍一下模数转换应用于哪些领域?主要做什么?(列出三点以上)

应用到我们能量化的数据,广泛应用在多媒体、通讯、自动化、仪器仪表、医疗仪器、电子测量。军事、航天系统等领域,采用脉动型和折叠型等结构的高速模数转换,可应用于广播卫星中的基带解调等方面。

1、测温计:使用热敏电阻测温,将热敏电阻测得的温度转换为电压值,经AD转换后显示温度

2、电机控制应用:电机的转速和位置可以通过监控电机每个相位的电流来判断。A/D转换器能非常精确地监控电流,因而对电机控制应用十分理想

3、智能手机:cpu通过各种传感器(如摄像头)才能够与外界互动,A/D转换器就是一种不可或缺的桥梁。

五、实验总结和体会

在完成A/D转换实验的过程中我了解了spt2046芯片相关的原理和内部功能,虽然只接触这个典型的逐次逼近型模数转换器,但是觉着要学习的还是蛮多的,重点是要根据时序图来对其操作程序,这个还是有很多不懂的地方,对程序除了原先接触过的可以理解外,新学到的串行接口和控制字这些还需要花时间去学习,光敏电阻以前学过相关知识还好理解,总的来说就是看到懂若是自己编写还是不能写的好,不过要学号这些还是要多练,

11

多记一些相关代码功能。

12

因篇幅问题不能全部显示,请点此查看更多更全内容