DSP_TMS320F28377D_ADC学习笔记

这篇具有很好参考价值的文章主要介绍了DSP_TMS320F28377D_ADC学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

DSP各种模块的使用,基本上就是 GPIO复用配置、相关控制寄存器的配置、中断的配置。本文主要记录本人对ADC模块的学习笔记。TMS320F28377D上面有24路ADC专用IO,这意味着不需要进行GPIO复用配置。 只需要考虑相关控制寄存器和中断的配置。看代码请直接跳到最后。

正文

单端模式/差分模式

在放代码之前,先谈谈TMS320F28377D的ADC里面非常容易搞蒙的一点:单端模式/差分模式

根据TMS320F28377D 的reference的介绍(pg:1554),ADC模块有以下特性 :

DSP_TMS320F28377D_ADC学习笔记

差分信号转换 仅限16位模式

单端信号转换 仅限12位模式

单端的话,就能有16通道(12位)|  差分的话,就能有8通道(16位)。

很多人都对差分模式下DSP的代码应该如何编写还不够理解,相信看了下面这个帖子会有启发。TMS320F28388D: 16位差分采样 - C2000™︎ 微控制器论坛 - C2000 微控制器 - E2E™ 设计支持 (ti.com)

我怕帖子被删除了,还是复述点关键的东西吧。 下表不仅给出了单端/差分在16位模式下的解算方式,也间接说明了单端也并非是 12-bit mode only,单端也是可以用16位的。

DSP_TMS320F28377D_ADC学习笔记

而下面两条评论,则清晰的解释了差分模式下,如何得到ADC的采集结果 

DSP_TMS320F28377D_ADC学习笔记

最后,结合一张硬件原理图,基本上已经一目了然了 

DSP_TMS320F28377D_ADC学习笔记

代码理解

下面给出ADC控制寄存器的相关配置代码,并进行解释。

    EALLOW;
    AdcaRegs.ADCCTL2.bit.PRESCALE       = 6;    // Set ADCCLK divider to /4
    AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_SINGLE);
    AdcaRegs.ADCCTL1.bit.INTPULSEPOS    = 1;
    AdcaRegs.ADCCTL1.bit.ADCPWDNZ       = 1;
    DELAY_US(1000);
    EDIS;

AdcaRegs.ADCCTL2.bit.PRESCALE       = 6;

本行代码是ADC的时钟预分频,参考手册pg1597可以看到,6表示4分频,此行代码是参考Ti的官方例程里面的代码。

DSP_TMS320F28377D_ADC学习笔记

 

AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_SINGLE);

此行代码是设置ADC模块的A组ADCA(还有ADCB、ADCC、ADCD)的分辨率,和单端/差分模式。正文开篇也提到了,单端模式也是可以使用16位的分辨率的。 当然我们也可以把ADCA配置成差分模式,然后使用16位的分辨率,

AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);

但,后续对ADC转换结果的解算需要做相应的修改,参考前面放的解算表。

关于下面三行代码

AdcaRegs.ADCCTL1.bit.INTPULSEPOS    = 1;
AdcaRegs.ADCCTL1.bit.ADCPWDNZ       = 1;
DELAY_US(1000);

也是参考Ti的官方例程里面的代码。

第一行AdcaRegs.ADCCTL1.bit.INTPULSEPOS    = 1;是配置 ADC中断脉冲位置。Pg1596

DSP_TMS320F28377D_ADC学习笔记 

0采集窗口结束时产生中断脉冲 | 1在转换结束时产生中断脉冲。结果将在1个或多个周期后锁定。 不纠结,抄就完了。

第二行AdcaRegs.ADCCTL1.bit.ADCPWDNZ       = 1;是打开ADC的电源

DSP_TMS320F28377D_ADC学习笔记

第三行DELAY_US(1000);是延迟1ms等待ADC上电成功。 

下面给出ADC的SOC及中断相关寄存器的配置代码,并给出解释。


    EALLOW;
    AdcaRegs.ADCSOC0CTL.bit.CHSEL       = 0;    // SOC0 will convert internal connection A0
    AdcaRegs.ADCSOC0CTL.bit.ACQPS       = 63;   // Sample window is 64 SYSCLK cycles
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL     = 0x5;  // Trigger on ePWM1 ADCSOCA  触发源的选择

    AdcaRegs.ADCSOC1CTL.bit.CHSEL       = 2;    // SOC1 will convert internal connection A2
    AdcaRegs.ADCSOC1CTL.bit.ACQPS       = 63;   // Sample window is 65 SYSCLK cycles
    AdcaRegs.ADCSOC1CTL.bit.TRIGSEL     = 0x5;  // Trigger on ePWM1 ADCSOCA 触发源的选择

    AdcaRegs.ADCINTSEL1N2.bit.INT1SEL   = 1;    // End of SOC1 will set INT1 flag
    AdcaRegs.ADCINTSEL1N2.bit.INT1E     = 1;    // Enable INT1 flag
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1   = 1;    // Make sure INT1 flag is cleared
    EDIS;

 

