7076|10

1071

帖子

7

TA的资源

纯净的硅(中级)

楼主
 

ADuc7026学习-ADC [复制链接]

本帖最后由 dj狂人 于 2015-1-12 17:28 编辑

                                                                                    ADuc7026-ADC

         进度有点慢,手工做的东西不是很靠谱,不懂是不是JTAG接口电路的问题,有时候你随便插拔都用的好好的,可是有时候你动一下就下不了程序了,keil不是提示算法加载不成功就是提示TDO一直为高,可是有时候你放一晚或者插拔一下又能下了。郁闷...
         好了,题外话不扯那么多,开撸.....
         开撸之前咱来预热下,首先比较器,上图
比较比较顾名思义就是起到比较的作用。当比较器的同相端电压高于反相端电压时,输出端输出高电平,反之,当同相端电压低于反相端电压时,输出端输出低电平。这里我们先记住比较器的这个特性。
        接着是DAC,上图
         DAC又叫数模转化器,它能把数字信号转换成模拟信号。比如上图我们看到的是一个八位的DAC,这里假设它是电压型DAC,参考电压Vref = 5V,那么当我们从数据口D0~D7输入0-255之间的某个数字时,输出端输出相应的模拟电压Vo(0~5V)。比如通过D0~D7输入数字量0x00时,输出端电压Vo为0V,输入数字量为0xff时...输出端电压为5V。
         好,基于以上的基础,现在要求我们用一个比较器、一个DAC和单片机实现测量一个外部电压,这个外部电压在0~5V范围内。那么我们可以这样做,上图
         在上面的这个电路图中,DAC的参考电压为Vref= 5V,然后DAC为电压输出型DAC,它的输出端和比较器的反相端接在了一起,然后外部电压Vx从同相端输入,单片机通过给DAC输入不同的数字量控制DAC输出0~5V之间的模拟电压,同时通过引脚a检测比较器输出电压。那么要想测出外部电压Vx,我们可以这样编程实现:(假如Vx等于2V)
单片机先给DAC输入数字量0x00,控制DAC输出0V的模拟电压,然后单片机判断引脚a是否变为低电平,如果是高电平,加大输给DAC的数字量,每次加一,数字量依次为0x01、0x02、0x03...相应的DAC输出的模拟电压依次为20mv、40mv...只要引脚a电平为高,就一直加,直到引脚a变为低电平。当引脚a变为a电平的时候,因为我们的Vo是以20mv的电压为增量慢慢的接近Vx的,所以此时的反相端电压我们可以认为Vo=Vx,这样我们就测出了这外部电压Vx。
从上面可以看出比较器+DAC+其他器件 就可以做成一个ADC,ADC的精度由DAC决定,这种ADC我们叫逐次逼近型ADC。

PS:ADC又叫模数转换器,他能把模拟型号转换成数字信号。八位的ADC,参考电压 Vref = 5V的时候,是把5V电压分成了28  = 256份,一份为5/256mv约等于20mv(这个5/256我们通常叫最小分辨率),然后0~20mv范围内的模拟电压用数字量0x00表示,20~40mv范围内的模拟电压用0x01表示,以此类推......

最新回复

ADCDAT 的高四位存放符号位,需要处理吗  详情 回复 发表于 2015-11-14 14:10

赞赏

1

查看全部赞赏

点赞 关注
 
 

回复
举报

1071

帖子

7

TA的资源

纯净的硅(中级)

沙发
 
本帖最后由 dj狂人 于 2015-1-12 17:29 编辑

好,预热完,接下来进入今天的主题
ADuc7026内部集成了一个12位的逐次逼近型ADC,它共有16的通道,工作电压为2.7V-3.6V,最高采样速率达1MSPS,7026还为其配置了一个片内基准源,该基准源为ADC、DAC共用,通过对 REFCON寄存器的最低位置位开启。
7026的这个ADC可以工作在三种模式下,分别为全差分模式、单端模式、伪差分模式。当工作在单端模式或伪差分模式下时,ADC模拟输入范围为0V至V REF 。在全差分模式下,输入信号共模电压V CM 在0 V至AV DD 之间、最大幅值不超过2 V REF。
跟ADC相关的寄存器共有八个寄存器,分别为 ADCCON、ADCCP、ADCCN、ADCSTA、ADCDAT、ADCRST、ADCGN、ADCOF。其中
ADCCON 是一个16位的ADC控制寄存器,通过它来使能ADC外设,配置ADC的工作模式和转换类型,其中
15~13 保留。
12~10 设置ADC 时钟速度。
000  fADC/1 。 该分频器用于在外部时钟频率小于
41.78MHz 时获得 1MSPSADC 。
001  fADC/2 ( 默认值 ) 。
010  fADC/4 。
011  fADC/8 。
100  fADC/16 。
101  fADC/32 。
9~8 设置ADC 采集时间。
00  2 个时钟。
01  4 个时钟。
10  8 个时钟 ( 默认值 ) 。
11  16 个时钟。
7 转换启动使能。
置 1 ,启动任意类型的转换。清 0 禁用转换启动(清 0 该位不能使正进行连续转换停止)。
6 使能 ADC BUSY 。
置 1 , 使能 ADC BUSY 引脚。 清 0 则禁用该引脚。
5 ADC 电源控制。
置 1 , 置 ADC 于正常模式 ( ADC 在上电至少 5微秒之后才能正确转换)清0 ,ADC 置于掉电模式。
4~3 设置ADC转换模式。
00  单端模式。
01  差分模式。
10  伪差分模式。
11  保留。
2:0 设置ADC转换类型。
000  CONVSTART引脚输入作为转换使能信号。
001  定时器 1 输出作为转换使能信号。
010  定时器 0 输出作为转换使能信号
011  单次软件转换。在转换后设为 000 (注意:为了避免CONV-START
引脚再一次触发转换,ADDCON MMR 的第 7 位在启动单次软件转换后应清 0 )。
100  连续软件转换。
101  PLA 转换。
其他 保留。
ADCCP 是一个八位的ADC正向通道选择寄存器,其中
7~5保留。
4~0 ADC正向通道选择位。
00000  ADC0
00001  ADC1
00010  ADC2
00011  ADC3
00100  ADC4
00101  ADC5
00110  ADC6
00111  ADC7
01000  ADC8
01001  ADC9
01010  ADC10
01011  ADC11
01100  DAC0/ADC12
01101  DAC1/ADC13
01110  DAC2/ADC14
01111  DAC3/ADC15
10000  温度传感器。
10001  AGND (自诊断特性)。
10010  内部基准电压(自诊断特性)。
10011  AV DD /2 。
Others  保留。

 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

