渡鸦MK60学习 【ADC-PGA单通道16位数据采集】

3 篇文章 0 订阅
2 篇文章 2 订阅

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%04X\r\n",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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值