3、DSP28335-AD采样 原理与程序讲解

更新时间:2023-05-29 16:44:54 阅读: 评论:0

1、 ADC模块构成及原理
·12为ADC转换核,2个采样保持器;
·同步采样模式和顺序采样模式;
·模拟输入电压为0~3V,
·ADCCLK最快可配置为12.5MHz;
·16通道,多路复用输入,ADCINA0~ADCINA7、ADCINB0~ADCINB7;
·排序器可工作在两个8状态的排序器或者级联为一个16状态的排序器;
·ADC转换结果储存在16位结果寄存器中(高12位,或者低12位);
        结果寄存器=0,                            当输入模拟电压为0V时;
        结果寄存器=    当输入模拟电压大于0V、小于3V时;
        结果寄存器=4095,                        当输入模拟电压大于等于3V时;
·多触发源启动ADC转换
        S/W-software immediate start
        ePWM 1-6
        GPIO XINT2
·ADC中断请求可以在每一次ADC转换结束时,也可以每隔一次ADC转化结束时;
·ePWM触发可以独立的工作在双序列模式;
·采样保持时间的长度可以通过分频器控制。
·ADC模块结构图
Note:
·ADCENCLK使能以后,该ADCCLK才有效
·结果寄存器0-15并非A0-A7、B0-B7一一对应,具体的对应方式排序器决定
·ADC模块只有一个转换,所以在同一时刻只能有一个通道被送入到ADC转换模块中进行ADC转换;送入的先后顺序由排序器决定,采样的结果依次Result REG 0-15
·当工作于双序列模式时,若ADC转换模块正在转换ADCB0-ADCB7中的某一通道时,ADCA0-ADCA7中的某一通道转换信号送入ADC转换模块,则在转换结束ADCB0-ADCB7中的某一通道后再转换ADCA0-ADCA7中的某一通道ADCA0-ADCA7中的某一通道与ADCB0-ADCB7中的某一通道同时送入ADC转换模块,则先转换ADCA0-ADCA7中的某一通道A0-A7的优先级高于B0-B7;
2、 ADC时钟及采样频率
一般将ADCCLK配置为25MHz。
3、 自动转换排序器的工作原理
ADC排序器由两个独立的8状态排序器(SEQ1和SEQ2)组成,这两个排序器也可以被级联为1个16状态的排序器(状态的意思是排序器能够自动转换的个数)。两种情况如下图所示:
Note:
·ADC可以工作在同步采样模式和顺序采样模式,对于每一次转换,CONVxx定义了当前哪一个通道被采样和转换;
·
顺序采样模式中,CONVxx的四位都被定义为输入引脚,最高位定义了通道A或通道B,低三定义了偏移量,例如0101b表示ADCINA5,1001b表示ADCINB1;
·在同步采样模式中,CONVxx的最高位没有意义,第三位表示偏移量,例如0101b表示先对ADCINA5采样再ADCINB5采样,1001b表示先对ADCINA1采样再对ADCINB1采样
4、 ADC相关寄存器介绍
4.1    ADCTRL1
·RESET(14):写0无影响:写1复位整个ADC模块。系统复位时,ADC模块会被复位,在其他时刻需要复位ADC模块时,可以向该位写1,但是在写1后需要等待至少两个ADC时钟周期才可以继续对ADC控制寄存器1进行操作)
·SUSMOD(13:12):仿真悬挂模式位,通常向该位写入00:忽略仿真悬挂;
·ACQ_PS(11:8):该位控制SOC脉冲的宽度,决定采样开关关闭持续多长时间。SOC脉冲的宽度等于(ACQ_PS+1)个ADC时钟周期.
·CPS(7): 写0:ADCCLK = Fclk/1; 写1:ADCCLK = Fclk/2。
(Fclk = Prescaled HSPCLK(adcclkps[3:0])),参考上面ADC时钟及采样频率部分。
·CONT_RUN(6):写0:启动停止模式(收到EOS信号后,排序器停止在下一个SOC信号到来时,排序器从上一次停止的地方开始);写1:连续转换模式。(当收到EOS信号后,排序器停止在下一个SOC信号到来时解不等式组,排序器的行为取决于SEQ_OVRD位的状态,当SEQ_OVRD为0时排序器从头开始排序阳参SEQ_OVRD为1时排序器从上一次停止的地方开始
神田流菜·SEQ_OVR(5
·SEQ_CASC(40:双序列模式;写1:级联模式。
4.2    ADCTRL2
·ePWM_SOCB_SEQ(15):写0:无影响;写1:通过Epwm_SOCB信号允许级联排序器开始
·RST_SEQ1:写0:无影响;写1:立即复位排序器到ONV00;
·SOC_SEQ1:写0:清除一个没被处理的SOC触发信号;写1:软件触发,从当前停止为止启动SEQ1。
·INT_ENA_SEQ1:0:通过INT_SEQ1的中断请求被禁止;写1:通过INT_SEQ1的中断请求被使能
·INT_MOD_SEQ1:0:INT_SEQ1在一次SEQ1排序器结束时产生;写1:INT_SEQ1
每隔一次SEQ1排序器结束时产生
·ePWM_SOCA_SEQ1:写0:SEQ1不能通过ePWMx SOCA的触发开始;写1:允许SEQ1、SEQ通过ePWMx SOCA的触发开始;
·EXT_SOC_SEQ1:0:无影响;写1:允许外部中断XINT2触发启动SEQ1;
4.3    ADCTRL3梦见摘豆角
·ADCBGRFDN:写00:带隙和参考电路掉电;写11:带隙和参考电路上电;
·ADCPWDN:写0:除带隙和参考电路外,AD内部所有的模拟电路掉电;写1:AD内部所有的模拟电路上电;
·ADCCLKPS:        结合ADC时钟及采样频率理解
0000        HSPCLK/[(ADCTRL1[7]+1)]
0001        HSPCLK/[2*(ADCTRL1[7]+1)]
0010    HSPCLK/[4*(ADCTRL1[7]+1)]
0011        HSPCLK/[6*(ADCTRL1[7]+1)]
1111        HSPCLK/[30*(ADCTRL1[7]+1)]
·SMODE_SEL:写0:顺序采样模式;写1:同步采样模式。
4.4    ADCMAXCONV
·MAX_CONVn:最大通道转换
            FOR SEQ1自己打一字:MAX_CONV1[2:0]
            FOR SEQ2:MAX_CONV2[2:0]
            FOR SEQ : MAX_CONV1[3:0]
4.5    ADCST
·EOS_BUF2:SEQ2的序列缓冲结束位;
·INT_SEQ2_CLR:写0:无影响;写1:清除SEQ2中断标志INT_SEQ2.该位不会影响EOS_BUF2位
·SEQ2_BSY:读0:SEQ2空闲,等待触发;读1:SEQ2正在工作;
·INT_SEQ2:0:没有SEQ2中断事件发生;读1:SEQ2中断事件发生。
4.6    ADCREFSEL
4.7    ADCCHSELSEQ1
4.8    ADCRESULTn
5、ADC采样例程
Example 1团支部活动配置ADC为顺序采样级联模式,最大采样通道为1,ADCINA0进行连续采样AVG次,并将采样的结果放在SampleTable[BUF_SIZE]中。在本例中ADCLK = 12.5MHz。
#include "DSP28x_Project.h"    // Device Headerfile and Examples Include File
#define AVG        1000  // Average sample limit
#define ZOFFSET    0x00  // Average Zero offt
#define BUF_SIZE  2048  // Sample buffer size
// Global variable for this example
Uint16 SampleTable[BUF_SIZE];
main()
{
  Uint16 i;
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.
  InitSysCtrl();
// Specific clock tting for this example:
  EALLOW;
  SysCtrlRegs.HISPCP.all = 0x3;    // HSPCLK = SYSCLKOUT/ADC_MODCLK
  EDIS;
// Step 2. Initialize GPIO:
// This example function is found in the DSP2833x_Gpio.c file and
// illustrates how to t the GPIO to it's default state.
// InitGpio();  // Skipped for this example
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
  DINT;
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.
  InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
  IER = 0x0000;
  IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).

本文发布于:2023-05-29 16:44:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/807789.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:采样   排序   转换   模式   结果   顺序   触发
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图