板凳
 
本帖最后由 dj狂人 于 2015-1-12 17:29 编辑

ADCCN 是一个八位的ADC反相通道寄存器,其中
7~5 保留。
4:0 反向通道选择位。
00000 ADC0
00001 ADC1
00010 ADC2
00011 ADC3
00100 ADC4
00101 ADC5
00110 ADC6
00111 ADC7
01000 ADC8
01001 ADC9
01010 ADC10
01011 ADC11
01100 DAC0/ADC12
01101 DAC1/ADC13
01110 DAC2/ADC14
01111 DAC3/ADC15
10000 内部基准电压(自诊断特性)
Others 保留。

ADCSTA是一个ADC状态寄存器,也是八位。它指示ADC转换结果已完成。
ADCSTA寄存器只有一个位Bit0(ADCReady),表示ADC的转换状态。在一次ADC转换完成后该位置1,并且产生一个ADC中断。当读取ADCDATMMR时,该位自动清0。在ADC进行转换时, 也可以通过外部ADC BUSY 引脚读取ADC的工作状态。 在转换期间, 该引脚上为高电平; 当转换结束后, ADC BUSY引脚变为低电平。如果通过ADCCON寄存器使能,则可以在P0.5引脚输出ADC BUSY 的状态 (参见 “通用输入/输出” 部分) 。

ADCDAT为ADC数据结果的32位寄存器。里面存放12位ADC转换结果,其中高四位存放符号位,底16位保留,27~16保存的是12位ADC转换结果。(在全差分模式下,其结果是二进制补码格式。在伪差分模式和单端模式下,结果是
标准二进制格式表示。)

ADCRST寄存器可以复位ADC的数字接口。通过向ADCRST中写入任意数据,可恢复所有ADC寄存器到默认值。

ADCOF是一个10位偏移校准寄存器。

 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

4
 
本帖最后由 dj狂人 于 2015-1-12 17:30 编辑

那好,我们下面来编程调用ADC进行电压测量
上面介绍了那么多个寄存器,但其实在一般的场合只用配置其中几个个就可以了,并不是全部都需要用到,比如最简单的
#include
int main(void)
{
    int Result=0;   
    ADCCON = 0x20;//至少在开启电源5us之后再开始ADC转换
   Delay(5);     //5us短延时
   ADCCP = 0x00; //选择ADC0转换通道
    REFCON= 0x01;//使用内部基准源(建议使用内部基准源)
    ADCCON = 0x07E4;/*配置ADC的工作模式并开启ADC转换,
000 001 11 1 1 1 00 100  ADC的时钟速度为fADC/2、ADC采样时间为16个时钟、启动ADC转换、使能ADCBUSY、打开ADC电源、选择单端模式、选择连续转换*/
While(1)
{
    while (!ADCSTA);    //等待转换结束
Result = ADCDAT>>16;//从数据结果寄存器中取出转换数据
    DisPlay(Result);    //通过串口或液晶显示转换结果
}
}
以上这个是比较简单的应用,除了这种之外,我们还可以用ADC来进行两个信号的比较或者平衡信号,比如全差分模式。我们还可以把ADuc7026的ADC配置成温度传感器,不过它只能测量芯片内部温度,无法用于进行外部温度测量。
     这里我只是简单介绍了ADuc7026内部集成的这个ADC的皮毛内容,有兴趣的可以买一块或者申请样片回去玩玩,撸完,收工

 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

5
 
本帖最后由 dj狂人 于 2015-1-12 17:39 编辑

            上几张图,已经受不了JTAG接口,现在改用串口下程序,没想到串口下载也是波折,还是焊接问题,顶层镜像的时候母头插座忘了处理下,结果悲剧,焊反反了!!!!!只能重新拆了焊,板子到现在已经面目全非,哎,说多都是泪






 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢楼主分享!
 
 
 

回复

403

帖子

6

TA的资源

纯净的硅(中级)

7
 
感光板做的PCB啊,握握爪子  楼主写的真不错,看着也是一种享受啊,学习了  
个人签名如果天空是黑暗的,那就摸黑生存;如果发出声音是危险的,那就保持沉默...但不要习惯了黑暗就为黑暗辩护;不要为自己的苟且而得意;不要嘲讽那些比自己更勇敢热情的人们。人可以卑微如尘土,不可扭曲如蛆虫。
 
 
 

回复

6078

帖子

4

TA的资源

版主

8
 
感谢分享!
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

9
 
看的非常舒服,赞一个

点评

谢谢  详情 回复 发表于 2015-10-12 12:36
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

10
 
周琦 发表于 2015-10-4 19:51
看的非常舒服,赞一个

谢谢
 
 
 

回复

19

帖子

2

TA的资源

一粒金砂(中级)

11
 
ADCDAT 的高四位存放符号位,需要处理吗
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表