概述
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外设特征所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复