DSP TMS320F2803x、TMS320F2806x COMP比较器模块开发笔记(代码基于TMS320F28069 详解)

详解DSP F28069的COMP比较器模块,及代码讲解(适用于2802x、2803x、2806x、M35x、M36x 型号)

比较器 (COMP) 模块

比较器模块是一个真正的模拟电压比较器在VDDA领域。核心模拟电路包括比较器,它的输入和输出,以及内部的DAC参考。支持的数字电路包括DAC控制、与其他片上逻辑的接口、输出确认块和可编程控制信号。
比较器块可以监视两个外部模拟输入,或者使用内部DAC引用监视另一个输入的外部模拟输入。比较器的输出可以异步传递,也可以限定并同步到系统时钟周期。比较器输出被路由到ePWM Trip Zone模块,以及GPIO输出多路复用器。
在这里插入图片描述

比较器功能

在这里插入图片描述
没有条件电压A =电压B的定义,因为比较器输出的响应存在滞后。请参考设备数据表了解该迟滞量的值。这也限制了比较器输出对输入电压噪声的灵敏度。
经过限定后,比较器的输出状态由COMPSTS寄存器中的COMPSTS位反映。如果模块时钟未启用,COMPSTS寄存器将不会更新。

DAC Reference

每个比较器块包含一个内部10位电压DAC参考,可用于提供比较器的反相输入(B端输入)。DAC的电压输出由控制器控制DACVAL寄存器中的DACVAL位字段来设定。DAC的输出由公式给出:
在这里插入图片描述
由于DAC也在模拟域中,它不需要时钟来维持其电压输出。然而,需要一个时钟来修改控制DAC的数字输入。

Ramp Generator Input

当选择斜坡发生器(见图9-3)时,可以产生一个下降斜坡DAC输出信号。在这种模式下,DAC使用16位RAMPSTS倒计时寄存器中最重要的10位作为输入。
在这里插入图片描述
当接收到选中的PWMSYNC信号时,RAMPSTS寄存器被设置为RAMPMAXREF_SHDW的值,然后在此后的每个syclk周期中从RAMPSTS中减去RAMPDECVAL_ACTIVE的值。当通过设置DACSOURCE = 1首次启用斜坡生成器时,RAMPSTS的值从RAMPMAXREF_SHDW加载,并且寄存器保持静态,直到接收到第一个PWMSYNC信号。
如果COMPSTS位是由比较器在ramp生成器激活时设置的,RAMPSTS寄存器将重置为RAMPMAXREF_ACTIVE的值,并保持静态,直到接收到下一个PWMSYNC信号。如果RAMPSTS的值为零,RAMPSTS寄存器将保持静态为零,直到接收到下一个PWMSYNC信号。
为了减少在更新斜坡生成器RAMPMAXREFA和RAMPDECVALA值时出现竞争条件的可能性,只有影子寄存器RAMPMAXREF_SHDW和RAMPDECVAL_SHDW具有写权限。影子寄存器的值在下一个PWMSYNC信号上复制到活动寄存器。用户软件应采取进一步措施,避免在PWMSYNC信号的同一周期内写入阴影寄存器,否则之前的阴影寄存器值可能会丢失。
PWMSYNC信号宽度必须大于SYSCLK,以确保斜坡发生器能够检测到PWMSYNC信号。

斜坡发生器的行为在图9-4中进一步说明。
在这里插入图片描述

Initialization

在使用比较器块之前,必须执行两个步骤:
1、 通过在ADCCTL1内的ADCBGPWD位写入1来启用ADC内部的带隙电源(内部参考源)。
2、 通过在COMPCTL寄存器的COMPDACEN位上写入1来启用比较器块。

Digital Domain Manipulation

在比较器的输出端,还有两个功能块可用于影响比较器输出的行为。它们是:
1、 Inverter circuit: 由COMPCTL寄存器中的CMPINV位控制,将对比较器的输出应用逻辑反相。这个功能是异步的,而它的控制需要一个时钟来改变它的值。
2、 Qualification block: 由COMPCTL寄存器中的QUALSEL位域控制,并由COMPCTL寄存器中的SYNCSEL位门控。这个块可以用作一个简单的过滤器,只在比较器的输出与系统时钟同步时才传递它。并且由QUALSEL位域中定义的系统时钟数量限定。

Comparator Registers

