TMS320F28388D 学习笔记3 ADC后处理块(Post-Processing Blocks)
文章目录
- 偏移校正
- 误差计算
- 越限检测和过零检测
- 采样延迟捕获
每个ADC模块包含4个后处理块(PPB)。这些块可以使用ADCPPBxCONFIG寄存器与16个结果寄存器中的任何一个相关联。每个PPB可以同时消除与ADCIN通道相关的偏移量,减去参考值,标记过零点,以及标记上越限或下越限。此外,过零和越限标记可以触发PWM和/或产生中断。PPB还能够记录SOC与实际开始采样之间的延迟。图20-9显示了每个PPB的结构。后续章节将解释每个子模块的使用。
偏移校正
在许多应用中,外部传感器和信号源会产生偏移。ADC偏移的全局微调不足以补偿这些偏移,因为这些偏移因通道而异。PPB可以以零开销消除这些偏移,从而在紧凑的控制循环中节省大量周期。
为了使用此功能,将ADCPPBxCONFIG.CONFIG配置至所需SOC,然后将偏移校正值写入ADCPPBxOFFCAL.OFFCAL寄存器。PPB将自动从原始转换结果中添加或减去OFFCAL寄存器中的值,并将其存储在ADCRESULT寄存器中。对于12位或16位模式,此加法/减法的结果将分别在0和4095或65535饱和。
- 将0写入OFFCAL寄存器将有效禁用偏移校正功能,并将原始结果不变地传递给ADCRESULT寄存器。
- 可以将多个PPB指向同一SOC。在这种情况下,实际应用的OFFCAL值将是具有最大编号的那一个PPB。
- 在SOC0上使用PPB时需要小心,因为默认情况下,所有PPB都指向该SOC。这可能会导致编号较低的PPB的偏移校正被编号较高的PPB意外覆盖。
误差计算
在许多应用中,必须计算ADC采样结果与设定点或参考值的误差。另一些时候,双极信号对于控制算法的计算是必要的或方便的。PPB可以自动执行这些功能,减少采样到输出的延迟,并减少软件开销。
为了使用此功能,将ADCPPBxCONFIG.CONFIG配置至所需SOC,然后将值写入ADCPPBxOFFCAL.OFFREF寄存器。PPB将自动从ADCRESULT值中减去OFFREF寄存器中的值,并将其存储在ADCPPBxRESULT寄存器中。此减法将产生带符号的32位结果。通过在ADCPPBxCONFIG寄存器中设置TWOSCOMPEN位,也可以在存储到ADCPPBxRESULT寄存器之前选择性地为计算值取反。
- 在12位模式下,不要将大于12位的值写入OFFREF寄存器。
- 由于每个PPB的PPBxRESULT寄存器是唯一的,因此可以将多个PPB指向同一SOC,并为每个PPB获得不同的结果。
- 将0写入OFFREF寄存器可禁用误差计算功能,将ADCRESULT值不变地传递给ADCPPBxRESULT寄存器。
越限检测和过零检测
许多应用对ADC转换结果执行越限检查。根据上限和下限或ADCPPBxRESULT改变符号,PPB可以自动执行检查。基于这些比较,它可以自动生成PWM trip和/或中断,从而降低采样到ePWM的延迟并减少软件开销。此功能还允许应用程序基于超出范围的ADC转换触发ePWM,而无需任何CPU干预。
要启用此功能,请首先配置ADCPPBxCONFIG.CONFIG至所需SOC,然后将值写入其中一个或两个寄存器ADCPPBxTRIPHI.LIMITHI 和ADCPPBxTRIPLO.LIMITLO(过零检测不需要进一步配置)。每当越限时,ADCEVTSTAT寄存器中将设置PPBxTRIPHI位或PPBxTRIPLO位。请注意,ADCEVTSTAT寄存器中的PPBxZERO位由EOC选通,而不是由ADCPPBxRESULT寄存器中的符号更改选通。ADCEVTCLR寄存器具有相应的位来清除这些事件标志。ADCEVTSEL寄存器具有相应的位,允许事件传播到PWM。ADCINTSEL寄存器具有相应的位,允许事件传播到PIE。
一个PIE中断在给定ADC模块的所有PPB之间共享,如图20-10所示。
- 如果需要对来自同一ADC模块的不同PPB事件采取不同的措施,则ADCEVTINT ISR必须读取ADCEVTSTAT寄存器中的PPB事件标志,以确定导致中断的事件。
- 如果需要为高比较、低比较和/或过零分别生成不同的ePWM trips,可通过将多个PPB指向同一SOC来实现。
- 过零检测电路认为结果0为正。
采样延迟捕获
当多个控制回路在同一ADC上异步运行时,来自两个或多个回路的ADC请求有可能发生冲突,从而导致其中一个采样延迟。这在系统中显示为测量误差。通过了解延迟发生的时间和延迟量,软件可以采用外推技术来减少误差。
为此,每个PPB在ADCPPBxSTAMP寄存器中都有DLYSTAMP字段。该字段将记录触发SOC至开始转换之间的SYSCLK数。这是通过基于SYSCLK的全局12位自由运行计数器实现的,其位于ADCCOUNTER寄存器的FREECOUNT字段中。当相关SOC的触发到达时,该计数器的值加载到ADCPPBxTRIPLO.REQSTAMP。当SOC的实际采样窗口开始时,REQSTAMP中的值将从当前FREECOUNT值中减去,并存储在DLYSTAMP中。
- 如果SOC触发和SOC采样的实际开始之间经过4096个SYSCLK周期以上,则FREECOUNT寄存器可能会溢出不止一次,从而导致DLYSTAMP值不正确。使用非常慢的转换时要小心,以防止发生这种情况。
- 如果通过软件触发相关SOC,则采样延迟捕获将不起作用。但是,如果不同SOC的软件触发导致与PPB相关的SOC延迟,则会正确记录。
TMS320F28388D 学习笔记3 ADC后处理块(Post-Processing Blocks)相关推荐
- oracle protocol=beq 不可用,学习笔记:Oracle数据库坏块 深入研究obj$坏块导致exp/expdp不能执行原因...
天萃荷净 深入研究Oracle坏块obj$导致exp/expdp不能执行导出的原因 上篇(案例:Oracle出现obj$坏块exp/expdp导出不能导出的解决办法ORA-01578 ORA-0111 ...
- STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示
STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...
- B站台湾大学郭彦甫|MATLAB 学习笔记|08 图像处理I Image Processing
MATLAB学习笔记(08 图像处理I Image Processing) 如果想获得更好浏览体验的朋友可以转到下面链接 08 1. 基本操作 读取图像 imread() 展示图像 imshow() ...
- B站台湾大学郭彦甫|MATLAB 学习笔记|09 图像处理II Image Processing
MATLAB学习笔记(09 图像处理II Image Processing) 如果想获得更好浏览体验的朋友可以转到下面链接 09 1. 提出问题 题目:如何找出图片中的米粒,并且确定他们的大小? 老师 ...
- TMS320F28388D 学习笔记1 建立工程
索引 前言 Tips 吐槽 流程 建立工程 复制库函数 添加常用库 SFRA DCL CLAmath FPUfastRTS power_measurement solar datalog SPLL C ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)
嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...
- STM32学习笔记一一ADC
前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. github:my github 注:博客所涉及的关于 stm32 的代码 ...
- Oracle学习笔记_PL/SQL语句块
推荐一个学习视频:https://www.bilibili.com/video/BV1AX4y1T7KG?spm_id_from=333.1007.top_right_bar_window_custo ...
最新文章
- 人工智能商业化的重点:语音交互和人脸识别
- python中Scipy模块求取积分
- 解决“The type initializer for'Oracle.DataAccess.Client.OracleConnection' threw an exception ”异常...
- 二叉搜索树简介和部分题目
- javascript第三天(2)
- svn由于连接方在一段时间后没有正确答复或连接的主机没有反应连接尝试失败...
- 中小企业团队敏捷产品开发流程最佳实践
- 微型计算机文献,微型计算机控制系统期刊文章参考文献 哪里有微型计算机控制系统参考文献...
- Maximo中调用XFire客户端的实现—Weblogic中间件
- linux列举网卡,linux下快速列出局域网中所有主机名(计算机名)的脚本
- JavaScript学习总结(二十)——Javascript非构造函数的继承
- Active Directory之强制占有操作主机
- 19. web root (2)
- cnblogs用户体验评价
- Java编程基础12——Eclipse使用Object类型
- 网络战武器——震网(Stuxnet)病毒
- 最新PHP全开源京东淘宝唯品会自动抢单系统源码
- mysql冒号_mysql语句中的冒号是什么意思?
- Linux系统和Windows系统的区别
- 什么是真正的架构设计?十年Java经验让我总结出了这些,不愧是我
热门文章
- Unity3D 武器拖尾效果(刀光) 使用PocketRPG Trails
- python爬取客流数据_【python爬取雅虎财经数据】“五一”和广交会客流叠加 广州出入境客流呈“双高峰”...
- 学iOS开发如何选择iOS培训机构之浅析
- 相片打印机原理_浅谈喷墨打印机的照片输出(一)照片输出的需求与喷打在其中的地位和作用...
- 尚硅谷《MySQL高级特性篇》教程发布
- 电话发明背后的浪漫爱情故事
- 安装adobe系列软件提示已损坏无法打开,如何解决?
- 华为在欧洲申请了新的折叠手机专利,似乎认可三星的折叠手机技术
- 微通道产品经理Grover采访:美国的微通道设计
- 数据仓库实验一分箱与数据平滑