F28335的ADC模块
标签: DSP
- 具有双采样保持器的12位转换内核
- 模拟输入电平:0~3V
- 16个转换通道;ADC有16个输入引脚,即16个模拟转变输入通道,分为2组,一组为A,一组为B,其中ADCINA0~ ADCINA7都是属于A的,ADCINB0~ADCINB7都是B的。
- 序列发生器可配置成两个独立8通道或者一个16通道;无论是级联工作模式还是双序列工作模式,其本质都是通过设定通道的读取顺序来进行通道的读取选择。
- 最快转换时钟频率12.5MHz(奈奎斯特定则,25MHz最高能采样12.5MHz的信号)
- 有多种触发源启动模数转换;多触发源:软件、ePWM和GPIO
- 灵活的中断控制;
- 两种采样模式:级联和双通道模式
- 16个采样通道采用分时复用模式进行采样
- 序列发生器决定采样对象,是一个存储地址的寄存器
- S/H-A和S/H-B是两个采样保持器
- 16 个结果寄存器存放ADC 转换的结果,转换后的数字量表示为:数字值=4095*(输入模拟值-ADCLO)/3,输入模拟值在0-3V 之间
软件设置流程
(1)使能ADC 外设时钟及设置ADC 工作时钟
要使用ADC 外设则需开启相应时钟,开启ADC 外设时钟代码如下:
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC
EDIS;
系统时钟150M 不能直接供ADC 工作时钟使用,需分频后才行
EALLOW;
SysCtrlRegs.HISPCP.all = 3; // HSPCLK = SYSCLKOUT/(2*3)=25MHz
EDIS;
(2)ADC 初始化设置,包括对ADCREFSEL 和ADCOFFTRIM寄存器设置等
void InitAdc(void);
(3)ADC 工作方式设置,包括采样方式、工作频率、采样通道数等。
例:
AdcRegs.ADCTRL1.bit.ACQ_PS = 0x0f;//采样窗口长度设置;控制soc脉冲的宽度,也确定了采样开关闭合的时间,soc脉冲的宽度是ACQ_PS加1个ADCLK周期数
AdcRegs.ADCTRL3.bit.ADCCLKPS = 1;//ADC 工作25M 下不分频;adc内核时钟分频器
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;// 1 通道模式
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;//A0 为采样通道
AdcRegs.ADCTRL1.bit.CONT_RUN = 1;//连续采样模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0;//定义了自动转换序列中完成的最大转换通道数;最大采样通道数,因为只用到A0,所以只有1 个,即数值为0。
(4)选择ADC 触发方式,开启转换。
AdcRegs.ADCTRL2.all = 0x2000;//软件触发 Start SEQ1;序列发生器SEQ1或级联序列发生器SEQ的启动转换触发位
(5)读取ADC 转换值
Uint16 Read_ADCValue(void)
{
while (AdcRegs.ADCST.bit.INT_SEQ1== 0);//查询转换是否结束;SEQ1中断标志位,0代表无中断事件
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//清除中断标志位
return AdcRegs.ADCRESULT0>>4;//将转换结果返回出去
}
工作模式可以分成两种:级联工作、双排序工作模式;每种模式下还有顺序采样、同步采样两种采样方式;
ADC转换模块
A/D转换器(ADC)将模拟量转换为数字量通常要经过四个步骤:采样、保持、量化和编码。
采样:将一个时间上连续变化的模拟量转化为时间上离散变化的模拟量。
保持:将采样结果存储起来,直到下次采样,这个过程称作保持。一般,采样器和保持电路一起总称为采样保持电路。
量化:将采样电平归化为与之接近的离散数字电平,这个过程称作量化。
编码:将量化后的结果按照一定数制形式表示就是编码。
F28335 的 ADC 转换模块有 2 个独立的 8 状态排序器(SEQ1 与 SEQ2),这两个排序器还可以级联为 1 个 16状态的排序器(SEQ)。这里的状态是指排序器能够完成的A/D自动转换通道的个数。8状态排序器指的是能够完成8个A/D转换通道的排序管理。2个排序器可有两种操作方式,分别为单排序器方式(级联为1 个 16 状态排序器,即级联方式)和双排序器方式(2 个独立的8状态排序器),A/D转换模块每次收到触发源的开始转换(SOC)请求时,能够通过排序器自动完成多路转换,将模拟输入信号引入采样保持器与ADC内核,转换完成后,将转换结果存入结果寄存器。两种操作方式的最大差别在于,单排序器操作方式响应触发源是唯一的,双排序方式可以分别响应各自的触发源。单排序方式和双排序方式都可以进行顺序采样或者同步采样,顺序采样相当于串行模式,同步采样相当于并行模式,能保证信号的同时性,两个采样保持器,决定了最多能够进行2 路同步。
ADC关键指标
分辨率:指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2^n的比值。分辨率又称为精度,通常以数字信号的位数来表示。通俗的解释分辨率是决定采样最小值,比如基准电压为1V,8位的采样,最小值是1/256,10为采样的最小值是1/1024,分辨率越高,采样越精确。
转换速率:也可以称为AD采样率,是AD转换一次所需要的时间的倒数。单位时间内,完成从模拟转换到数字的次数
采样时间:是指两次转换的间隔,为了保证转换的正确完成,采样速率必须小于或等于转换速率。
量化误差:由于AD的有限分辨率而引起的误差,即有限分辨率AD的阶梯状转移特性曲线与无限分辨率AD的转移特性曲线之间的最大偏差。通常1个或半个最小数字量的模拟变化量,表示为1LSB、1/2LSB。
举例说明讲解以上四个指标:
例如F28335的AD转换模块是12位的,AD的最大时钟频率为25MHz,采样速率12.5Msps。
如果要对一个1V电压进行采样,分辨率=1/2的12次方=1/4096,
转换速率:在程序中根据自己需求设置的,
最大采样速率=1/12.5M=80ns(也可通过设置时钟设置)
量化误差:每个代码之间的电压变换就代表1/4096V
,无法采到1/8192V电压。换言之,产生指定代码的实际电压与代表该码的电压两者之间存在误差。
时钟频率:就像人的心脏跳动一样,如果没有时钟频率,那么ADC模块将运作不起来。
采样频率:每隔多长时间启动一次采样。
转换时间:ADC模块转换一个通道或者一个序列所需要的时间。
级联排序方式下的顺序采样和同步采样:
级联排序器顺序采样模式:
通过控制寄存器CONVxx的4位值确定输入引脚,其中,最高位确定采用哪个采样保持缓存器,其他3位定义具体的输入引脚。2个采样保持器对应各自的8选1多路选择器和8个输入通道。
级联排序器同步采样模式:
级联模式下,可以实现两个通道的同步采样,要求 2 个输入必须有同样的采样和保持偏移量(比如 ADCINA4 和 ADCINB4,不能是 ADCINA7 和 ADCINA6),为了让 ADC 模块工作在同步采样模式,必须设置 ADCTRL3 寄存器中的 SMODE_SEL=1。在同步采样模式下,CONVxx 寄存器的最高位不起作用,CONVxx 寄存器最高位用于确定采用哪个采样保持缓冲器(S/H-A或S/H-B)CONVxx 寄存器的后3位起作用,确定引脚进行采样,例如:CONVxx 寄存器的值是 0110b,ADCINA6 就由采样保持器 A 采样,ADCINB6 有采样保持器 B 采样,和1110b 的效果是一样的。
采样保持两路可以同步进行,因为有两个采样保持器,但是转换不可能同时进行。转换器首先转换采样保持器 A中锁存的电压量,然后转换采样保持器 B 中锁存的电压量,采样保持器 A 转换的结果保存到当前的 ADCRESULTn 寄存器(如果排序器已经复位,SEQ1 的结果放到ADCRESULT0),采样保持器 B 转换的结果保存到下一个(顺延)ADCRESULTn 寄存器(如果排序器没有复位,SEQ1 的结果放到 ADCRESULT1),结果寄存器指针每次增加 2。
级联排序器操作方式下,双通道同时采样,8对(16个通道)模拟量均由SEQ1排序控制。
为什么只用开SEQ1中断而不开SEQ2中断?
这是因为在级联模式下,SEQ1的8状态排序和SEQ2的8状态排序公用一个触发源,所以只用开SEQ1的中断就够了。
2个采样保持器复用一个A/D转换模块,16个输入通道复用2个采样保持器
尽管只有一个A/D模块,但是2个采样保持器保证了F28335的ADC转换模块也能够同时采样2个输入通道,同时采样,但并不同步转换,但最终结果来看就等效为同步转换。
双排序器方式下的顺序采样和同步采样:
双排序器下的顺序采样:
双排序器下的同步采样:
在同步采样模式下,双排序器和级联排序器相比,主要区别在于:
在双排序器中每个排序器分别控制4个转换8个通道,共构成16通道;而在级联排序器的同步采样模式下,实际上只用了SEQ1作为排序器,控制8个转换16个通道。
单排序操作方式(级联方式)响应触发源是唯一的,可双排序的方式可以分别响应各自的触发源
配置了三种模式
单次模式,连续模式和DMA传输
单次模式是调用一次采集函数,在指定的某一个AD端口采集,用到的时候在去采样
连续模式是连续转换多个通道,采用级联模式,采用16路AD通道的值文章来源:https://www.toymoban.com/news/detail-410058.html
DMA传输时AD采样的值直接通过DMA传输到内存中,不需要要CPU干预,持续采样,放到内存,需要用到数据的时候去读取相应的存储区即可。文章来源地址https://www.toymoban.com/news/detail-410058.html
到了这里,关于F28335的ADC模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!