NO.18 ADC的基本概念

发布者:SerendipitySoul最新更新时间:2022-12-20 来源: zhihu关键字:ADC  基本概念  MSP432 手机看文章 扫描二维码
随时随地手机看文章

  ADC,就是模拟量转换成数字量的一种器件,一种将自然界连续的信号转化成离散的电信号发送给设备。


  在MSP432中,自带ADC14,一个14位的ADC,好像按照官方的说法这个ADC的速度比MSP430的速度快10倍。


  具体ADC的内容数电书上都有,什么并联比较型啊,逐次逼近型啊之类,上网百度一下就有。


  关于我们在MSP432中如何使用这个ADC呢,TIDrivers里有非常强大的库我们可以直接使用。

  

  首先我们要了解几个概念:量程分辨率采样速率。调用十分简单


/*

 *  ======== adcsinglechannel.c ========

 */

#include

#include


/* POSIX Header files */

#include


/* Driver Header files */

#include

#include


/* Driver configuration */

#include "ti_drivers_config.h"


/* ADC sample count */

#define ADC_SAMPLE_COUNT  (10)


#define THREADSTACKSIZE   (768)


/* ADC conversion result variables */

uint16_t adcValue0;

uint32_t adcValue0MicroVolt;

uint16_t adcValue1[ADC_SAMPLE_COUNT];

uint32_t adcValue1MicroVolt[ADC_SAMPLE_COUNT];


static Display_Handle display;


/*

 *  ======== threadFxn0 ========

 *  Open an ADC instance and get a sampling result from a one-shot conversion.

 */

void *threadFxn0(void *arg0)

{

    ADC_Handle   adc;

    ADC_Params   params;

    int_fast16_t res;


    ADC_Params_init(¶ms);

    adc = ADC_open(CONFIG_ADC_0, ¶ms);


    if (adc == NULL) {

        Display_printf(display, 0, 0, "Error initializing ADC0n");

        while (1);

    }


    /* Blocking mode conversion */

    res = ADC_convert(adc, &adcValue0);


    if (res == ADC_STATUS_SUCCESS) {


        adcValue0MicroVolt = ADC_convertRawToMicroVolts(adc, adcValue0);


        Display_printf(display, 0, 0, "ADC0 raw result: %dn", adcValue0);

        Display_printf(display, 0, 0, "ADC0 convert result: %d uVn",

            adcValue0MicroVolt);

    }

    else {

        Display_printf(display, 0, 0, "ADC0 convert failedn");

    }


    ADC_close(adc);


    return (NULL);

}


/*

 *  ======== threadFxn1 ========

 *  Open a ADC handle and get an array of sampling results after

 *  calling several conversions.

 */

void *threadFxn1(void *arg0)

{

    uint16_t     i;

    ADC_Handle   adc;

    ADC_Params   params;

    int_fast16_t res;


    ADC_Params_init(¶ms);

    adc = ADC_open(CONFIG_ADC_1, ¶ms);


    if (adc == NULL) {

        Display_printf(display, 0, 0, "Error initializing ADC1n");

        while (1);

    }


    for (i = 0; i < ADC_SAMPLE_COUNT; i++) {

        res = ADC_convert(adc, &adcValue1[i]);


        if (res == ADC_STATUS_SUCCESS) {


            adcValue1MicroVolt[i] = ADC_convertRawToMicroVolts(adc, adcValue1[i]);


            Display_printf(display, 0, 0, "ADC1 raw result (%d): %dn", i,

                           adcValue1[i]);

            Display_printf(display, 0, 0, "ADC1 convert result (%d): %d uVn", i,

                adcValue1MicroVolt[i]);

        }

        else {

            Display_printf(display, 0, 0, "ADC1 convert failed (%d)n", i);

        }

    }


    ADC_close(adc);


    return (NULL);

}


/*

 *  ======== mainThread ========

 */

void *mainThread(void *arg0)

{

    pthread_t           thread0, thread1;

    pthread_attr_t      attrs;

    struct sched_param  priParam;

    int                 retc;

    int                 detachState;


    /* Call driver init functions */

    ADC_init();

    Display_init();


    /* Open the display for output */

    display = Display_open(Display_Type_UART, NULL);

    if (display == NULL) {

        /* Failed to open display driver */

        while (1);

    }


    Display_printf(display, 0, 0, "Starting the acdsinglechannel examplen");


    /* Create application threads */

    pthread_attr_init(&attrs);


    detachState = PTHREAD_CREATE_DETACHED;

    /* Set priority and stack size attributes */

    retc = pthread_attr_setdetachstate(&attrs, detachState);

    if (retc != 0) {

        /* pthread_attr_setdetachstate() failed */

        while (1);

    }


    retc |= pthread_attr_setstacksize(&attrs, THREADSTACKSIZE);

    if (retc != 0) {

        /* pthread_attr_setstacksize() failed */

        while (1);

    }


    /* Create threadFxn0 thread */

    priParam.sched_priority = 1;

    pthread_attr_setschedparam(&attrs, &priParam);


    retc = pthread_create(&thread0, &attrs, threadFxn0, NULL);

    if (retc != 0) {

        /* pthread_create() failed */

        while (1);

    }


    /* Create threadFxn1 thread */

    retc = pthread_create(&thread1, &attrs, threadFxn1, (void* )0);

    if (retc != 0) {

        /* pthread_create() failed */

        while (1);

    }


    return (NULL);

}


关键字:ADC  基本概念  MSP432 引用地址:NO.18 ADC的基本概念

上一篇:NO.20 MSP432的功耗模式介绍
下一篇:NO.16 PWM的概念以及MSP432中如何调用

