详解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灯会随着比较值的不同来响应亮灭。文章来源:https://www.toymoban.com/news/detail-640663.html
- 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 就输出高电平。文章来源地址https://www.toymoban.com/news/detail-640663.html
到了这里,关于DSP TMS320F2803x、TMS320F2806x COMP比较器模块开发笔记(代码基于TMS320F28069 详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!