Analog to Digital Converter(模-数转换器)
一、简介
这款单片机有两个完全相同的转换器模块,它们共用12个输入通道。该ADC模块的转换分辨率为12位。
每个ADC模块都包含4个可编程的序列发生器。采样序列发生器(Sample Sequencer 简写为SS)用于采样控制和数据采集。所有序列发生器的实现方法都是相同的,区别仅在于能够捕捉的采样数和FIFO的深度有所不同,捕捉到的每个采样都要存入FIFO中。这四个采样序列发生器,它们可以同时捕获样本。每个序列都可以配置触发事件。第一个序列发生器至多捕获八个样本,第二个和第三个至多捕获四个样本,第四个序列只能捕获一个样本。每一个样本可以在同一路,不同路,或者其他什么顺序。
如果很多个事件同时被触发的话,可以给样本序列发生器配置优先级确定谁先被捕获。被触发的最高优先级的序列先采样,一定要注意那些频繁触发的事件,如果它们的优先级太高的话,有些低优先级的序列就采不到样了。
ADV数据的硬件过采样可以用来提高精度。过采样的倍率可以2x 4x 8x 16x 32x 或者是32x,但是这样就会相应倍率地降低一个ADC的吞吐量(具体可以看这里)。注意所有采样序列只能设置一个统一的硬件过采样倍率。
还可以用软件实现过采样的!单片机支持2x 4x 8x 但是它会相应倍率的降低样本序列的深度的。比如说啊,第一份采样序列地深度是8,在4x过采样模式下,它就只能采两个样本了。这是因为头四个样本被拿去过采样了。每一个采样序列都能设置自己地软件过采样倍率。
一种更加复杂的软件过采样可以用于清除样本深度地减少。如果我们加快ADC触发速率4倍,然后再配置一个4倍地软件过采样,这样就不会减少采样序列容量了,这样做的后果是ADC触发数量就要增加了,因为这种方法需要在ADC驱动本身以外去做调整,所以不被驱动直接支持,如果我们要用这种方法,就不能用驱动里面的函数了。
函数地头文件是driverlib/adc.c 和driverlib/adc.h
二、然后再来看都干了啥
1.首先使能ADC外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
2.然后开始配置ADC采样序列发生器,主要是配置触发条件和触发优先级
ADCSequenceConfigure();
这个函数用来配置触发源和采样序列的优先级
前两个参数选择是哪个采样序列发生器
第三个是触发条件
第四个是触发优先级
触发条件有这些:
- 处理器触发
- AC模块触发
- GPIO触发
- 计时器触发
- PWM触发??以后可以研究一下
- 一直触发
3.配置引脚用于ADC输入
GPIOPINTypeADC()
配置引脚用于ADC输入 ,注意不是每一个引脚能都拿来作为ADC输入的,4.选取通道并进行余下配置
ADCSequenceStepConfigure();
配置采样序列发生器的一个step前两个参数选择哪一个采样序列发生器
第三个参数是要设置的那个step
第四个参数是这个step的设置
参数设置分析:这个参数应该是一系列参数的OR,主要设置了一个step的模式(单端输入还是差分输入),选用哪个输入通道,输入完要不要触发中断,以及选择的数字比较器(??)
5.获取采样结果
ADCSequenceDataGet();
第一个是ADC的基址
第二个是ADC的采样序列数
第三个填一个32位地址,表示把数填在这里
其实这个函数还有返回值,返回值就是get到的数
6.使能ADC采样序列发生器
ADCSequenceEnable()
一共两个参数,表示选择的那个采样序列发生器
三、直接上例程!
1 | //定义变量用于存储采得样本 |