F280049C是一款数模集成的DSP控制器,除了强大的数字处理能力外,还包含一部分的模拟电路,主要有比较器CMPSS、运放PGA、DAC、ADC。内部的比较器一般是结合DAC来使用,每个比较器模块包含两个比较器,高侧and低侧。比较器的特点如下:

  1. 包含DAC模块,反相端可作为DAC的输入
  2. 在DAC的基础上可设置斜波补偿,用来做峰值电流控制
  3. 比较器的输出可设置数字滤波
  4. 比较器可设置滞环宽度

比较器的内部框图如下所示:

比较器的使用配置起来比较复杂(我花了好几天才配置成功),实现的功能为:三角波信号与直流信号作比较,比较器的同向输入端为外部输入的三角波信号,反向输入端为内部DAC输入,输出通过GPIO引脚引出。配置步骤为:

  1. 配置内部DAC、比较器反向输入端输入源、输出端是否反向
  2. 配置比较器输出数字滤波(慎用)
  3. 配置比较器的输出方式:输出非同步非滤波信号
  4. 设置比较器的滞环宽度,主要是噪声免疫
  5. 配置比较器的输出对应的GPIO引脚,这一部分需要参考X-bar部分
  6. 配置比较器同相输入端的输入引脚
  7. 配置GPIO引脚的复用功能,作为Output X-bar输出

(1) 比较器配置

比较器的反相端为DAC的输入(不使用斜波发生器,后边讲解),直接往DAC影子寄存器中填值就可以配置DAC输出。比较器的输出不滤波,直接将其引到GPIO引脚。比较器部分的配置代码如下所示:

void InitEMPSS(void)
{EALLOW;Cmpss1Regs.COMPCTL.bit.COMPDACE = 1;        //比较器DAC使能Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = 0;     //高侧比较器方向输入端为DACCmpss1Regs.COMPCTL.bit.COMPHINV = 0;        //比较器输出不反向Cmpss1Regs.COMPCTL.bit.ASYNCHEN = 0;        //Cmpss1Regs.COMPDACCTL.bit.DACSOURCE = 0;    //DAC更新数据来自于其影子寄存器Cmpss1Regs.COMPDACCTL.bit.SELREF = 0;       //VDDA作为DAC的参考电压Cmpss1Regs.COMPDACCTL.bit.SWLOADSEL = 0;    //使用系统时钟同步DACCmpss1Regs.DACHVALS.bit.DACVAL = 1700;      //配置DAC的影子寄存器值/*数字滤波*/Cmpss1Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 0x3FF;Cmpss1Regs.CTRIPHFILCTL.bit.SAMPWIN = 31;Cmpss1Regs.CTRIPHFILCTL.bit.THRESH = 31;Cmpss1Regs.CTRIPHFILCTL.bit.FILINIT = 1;Cmpss1Regs.COMPCTL.bit.CTRIPOUTHSEL = 0;Cmpss1Regs.COMPCTL.bit.CTRIPLSEL = 0;       //比较器输出非同步非滤波信号Cmpss1Regs.COMPHYSCTL.bit.COMPHYS = 4;      //设置典型的滞环宽度OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 0; // MUX0=0  CMPSS1.CTRIPOUTHOutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1;   //复用开关使能AnalogSubsysRegs.CMPHPMXSEL.bit.CMP1HPMXSEL = 0;    //选择A2引脚作为高侧比较器1的同向输入端
//    AnalogSubsysRegs.CMPHNMXSEL.bit.CMP1HNMXSEL = 1;  //选择反向输入端的信号EDIS;
}

信号的流动路径如下所示:

(2)比较器输入引脚配置

比较器同向输入端的配置需要用到模拟子系统(Analog Subsystem)里边的寄存器,配置比较简单,主要参照引脚对应表配置即可,由于使用的是专用引脚,因此不需要相关的GPIO复用功能配置。部分截图如下所示:

相关的配置代码如下所示:

AnalogSubsysRegs.CMPHPMXSEL.bit.CMP1HPMXSEL = 0;    //选择A2引脚作为高侧比较器1的同向输入端

(3)比较器输出引脚配置

比较器的输出引脚配置也是理解起来比较复杂,配置很简单,需要用到GPIO Output X-bar里边的相关寄存器将比较器的输出引到相关的GPIO引脚。X-bar其实就是实现多路开关复用的功能,eCAP中需要使用INPUT X-bar,想了解的可以参考我前面的博文。Output X-bar 共对应有8路输出(Output1-Output8),每一路output对应有32个多路选择器,每个选择器都是四选一的数据选择器。GPIO Output X-bar的内部结构图如下所示:

我使用的是Output1的MUX0开关,对应的输出为OUTPUTXBAR1,四选一的数据选择器的功能对应表部分截图如下所示:

配置代码中只需要配置MUX0的功能以及输出使能即可。相关的配置代码如下所示:

    OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 0; // MUX0=0  CMPSS1.CTRIPOUTHOutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1;   //复用开关使能

OUTPUTXBAR1是通过GPIO的复用功能输出,对应到哪个GPIO引脚需要查GPIO复用功能表,部分截图如下所示:

只需要配置GPIO复用功能引脚即可,相关配置如下所示:

void InitEMPSSGpio(void)
{EALLOW;GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;              //GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;GpioCtrlRegs.GPAGMUX1.bit.GPIO2 = 0x01;GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0x01;           //配置GPIO2引脚输出OUTPUTXBAR1EDIS;
}

(4)总结

