我是靠谱客的博主 俏皮柠檬,最近开发中收集的这篇文章主要介绍渡鸦MK60学习 【ADC-PGA单通道16位数据采集】K60ADC外设特征,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

K60ADC外设特征

== • Linear successive approximation algorithm with up to 16-bit resolution==
• Up to four pairs of differential and 24 single-ended external analog inputs
• Output modes:
• differential 16-bit, 13-bit, 11-bit, and 9-bit modes
• single-ended 16-bit, 12-bit, 10-bit, and 8-bit modes
• Output format in 2’s complement 16-bit sign extended for differential modes
• Output in right-justified unsigned format for single-ended
• Single or continuous conversion, that is, automatic return to idle after single
conversion
• Configurable sample time and conversion speed/power
• Conversion complete/hardware average complete flag and interrupt
• Input clock selectable from up to four sources
• Operation in Low-Power modes for lower noise
• Asynchronous clock source for lower noise operation with option to output the clock
• Selectable hardware conversion trigger with hardware channel select
• Automatic compare with interrupt for less-than, greater-than or equal-to, within
range, or out-of-range, programmable value
• Temperature sensor
• Hardware average function
• Selectable voltage reference: external or alternate
• Self-Calibration mode
• Programmable Gain Amplifier (PGA) with up to x64 gain

项目所需特性:

1、由图可知ADC的转化率可以达到4K/s

在这里插入图片描述

2、单端信号和差分信号区别:

单端传输: 是指用一根信号线和一根地线来传输信号,信号线上传输的信号就是单端信号。
优点是简单方便,缺点是抗干扰能力差。
差分传输: 是指在两根线上都传输信号,这两个信号的大小相等,极性相反,这两根线上传输的信号就
是差分信号(差模信号)。
优点是抗干扰能力强,缺点是电路比单端传输的复杂。

开发流程:

1、选择所需要的ADC转换通道
2、设置转换时的时钟参考
3、设置是否连续转换
4、是否开启硬件平均功能
5、单端还是差分信号
6、触发方式为软件还是硬件
7、参考电压源的选择
8、选择本次转换的精度
9、是否开启PGA放大功能(若要开启则需要使用内部1.2V参考源)
10、开启转换通道
11、读取转换好的数据

正式开发:

1、在手册中的Chapter 3: Chip Configuration中的Analog找到3.7.1.3.1.1找到自己所需要使用的通道

在这里插入图片描述

2、由于本次进行测量的精度要求达到16bit的精度。

3、下图为ADC中的PGA信号放大的参考选择。

When the PGA is used, differential input from the pins is connected to differential
input channel 2 on ADCx
PGA的唯一参考选项是1.2 V VREF OUT源。VREF OUT信号既可以由外部电压源通过VREF OUT引脚驱动,也可以由VREF模块的输出驱动。当使用外部电压源时,请确保VREF模块处于关闭状态。关于PGA最大差分输入信号摆动范围,请参考具有PGA特性的16位ADC的设备数据表。

4、由于PGA是ADC的一部分,因此不需要额外的外部引脚,每个PGA连接到ADC的差分通道。PGA输出差分对,这些差分对连接到ADC的差分输入。当使用PGA时,引脚的差分输入连接到ADCx的差分输入通道2

在这里插入图片描述
在这里插入图片描述

5、VREFV1

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
本次使用ADC0_DP0作为ADC输入引脚。

具体初始化流程:

1、编写VREF参考源设置,如果使用到了PGA功能将VREF开启即可。

// VREF_InitTypeDef  VREF_InitStruct;                                      //初始化内置电源的结构体参数
// VREF_InitStruct.instance = 0;                                           //开启时钟
// VREF_InitStruct.bufferMode = kVREF_BufferMode_Lv1;                      //只作为内部电压参考
// VREF_Init(&VREF_InitStruct);

2、添加ADC初始化中的各个函数操作,PGA部分如果使用到则需要在原本的库函数中进行修改,配置相应的初始化PGA的相应寄存器。

ADC_InitTypeDef ADC_InitStruct;
ADC_InitStruct.clockDiv=kADC_ClockDiv2;                                 //时钟分频模式选择为二分频bus时钟一半50mhz   F6 S4
ADC_InitStruct.continueMode=kADC_ContinueConversionEnable;              //开启连续转换模式
ADC_InitStruct.hardwareAveMode=kADC_HardwareAverageDisable;             //关闭硬件平均模式
ADC_InitStruct.instance=HW_ADC0;                                        //模块号选择为ADC0
ADC_InitStruct.resolutionMode=kADC_SingleDIff16;                        //分辨率选择为单端16位精度
ADC_InitStruct.singleOrDiffMode=kADC_Single;                            //选择为单端模式
ADC_InitStruct.triggerMode=kADC_TriggerSoftware;                        //触发模式选择为软件触发
ADC_InitStruct.vref=kADC_VoltageVREF;                                   //使用MUC内部参考源
// ADC_InitStruct.magni=kADC_PGA_Magni_3;                                  //PGA放大倍数设置为8倍
ADC_Init(&ADC_InitStruct);                                              //引脚初始化  本次使用的通道为ADC0_DP0

3、PGA是否进行使能操作,若使用到了PGA模块,就需要在正式开启ADC转换前使能PGA模块。并且在使能之后要开启ADC的转换,因为使用到的是ADC0中的通道0,因此在使能的函数中传入0即可。

    // ADC_PGALPb_LowPowerModeControl(HW_ADC0,1);                              //将PGA功耗改为标准模式
    // ADC_PGAEN_Enable_or_Disable(HW_ADC0,0);                                 //使能PGA放大
   ADC_StartConversion(HW_ADC0, 0, kADC_MuxA);                             //开启转换

4、数据读取,只需要对ADC相应的R寄存器的数据进行读取即可,可以通过调用读取函数进行对数据的存储。

if(ADC_IsConversionCompleted(HW_ADC0,kADC_MuxA)==0)											//判断是否转换完成
{
     printf("ADC19=0x%04Xrn",ADC_ReadValue(HW_ADC0,kADC_MuxA));    //将ADC R区数据通过串口以16进制数据发出16位的数据
}

实现项目中出现的问题:

1、在项目的实现过程中对相应的库函数进行移植时出现报错。提示没有定义相关的芯片。
在这里插入图片描述
解决方法:如图在define中添加MK60D10 RAVEN DEBUG即可解决在这里插入图片描述

额外内容:

#ifndef使用可以防止头文件的重复包含以及便于程序的调试和移植
(1)作用是当“标识符”没有由#define定义过,则编译“程序段1”,定义过则编译“程序段2”。

#ifndef x 1				//标识符
程序段 1
#else
程序段 2
#endif

(2)作用是当“标识符”没有由#define定义过,则编译“程序段1”,否则编译“程序段2”。

#ifndef 标识符
#define 标识符
程序段 1
#else
程序段 2
#endif

(3)作用是当“表达式”值为真时,编译“程序段1”,否则编译“程序段2”。

#if 表达式
程序段 1
#else
程序段 2
#endif

最后

以上就是俏皮柠檬为你收集整理的渡鸦MK60学习 【ADC-PGA单通道16位数据采集】K60ADC外设特征的全部内容,希望文章能够帮你解决渡鸦MK60学习 【ADC-PGA单通道16位数据采集】K60ADC外设特征所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部