在这里插入图片描述
在这里插入图片描述

代码讲解

本次实验使用比较器3,COMP3A端接到IO输入,COMP3B内部接到DAC产生比对电压3V。当COMP3A端电压大于3V时输出为低电平,反正输出高电平。在输出脚接LED灯,可以方便的观察到LED灯会随着比较值的不同来响应亮灭。

  • COMP.h
/*
 * COMP.h
 *
 *  Created on: 2023年3月11日
 *      Author: chends
 */

#ifndef USER_INC_COMP_H_
#define USER_INC_COMP_H_

#include "DSP28x_Project.h"

void comp3_init(void);



#endif /* USER_INC_COMP_H_ */

  • COMP.c
/*
 * COMP.c
 *
 *  Created on: 2023年3月11日
 *      Author: chends
 */
#include "COMP.h"

void comp3_init(void)
{
    EALLOW;
    //gpio口配置
    GpioCtrlRegs.GPBPUD.bit.GPIO34 = 1;    // Disable pull-up for GPIO34 (CMP3OUT)
    GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3;  // Configure GPIO34 for CMP3OUT operation

    GpioCtrlRegs.AIOMUX1.bit.AIO6 = 2;    // Configure AIO6 for CMP3A (analog input) operation
    //GpioCtrlRegs.AIOMUX1.bit.AIO14 = 2;   //不需要配置AIO14,CMP3B将在内部接到DAC。 Configure AIO14 for CMP3B (analog input) operation

    AdcRegs.ADCCTL1.bit.ADCBGPWD=1;//1-给带隙缓冲器核心内的电路通电
    SysCtrlRegs.PCLKCR3.bit.COMP3ENCLK=1;//使能COMP3时钟

    //在传递给EPWM/GPIO块之前,比较器输出的同步选择位
    //0-传递的是异步样式的Comparator输出;1-传递的是同步样式的Comparator输出
    Comp3Regs.COMPCTL.bit.SYNCSEL =1;

    //比较器同步输出的确认期选择位,由于SYNCSEL选择位异步则QUALSEL无效
    //在Qual块的输出可以改变之前,块的输入必须连续5个时钟保持一致
    Comp3Regs.COMPCTL.bit.QUALSEL=5;

    Comp3Regs.COMPCTL.bit.CMPINV=1;//比较器反相选择。1-比较器的反向输出通过;0-比较器的输出直接通过
    Comp3Regs.COMPCTL.bit.COMPSOURCE=0;//比较器反向输入端(COMP-)的源选择。0-连接到内部DAC;1-连接到外部引脚

    //Comp3Regs.COMPSTS.bit.COMPSTS //比较器的逻辑锁存值,只读

    //(调试使用的,随便选即可)模拟模式行为。在模拟暂停期间选择斜坡生成器行为。
    //0-立即停止;1-完成当前斜坡,并在下一个PWMSYNC信号时停止;2-3:Run free
    Comp3Regs.DACCTL.bit.FREE_SOFT=2;

    Comp3Regs.DACCTL.bit.DACSOURCE=0;//DAC源选择,0-DAC由DACVAL控制;1-DAC由斜坡发生电器控制
    Comp3Regs.DACCTL.bit.RAMPSOURCE=0;//(DACSOURCE=1才此位有效)斜坡发生器源同步选择。0-PWMSYNC1是源同步;n-1:PWMSYNCn是源同步

    Comp3Regs.DACVAL.bit.DACVAL=930;//Vdac=930*3.3V/1023=3V

    //Comp3Regs.RAMPMAXREF_SHDW=0;//(DACSOURCE=1才此位有效)下斜坡发生器的16位最大参考阴影值。

    //Comp3Regs.RAMPDECVAL_SHDW=0;//(DACSOURCE=1才此位有效)下斜坡发生机的16位递减有源值

    //Comp3Regs.RAMPSTS//只读,下斜坡发生器的16位值。

    Comp3Regs.COMPCTL.bit.COMPDACEN=1;//Comparator/DAC Enable,1-Comparator/DAC logic is powered up. 0-Comparator/DAC logic is powered down.



    EDIS;
}

实验现象

在main函数中调用comp3_init();进行初始化后,即可使用。此时只需在AIO6 接大于3V的电压,GPIO34 就输出低电平;在AIO6 接小于3V的电压,GPIO34 就输出高电平。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木龠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值