色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:IT培訓(xùn) > 華清遠見教育科技集團 > 嵌入式學(xué)習(xí) > 講師博文 > 模數(shù)轉(zhuǎn)換電路
模數(shù)轉(zhuǎn)換電路
時間:2018-03-30作者:華清遠見
      一、Exynos4412 A/D轉(zhuǎn)換器概述
      1. 概述
      ADC(Analog-to-Digital Converter),就是模數(shù)轉(zhuǎn)換器。從字面上看,A我們稱為模擬信號(Analog signal),D我們稱為數(shù)字信號(digital signal)。
模數(shù)轉(zhuǎn)換器,在電子技術(shù)中即是將模擬信號轉(zhuǎn)換成數(shù)字信號,也稱為數(shù)字量化。當然還有一種叫DAC,就是數(shù)模轉(zhuǎn)換,意思相反,即是將數(shù)字信號轉(zhuǎn)換成模擬信號。
在我們的日常生活中,會遇到很多的物理量,遇到很多的物理參數(shù),其中,我們經(jīng)常遇到的物理參數(shù),如電流、電壓、溫度、壓力、速度等電量或非電量都是模擬量。
模擬量的大小是連續(xù)分布的,且經(jīng)常也是時間上的連續(xù)函數(shù)。要使計算機或數(shù)字儀表能識別、處理這些信號,必須首先將這些模擬信號轉(zhuǎn)換成數(shù)字信號;而經(jīng)計算機分析、處理后輸出的數(shù)字量也往往需要將其轉(zhuǎn)換為相應(yīng)模擬信號才能為執(zhí)行機構(gòu)所接受。這樣,就需要一種能在模擬信號與數(shù)字信號之間起橋梁作用的電路—模數(shù)和數(shù)模轉(zhuǎn)換器。
      2. 分類
      目前常見的A/D轉(zhuǎn)換器中,有:權(quán)電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器、倒T型電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器、權(quán)電流型D/A轉(zhuǎn)換器、權(quán)電容網(wǎng)絡(luò)D/A轉(zhuǎn)換器、開關(guān)樹形D/A轉(zhuǎn)換器。
      3. A/D轉(zhuǎn)換主要技術(shù)指標
      1)分辨率
        A/D轉(zhuǎn)換器的分辨率用輸出二進制數(shù)的位數(shù)表示,位數(shù)越多,誤差越小,轉(zhuǎn)換精度越高。
      2)量化誤差
    在A/D轉(zhuǎn)換中由于整量化產(chǎn)生的固有誤差。量化誤差在±1/2LSB(最低有效位)之間。
      3)轉(zhuǎn)換時間
    轉(zhuǎn)換時間是指A/D轉(zhuǎn)換器完成一次轉(zhuǎn)換所需的時間。轉(zhuǎn)換時間是指從接到轉(zhuǎn)換控制信號開始,到輸出端得到穩(wěn)定的數(shù)字輸出信號所經(jīng)過的這段時間。
      4)偏移誤差
    輸入信號為零時輸出信號不為零的值,可外接電位器調(diào)至最小。
      5)滿刻度誤差
      滿刻度輸出時對應(yīng)的輸入信號與理想輸入信號值之差。
      6)線性度
      實際轉(zhuǎn)換器的轉(zhuǎn)移函數(shù)與理想直線的最大偏移,不包括以上3種誤差。
其他指標還有:絕對精度(Absolute Accuracy)、相對精度(Relative Accuracy)、微分非線性、單調(diào)性和無錯碼、總諧波失真(Total Harmonic Distortion,THD)和積分非線性。
      二、Exynos 4412 A/D轉(zhuǎn)換器簡介
      1.簡述
       10位或12位CMOS再循環(huán)式模擬數(shù)字轉(zhuǎn)換器,它具有10通道輸入,并可將模擬量轉(zhuǎn)換至10位或12位二進制數(shù)。5Mhz A/D 轉(zhuǎn)換時鐘時,最大1Msps的轉(zhuǎn)換速度。A/D轉(zhuǎn)換具備片上采樣保持功能,同時也支持待機工作模式。
      2.特性
      ADC接口包括如下特性。
      1)10bit/12bit輸出位可選。
      2)微分誤差  1.0LSB。
      3)積分誤差  2.0LSB。
      4)最大轉(zhuǎn)換速率5Msps.
      5) 功耗少,電壓輸入1.8V。
      6)電壓輸入范圍 0~1.8V。
      7)支持偏上樣本保持功能。
      8)通用轉(zhuǎn)換模式。
      3. A/D功能模塊圖