F280049C集成的片上模拟比较器,使用方便,无需外接比较器,而且参考电压可以使用内部DAC,可以用来做峰值电流控制。使用起来需要注意以下几点:

  1. 比较器属于模拟电路,所以对噪声的免疫能力较差,使用时最好设置相应的滞环宽度
  2. 比较器输出的数字滤波能起到滤波作用,但是需慎用
  3. 比较器输出最好不要直接作为PWM信号使用,最好将其输出引到ePWM模块,用ePWM模块输出PWM波
  4. 比较器输出作为PWM信号使用时,最好在输出信号上加220pF左右的电容

F280049C比较器部分的完整程序我已经打包上传到CSDN,需要的可以自行下载。下载链接如下所示:

https://download.csdn.net/download/fanxianyan1993/11983737

提问方式:以上程序有啥不懂的可以随时向我提问哈,用微信扫描下方二维码我会在第一时间给大家回复的,谢谢。

DSP TMS320F280049之模拟比较器CMPSS(寄存器版)相关推荐

  1. ## STM32F103的光照、烟雾MQ2、有毒气体MQ135的ADC配置(寄存器版与库函数版

    STM32F103的光照.烟雾MQ2.有毒气体MQ135的ADC配置(寄存器版与库函数版 //#include "adc.h"#if 0 //寄存器编程 /************ ...

  2. 基于STM32寄存器版的嵌入式智慧仓库

    基于STM32寄存器版的嵌入式智慧仓库 1.项目背景 项目环境背景 项目运作的可行性 项目的优势分析 2.总体设计 3.外设选取和引脚连接 外设选取 引脚连接 4.系统架构 5.驱协开发 LED驱动 ...

  3. DSP TMS320F280049之数模转换器DAC(寄存器版)

    F280049C有两个12bit的可编程DAC内核,除了能产生DC电压外,还可以产生多种AC波形,例如正弦波.方波.三角波等.每个DAC都有如下特点: 可选参考源,分为内部参考源(参考电压可选为1.6 ...

  4. DSP TMS320F280049之移相控制(Phase-Shift Control)-库函数实现

    (1)原理介绍 F280049C的PWM模块功能强大,可以比较容易的实现移相控制. 本节主要向大家讲述用DSP如何编程实现移相控制,如下图所示为移相全桥变换器的移相控制示意图,其中EPWM1A和EPW ...

  5. stm32寄存器版学习笔记04 定时计数器中断

    STM32共有8个定时计数器,其中TIME1和TIME8是高级定时器,TIME2~TIME5是通用定时器,TIME6和TIME7是基本定时器.以TIME3为例总结定时计数器的基本用法. 1.TIM3的 ...

  6. 【stm32f103】USART TX发送实现(寄存器版)

    本讲主要实现usart TX的实现,主要分几部分的应用 1.      USART 1 Tx polling的实现(附带printf的实现) 2.      USART1 Tx DMA的实现 3.   ...

  7. 第一站:STM32寄存器版点亮LED遇到的一些问题解析

    刚开始学习stm32第一步就是点灯,虽然是点灯,但是一切都没那么顺利,点灯也是一条艰辛的道路哈哈哈!所以今天来讲一下我遇到的一些问题是怎么解决的.正确的第一盏灯代码是这样的:*(unsigned in ...

  8. Proteus仿真STM32F103R6的寄存器版跑马灯程序(存储器宏定义)

    跑马灯程序,存储器映像.用宏定义,增强程序的可读性.. 头文件: #ifndef __STM32F10x_H #define __STM32F10x_H#define PERIPH_BASE (0X4 ...

  9. Proteus仿真STM32F103R6的寄存器版跑马灯程序

    STM32最简单的外设莫过于IO口的高低电平控制了, Proteus仿真STM32F103R6的跑马灯程序. 一.原理图 二.跑马灯C程序 // 粗略延时函数 static void delay(un ...

最新文章

  1. Pycharm断点失效(不起作用),原来是matplotlib.pyplot.show()函数的原因
  2. 【PAT乙级】1058 选择题 (20 分)
  3. 项望烽:移动 IM 开发之登录优化
  4. 基于React和SpringBoot的快速开发模板QuickAdmin
  5. 唐云峰:想当科学家的怪极客
  6. 网站页面增加一个简单的密码登录访问php网站源码
  7. 自定义springSecurity3.0 登录后自定义返回页面
  8. C# 创建Excel文件
  9. Linux下l2tp客户端xl2tpd安装配置的具体操作
  10. ucinet计算聚类系数大于1怎么办_ucinet6聚类分析
  11. LibOpenCM3(二) 项目模板 Makefile分析
  12. 欧洲急了,正式发起 2nm 芯片总攻
  13. 【目标检测】YOLO和SSD的区别
  14. 漫画:网站访问缓慢怎么办?
  15. mac bigsur python3.8 安装pillow失败
  16. 常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(二)
  17. 15款最佳的MySQL管理工具和应用程序
  18. C语言头文件路径相关问题总结说明
  19. 眼睛红得像兔子原因竟出在“腰”上!眼睛发红莫忽视!
  20. 卡塔尔世界杯在哪里可以看直播?

热门文章

  1. 奥运主题游戏《阿翔 跨栏》已经发布成功
  2. 视频讲解|KLTS -- K8s 长期维护支持版本
  3. 「雕爷学编程」Arduino动手做(21)——激光头模块
  4. 汽车tbox介绍、新能源tbox,汽车tbox,新能源上的车联网终端
  5. createImage和getImage区别
  6. 大龄码农适合做什么,比如40岁以上?
  7. PIM-DM--理论详解
  8. Struts2动作类:Action
  9. 如何查看网页元素使用的js
  10. nginx 配置HTTPS证书-阿里云服务器