首先我们来解释这三行

AdcaRegs.ADCSOC0CTL.bit.CHSEL       = 0;    // SOC0 will convert internal connection A0
AdcaRegs.ADCSOC0CTL.bit.ACQPS       = 63;   // Sample window is 64 SYSCLK cycles
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL     = 0x5;  // Trigger on ePWM1 ADCSOCA  触发源的选择

 第一行AdcaRegs.ADCSOC0CTL.bit.CHSEL       = 0; 表示ADCa的SOC0信道的选择是ADCIN0(单端模式)或者 ADCIN0ADCIN1组合的差分模式。 SOCstart of conversion),相当于:【ADCIN0单端模式】 或【ADCIN0ADCIN1组合的差分模式】的转换结果,将会保存到 AdcaResultRegs.ADCRESULT0中。

第二行AdcaRegs.ADCSOC0CTL.bit.ACQPS       = 63;表示SOC0的捕获预分频设置成了64个周期,主要控制该SOC的采样和保持窗口的时长。此行也是参考Ti官方例程里面的程序。 官方推荐,12位分辨率ACQPS=14// 75 ns16位分辨率ACQPS=63// 320 ns

第三行AdcaRegs.ADCSOC0CTL.bit.TRIGSEL     = 0x5; 表示SOC0触发源的选择。

DSP_TMS320F28377D_ADC学习笔记

 我们的系统要用PWM去控制电机的,所以配置了用PWM去作为SOC0的触发源。也可以直接写某个寄存器(ADCSOCFRC1)触发,写用定时器触发。这些方式可以参考Ti的官方例程。

下面,我们来解释中断相关的这三行代码

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL   = 1;    // End of SOC1 will set INT1 flag
AdcaRegs.ADCINTSEL1N2.bit.INT1E     = 1;    // Enable INT1 flag
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1   = 1;    // Make sure INT1 flag is cleared

第一行:AdcaRegs.ADCINTSEL1N2.bit.INT1SEL   = 1;表示当SOC1转换结束后,才给出ADCa INT1的中断信号,然后产生中断, 如果配置成 = 7; 那就得等SOC7转换结束后,才给ADCa INT1的中断信号。

第二行:AdcaRegs.ADCINTSEL1N2.bit.INT1E     = 1;  使能ADCaINT1中断。

第三行:AdcaRegs.ADCINTFLGCLR.bit.ADCINT1   = 1; 清空中断标志

代码整理

下面将所有代码整理到一起,一便借鉴,其中也包含ADC的中断配置,以及中断处理函数的定义。

void adcinterruptinit(void){
    // ADC
    EALLOW;     // 设置中断入口函数
        PieVectTable.ADCA1_INT = &ADCaHandler;
    EDIS;

    PieCtrlRegs.PIEIER1.bit.INTx1   = 1;    // 使能PIE中断  ADCa

    IER |= M_INT1;
}



interrupt void ADCaHandler(void){

// AdcaResultRegs.ADCRESULT0
// AdcaResultRegs.ADCRESULT1

    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1   = 1;    // Clear INT1 flag
    PieCtrlRegs.PIEACK.all  = PIEACK_GROUP1;
}


void adc_register_init(void){

    EALLOW;
    AdcaRegs.ADCCTL2.bit.PRESCALE       = 6;    // Set ADCCLK divider to /4
    AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_SINGLE);
    AdcaRegs.ADCCTL1.bit.INTPULSEPOS    = 1;
    AdcaRegs.ADCCTL1.bit.ADCPWDNZ       = 1;
    DELAY_US(1000);
    EDIS;

    EALLOW;
    AdcaRegs.ADCSOC0CTL.bit.CHSEL       = 0;    // SOC0 will convert internal connection A0
    AdcaRegs.ADCSOC0CTL.bit.ACQPS       = 63;   // Sample window is 64 SYSCLK cycles
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL     = 0x5;  // Trigger on ePWM1 ADCSOCA  触发源的选择

    AdcaRegs.ADCSOC1CTL.bit.CHSEL       = 2;    // SOC1 will convert internal connection A2
    AdcaRegs.ADCSOC1CTL.bit.ACQPS       = 63;   // Sample window is 65 SYSCLK cycles
    AdcaRegs.ADCSOC1CTL.bit.TRIGSEL     = 0x5;  // Trigger on ePWM1 ADCSOCA 触发源的选择

    AdcaRegs.ADCINTSEL1N2.bit.INT1SEL   = 1;    // End of SOC1 will set INT1 flag
    AdcaRegs.ADCINTSEL1N2.bit.INT1E     = 1;    // Enable INT1 flag
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1   = 1;    // Make sure INT1 flag is cleared
    EDIS;
}

感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。文章来源地址https://www.toymoban.com/news/detail-442880.html