推荐阅读最新更新时间:2024-11-09 09:52

hc32和stm32 adc的区别
HC32和STM32是两种不同的微控制器系列,它们各自拥有自己的ADC模块。在本文中,我们将探讨HC32和STM32 ADC之间的区别。 先来看看HC32的ADC模块。HC32微控制器系列是由华大集成电路推出的低功耗、高性能的微控制器,拥有多达16个ADC通道。HC32的ADC模块采用了12位的分辨率,精度较高,最大采样速率能够达到1MHz。此外,HC32的ADC模块还支持多种不同的采样方式,例如单次模式、扫描模式、双缓冲模式等。 然而,与HC32相比,ST微电子的STM32微控制器系列则是采用了更加先进的ADC技术。STM32的ADC模块采用了12位或16位的分辨率。除了普通的单次采样模式外,STM32的ADC模块还拥有多种独特
[单片机]
N76E003 ADC计算电压值
分享下调试ADC计算电压值理解的相关内容。 最重要的公式 要记住ADC测量结果无非就是一个代表电压量的值,管脚上的模拟信号转换为12位二进制数据(0xFFF),例如:如果参考电压是5V,ADC输入也是5V,那ADC转换结果就是0xFFF;如果参考电压是5V,ADC输入是2.5V,那ADC转换结果就是0xFFF除以2。ADC转换结果除以满量程ADC值(即0xFFF)就是与参考电压的比例,这个比例乘以参考电压就是实际电压值(Vain)。 计算代码如下: // CN Spec, 18.1.1, P193, ADC_DATA = 4095 * (Vain/Vref) // So: Vain = (ADC_DATA * Vref)
[单片机]
Device Tree(二):基本概念
一、前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用来解决什么问题的)请参考 引入Device Tree的原因 ,本文主要是介绍Device Tree的基础概念。 简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可以将这些适合人类阅读的Device Tree source file变成适合机器处理的Device Tree binary file(有一个更好听的名字,DTB,device tree blob)。在系统启动的时候,boot progra
[单片机]
Device Tree(二):<font color='red'>基本概念</font>
高速数据转换中的ADC差异
高速的数据转换在设计中有很多和一般数据转换设计中相似的问题,需要可靠的设计和稳定的结构。从基础上来说,两者并无二致,但受限于芯片的限制,高速数据转换系统中更能窥见前沿的动态性能发展。在一个高速数据转换系统中,、、这些都是必不可少的。市面上,现在有两种常见的C出现在此类应用中,分别是全并行ADC和逐次逼近ADC。 这两种常见的高速ADC结构,每一种都有自己独特的特点,每一种结构在精确度、动态性能、成本等出多方面都有不小的差异。在实际的设计中如何选择合适结构的ADC是实现系统最佳性能的关键。 最快速的转换选择 我们是在高速这个条件下来看这些ADC,在所有高速转换器件中,最简单最快的就是全并行ADC。这么
[机器人]
MSP432(Keil5)——1.LED驱动
hello大家好,好久不见,这是本次代码示例使用的开发板,也就是TI官方提供LaunchPad。 所有的代码本人均已验证完成,不含任何隐患,这次分享旨在以最简洁快速方式提供给大家MSP432的基本驱动代码,供大家学习交流。 led.c #include led.h //LED初始化 void LED_Init(void) { /*初始化小红灯IO口为输出模式*/ MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0); /*初始化RGB灯IO口为输出模式*/ MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0
[单片机]
<font color='red'>MSP432</font>(Keil5)——1.LED驱动
51单片机采用ADC0808检测ADC_LCD1602显示
系统整体设计 1)本设计的控制器采用51单片机 2)ADC0808采集光敏电阻的分压 光照强度越弱,被点亮的LED数目越多,当弱到一定阈值的时候 Speaker报警 3)LCD1602显示当前电压值 具体实现如下代码 #include reg51.h #include stdio.h #define uchar unsigned char #define uint unsigned int #define DATA_PORT P0 #define OPEN 0 #define CLOSE 1 volatile uchar Speaker_Alarm = 0; uchar Flag_2s = 0; //---------
[单片机]
51单片机采用<font color='red'>ADC</font>0808检测<font color='red'>ADC</font>_LCD1602显示
STM32F1 ADC主要特性和结构框图解析
STM32F1 ADC简介 ADC(analog to digital converter)即模数转换器,它可以将模拟信号转换为数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。STM32F1 的 ADC 就是逐次逼近型的模拟数字转换器。 STM32F103 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F1 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它具有多达 18 个复用通道,可测量来自 16 个外部源、2 个内部信号源。 这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 1
[单片机]
STM32F1 <font color='red'>ADC</font>主要特性和结构框图解析
MSP432UART波特率与时钟关系
MSP432波特率与时钟频率对应关系 msp432在进行串口通讯时,都会进行波特率的设置,在MSP432中如何快速设置波特率?? 1.首先确定时钟频率 2.串口配置参数结构体设置 msp432在进行串口通讯时,都会进行波特率的设置,在MSP432中如何快速设置波特率?? 1.首先确定时钟频率 下面是可选项(一般选用12MHZ/24MHZ) 2.串口配置参数结构体设置 最主要设置这三项 这是如何计算来的??? 这里直接打开应用技术手册905页,可以看到以下两张表 在这里插入图片描述 这里可以看到在不同频率下对应波特率设置 举个例子: 在设置频率为12Mhz时候,波特率设置为115200 找到对用应用手册
[单片机]
MSP432UART波特率与时钟关系
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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