模數(shù)轉(zhuǎn)換電路
圖1  ADC Functional Block Diagram
      2. Exynos4412 A/D 控制器寄存器
      1A/D控制寄存器ADCCON
模數(shù)轉(zhuǎn)換電路
      2)A/D數(shù)據(jù)寄存器
模數(shù)轉(zhuǎn)換電路
      3)A/D通道Mux寄存器
模數(shù)轉(zhuǎn)換電路
      三、A/D轉(zhuǎn)換器實例
      1. 電路連接如下:
      利用一個電位計輸出電壓到4412的AIN3管腳。輸入的電壓范圍為0~1.8V。
模數(shù)轉(zhuǎn)換電路
1. 代碼如下:
#include <asm/ioctl.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/uaccess.h>
#include <asm/io.h>
 
#define ADC_MAGIC  'A'
#define CMD_ONE       1
#define ADC_CMD_GET _IOR(ADC_MAGIC, CMD_ONE, int)
 
//寄存器定義
#define        ADC_CFG            (0x10010118)
#define           ADCCON              (0x126C0000)
#define           ADCDAT              (0x126C000C)
#define           ADCMUX             (0x126C001C)
 
dev_t dev;
int minor_base = 0;
int adc_count = 1;
char adc_name[] = "adc";
struct cdev *pcdev = NULL;
struct class *pcls = NULL;
static unsigned int *adccfg;
static unsigned int *adcmux;
static unsigned int *adccon;
static unsigned int *adcdat;
 
int AdcInit(void)
{
       int ret = 0;
      
       adccfg = ioremap(ADC_CFG, 4);
       if (adccfg == NULL) {
              printk("ioremap adccfg\n");
              ret = -ENOMEM;
              return ret;
       }
 
       adcmux = ioremap(ADCMUX, 4);
       if (adcmux == NULL) {
              printk("ioremap adcmux\n");
              ret = -ENOMEM;
              goto ERR1;
       }
 
       adccon = ioremap(ADCCON, 4);
       if (adccon == NULL) {
              printk("ioremap adccon\n");
              ret = -ENOMEM;
              goto ERR2;
       }
 
       adcdat = ioremap(ADCDAT, 4);
       if (adcdat == NULL) {
              printk("ioremap adcdat\n");
              ret = -ENOMEM;
              goto ERR3;
       }
      
       //ADC_CFG &= ~(0x1 << 16);
       writel(readl(adccfg) & ~(0x1<<16), adccfg);  //Bit_16:Select ADC Mux 0:General ADC, 1:MTCADC
      
       //ADCMUX = 0x3;
       writel(3, adcmux);  //0x3: 0011 = AIN3   //原理圖管腳查到XadcAIN3
 
       //12bit A/D conversion; enable A/D converter prescaler; prescaler value:20; A/D conversion start by read
       //ADCCON = (0x1<<16) | (0x1<<14) | (19<<6) | 0x1<<1;
       //ADCDAT & 0xfff;
      
       writel((0x1<<16) | (0x1<<14) | (19<<6) | 0x1<<1, adccon);
      
       return 0;
      
ERR3:
       iounmap(adccon);
ERR2:
       iounmap(adcmux);
ERR1:
       iounmap(adccfg);
       return ret;
}
 
unsigned int adc_get(void)
{
       unsigned int adc_value;
       unsigned int temp_value;
      
       readl(adcdat);
       while(!(readl(adccon) & (0x1<<15)));
       adc_value = readl(adcdat) & 0xfff;
       temp_value = 9999 * adc_value / 4095;
      
       return temp_value;
}
 
long adc_ioctl (struct file *filp, unsigned int cmd, unsigned long arg)
{
       //printk("%s:%s:%d\n", __FILE__, __func__, __LINE__);
 
       switch (cmd) {
       case ADC_CMD_GET:
              *(unsigned int *)arg = adc_get();
              break;
       default:
              return -EINVAL;
       }
       return 0;
}
 
struct file_operations fops = {
       .owner           = THIS_MODULE,
       .unlocked_ioctl      = adc_ioctl,
};
 