到了这里,关于DSP_TMS320F28377D_ADC学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [DSP学习笔记]基于TMS320F28335的FIR滤波实现

    首先进入TI官网,搜索C2000 wave,进行下载安装。 安装完成后,在2000 wave的安装目录下,进入以下目录:C2000Ware_4_02_00_00librariesdspFPUc28 以我本地的安装目录为例:E:tic2000C2000Ware_4_02_00_00librariesdspFPUc28 复制include、source文件夹到新建工程中。再根据选用的DSP型号对文件夹内

    2024年02月10日
    浏览(66)
  • DSP TMS320F2803x、TMS320F2806x COMP比较器模块开发笔记(代码基于TMS320F28069 详解)

    比较器模块是一个真正的模拟电压比较器在VDDA领域。核心模拟电路包括比较器,它的输入和输出,以及内部的DAC参考。支持的数字电路包括DAC控制、与其他片上逻辑的接口、输出确认块和可编程控制信号。 比较器块可以监视两个外部模拟输入,或者使用内部DAC引用监视另一

    2024年02月13日
    浏览(29)
  • TMS320F28374S之X-BAR

    X-BAR可翻译为 交叉开关 或者 交换总线 ,在DSP中有四种 X-BAR,分别是: Input X-BAR、 Output X-BAR、 CLB X-BAR 和 ePWM X-BAR。Input X-BAR可以将外部信号传输到CPU内部,Output X-BAR则可以将内部信号传输到外部GPIO端口。CLB X-BAR 和ePWM X-BAR将内部信号传输到CLB和 ePWM模块。 Input X-BAR用于将信号从

    2024年02月13日
    浏览(26)
  • 【轮式平衡机器人】——TMS320F28069片内外设之ePWM

    声明:本系列博客参考有关专业书籍,截图均为自己实操,仅供交流学习! 脉冲宽度调制(PWM)是一种对模拟信号进行数字编码的方法,硬件原理是根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现 开关 稳压电源输出晶体管 或 晶体管导通时间的 改变。 一个重要

    2024年03月11日
    浏览(36)
  • 11.TMS320C5509V+Win10+CCS8开发环境搭建

    众所周知,相较于TMS320F28335,TMS320C5509V属于较老的平台,在新版本的CCS版本上支持一直是一个问题。 最基本的问题便是,无法新建基础工程。各开发版厂商提供的例程无法在CCS8上使用,只支持CCS3.3环境,但是由于目前Win7、Win10等系统均不再支持CCS3.3,所以只能折腾虚拟机来

    2024年02月07日
    浏览(33)
  • 【TES600】基于XC7K325T与TMS320C6678的通用信号处理平台

    板卡概述         TES600是一款基于FPGA+DSP协同处理架构的通用高性能实时信号处理平台,该平台采用1片TI的KeyStone系列多核浮点/定点DSP TMS320C6678作为主处理单元,采用1片Xilinx的Kintex-7系列FPGA XC7K325T作为协处理单元,具有1个FMC子卡接口,具有4路SFP+万兆光纤接口,具有2路

    2024年02月06日
    浏览(28)
  • 基带信号处理设计原理图:2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板

    基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板          综合图像处理硬件平台包括图像信号处理板2块,视频处理板1块,主控板1块,电源板1块,VPX背板1块。 一、板卡概述          图像信号处理板包括2片TI 多核DSP处理器-TMS320C6678,1片Xilinx FPGA XC7K420T-

    2024年03月15日
    浏览(44)
  • 图像信号处理板设计原理图:2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板

             综合图像处理硬件平台包括图像信号处理板2块,视频处理板1块,主控板1块,电源板1块,VPX背板1块。 一、板卡概述          图像信号处理板包括2片TI 多核DSP处理器-TMS320C6678,1片Xilinx FPGA XC7K420T-1FFG1156,1片Xilinx FPGA XC3S200AN。实现四路千兆以太网输出,两路

    2024年02月04日
    浏览(38)
  • DSP28335学习笔记:定时器中断

    F28335的CPU定时器有3个且均为32位,分别是Timer0、Timer1、Timer2, 其中 Timer2 是为操作系统 DSP/BIOS 保留的,当未移植操作系统时,可用来做普 通的定时器。这三个定时器的中断信号分别为 TINT0,TINT1,TINT2,分别对应于中断向量 INT1,INT13,INT14。 一、F28335定时器介绍(CPU定时器)

    2024年04月10日
    浏览(35)
  • DSP28335学习笔记-产生PWM波 ——从应用角度出发

    关于DSP28335的书籍有很多,但都是从乏味的寄存器开始入手。对于新手可能不是很友好,因此关于DSP的学习记录我打算从应用入手去学习寄存器的用法和配置。 此次实验用J4模块引脚的XPWM1和XPWM2分别产生ePWM1A和ePWM1B,对应芯片GPIO0和GPIO1引脚。 黄色线为EPWM1A,紫色线为EPWM1B。

    2024年02月06日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包