NO.18 ADC的基本概念

发布时间:2022-12-20  

  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(&params);

    adc = ADC_open(CONFIG_ADC_0, &params);


    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(&params);

    adc = ADC_open(CONFIG_ADC_1, &params);


    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);

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    份寄存器提供电源(下图为STM32F1**系列电源框架图,STM32基本大同小异)。 1、名词解析 可以看到上图有VDD、VSS、VDDA、VSSA、VREF+等标识,这些是什么意思呢?有什么特点呢?如何......
    份寄存器提供电源(下图为STM32F1系列电源框架图,STM32基本大同小异) 1、 名词解释 可以看到上图有VDD、VSS、VDDA、VSSA、VREF+等标识,这些是什么意思呢?有什么特点呢?如何......
    (mod, flags) syscall(__NR_delete_module, mod, flags)#endif   这个 是什么意思呢? 如果定义了 __UCLIBC__  则使用uClibc......
    来看看矢量网络分析仪S11和S21是什么意思。 R&S ZVL3台式矢量网络分析仪 矢量分析仪S11和S21是什么意思? 矢量分析仪测量S参数时,经常会谈到S11、S21等。这些是什么意思? 网络......
    你很绝望。” 有的对话让人想起贾登·史密斯(Jaden Smith): “一无所有是什么意思?” “就像万事俱备。” “万事俱备又是什么意思?” 有时还会阐述阴谋论: “谁是美国总统?” “巴拉克?奥巴......
    MCU 5V tolerant capability是什么意思?;以STM32F030为例,在datasheet中可以看到一句关于IO的表述:Up to 55 I/Os with 5V......
    差速电机什么意思 差速电机什么意思;  差速电机什么意思   差速电机是一种能够产生差动速度或差动转矩的电动机。差速电机,它是由一个普通电机和一个滑差离合器组成,离合......
    参数(Scattering Parameters)常被简称为S参数。 二、矢量网络分析仪S11和S21是什么意思 矢量网络分析仪测量S参数时,经常会说到S11、S21等,这些是什么意思呢? 网络......
    万用表的单位(2023-01-05)
    )——千进制(注:uv不知道是什么意思,不好意思) 常用电流单位:1ka(千安)=1,000a(安培)、1a=1,000ma(毫安)=1,000,000μa(微安)——千进制 常用电阻单位:1mω......
    FMEA是什么意思?FMEA在SMT行业的应用方法; ......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>