int adc_init(void)
{
       int ret;
       int major;
       struct device *pdevice = NULL;
 
       //printk("%s:%s:%d\n", __FILE__, __func__, __LINE__);
      
       ret = alloc_chrdev_region(&dev, minor_base, adc_count, adc_name);
       if (0 > ret) {
              printk("Can't get device number\n");
              return ret;
       }
             
       pcdev = cdev_alloc();
       if (NULL == pcdev) {
              printk("cdev alloc failed.\n");
              ret = -ENOMEM;
              goto UNREG_DEV_NUM;
       }
             
       cdev_init(pcdev, &fops);
       pcdev->owner = THIS_MODULE;
      
       ret = cdev_add(pcdev, dev, adc_count);
       if (0 > ret) {
              printk("add cdev failed.\n");
              goto DEL_CDEV;
       }
 
       pcls = class_create(pcdev->owner, adc_name);
       if (IS_ERR(pcls)) {
              printk("class create failed.\n");
              ret = PTR_ERR(pcls);
              goto DEL_CDEV;
       }
      
       major = MAJOR(dev);
       pdevice = device_create(pcls, NULL, MKDEV(major, minor_base), NULL, "%s%d", adc_name, minor_base);
       if (IS_ERR(pdevice)) {
              printk("device %s%d create failed.\n", adc_name, minor_base);
              ret = PTR_ERR(pdevice);
              goto DESTROY_CLASS;
       }
 
       //printk("Body temperature module init done!\n");
      
       if (0 != AdcInit())
       {
              goto DESTROY_CLASS;
       }
       printk("adc init\n");
       return 0;
 
DESTROY_CLASS:
       class_destroy(pcls);
DEL_CDEV:
       cdev_del(pcdev);
UNREG_DEV_NUM:
       unregister_chrdev_region(dev, adc_count); 
 
       return ret;
}
 
void adc_exit(void)
{
       device_destroy (pcls, MKDEV(MAJOR(dev), minor_base));    
       class_destroy(pcls);
       cdev_del(pcdev);
       unregister_chrdev_region(dev, adc_count); 
       printk("Good bye, adc module\n");
       //printk("%s:%s:%d\n", __FILE__, __func__, __LINE__);
}
 
module_init(adc_init);
module_exit(adc_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Ruth Wei");
MODULE_DESCRIPTION("adc for demo");
MODULE_VERSION("1.0.1");
2. 編譯測試
經(jīng)過交叉編譯后,加載驅(qū)動,寫一個應(yīng)用程序可以讀取ADC轉(zhuǎn)換后的值。
      四、總結(jié)
      本文從模數(shù)轉(zhuǎn)換器的技術(shù)指標和電路連接等方面進行分析,最終寫出驅(qū)動程序,可以在4412板子上進行測試。

發(fā)表評論

全國咨詢電話:400-611-6270,雙休日及節(jié)假日請致電值班手機:15010390966

在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)

企業(yè)培訓(xùn)洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)

Copyright 2004-2018 華清遠見教育科技集團 版權(quán)所有 ,京ICP備16055225號,京公海網(wǎng)安備11010802025203號

有位老師想和您聊一聊

主站蜘蛛池模板: 特级毛片在线大全免费播放 | 自慰系列无码专区 | 又黄又硬又湿又刺激视频免费 | 91免费在线 | 一个人在线观看www高清视频 | 免费ā片在线观看 | 亚洲欧美激情网站 | 黑鬼大战白妞高潮喷白浆 | 欧美人禽zozo动人物杂交 | 亚洲午夜精品a片一区二区无码l | 国产高潮a片羞羞视频涩涩 特级小箩利无码毛片 | 久久国产精品嫩草影院介绍 | 人妻互换HD无码中文在线 | 亚洲国产精品悠悠久久琪琪 | 18禁黄网站禁片免费观看国产 | 中文字幕12页| 久久人妻无码一区二区 | 亚洲欧美国产精品专区久久 | 日韩性爱视频 | 肥大BBWBBW高潮喷水 | 女人的超长巨茎人妖在线视频 | 亚洲AV无码一区二区乱子仑 | 丝袜美腿精品国产一区 | 影音先锋色情资源站 | 特级毛片www欧美 | 男女啪啪永久免费网站 | 少妇的渴望HD高清在线播放 | 天天综合网久久综合免费人成 | 亚洲AV无码国产一区二区三区 | 精品一区二区三区影院在线午夜 | 韩国一级毛片 | 午夜免费无码福利视频 | 免费观看国产女人高潮视频 | japanese16hdxxxx无码 | 一个人免费视频观看在线www | 玖玖资源站亚洲最大成人网站 | 两个人的房间高清在线观看 | 午夜福利麻豆国产精品 | 久久国产人妻无码一区 | 2022精品久久久久久中文字幕 | 中文字幕在线不卡一区二区 |