F280049C是一款數模集成的DSP控制器,除了強大的數字處理能力外,還包含一部分的模擬電路,主要有比較器CMPSS、運放PGA、DAC、ADC。內部的比較器一般是結合DAC來使用,每個比較器模塊包含兩個比較器,高側and低側。比較器的特點如下:
- 包含DAC模塊,反相端可作爲DAC的輸入
- 在DAC的基礎上可設置斜波補償,用來做峯值電流控制
- 比較器的輸出可設置數字濾波
- 比較器可設置滯環寬度
比較器的內部框圖如下所示:
比較器的使用配置起來比較複雜(我花了好幾天才配置成功),實現的功能爲:三角波信號與直流信號作比較,比較器的同向輸入端爲外部輸入的三角波信號,反向輸入端爲內部DAC輸入,輸出通過GPIO引腳引出。配置步驟爲:
- 配置內部DAC、比較器反向輸入端輸入源、輸出端是否反向
- 配置比較器輸出數字濾波(慎用)
- 配置比較器的輸出方式:輸出非同步非濾波信號
- 設置比較器的滯環寬度,主要是噪聲免疫
- 配置比較器的輸出對應的GPIO引腳,這一部分需要參考X-bar部分
- 配置比較器同相輸入端的輸入引腳
- 配置GPIO引腳的複用功能,作爲Output X-bar輸出
(1) 比較器配置
比較器的反相端爲DAC的輸入(不使用斜波發生器,後邊講解),直接往DAC影子寄存器中填值就可以配置DAC輸出。比較器的輸出不濾波,直接將其引到GPIO引腳。比較器部分的配置代碼如下所示:
void InitEMPSS(void)
{
EALLOW;
Cmpss1Regs.COMPCTL.bit.COMPDACE = 1; //比較器DAC使能
Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = 0; //高側比較器方向輸入端爲DAC
Cmpss1Regs.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; //使用系統時鐘同步DAC
Cmpss1Regs.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.CTRIPOUTH
OutputXbarRegs.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.CTRIPOUTH
OutputXbarRegs.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引腳輸出OUTPUTXBAR1
EDIS;
}
(4)總結
F280049C集成的片上模擬比較器,使用方便,無需外接比較器,而且參考電壓可以使用內部DAC,可以用來做峯值電流控制。使用起來需要注意以下幾點:
- 比較器屬於模擬電路,所以對噪聲的免疫能力較差,使用時最好設置相應的滯環寬度
- 比較器輸出的數字濾波能起到濾波作用,但是需慎用
- 比較器輸出最好不要直接作爲PWM信號使用,最好將其輸出引到ePWM模塊,用ePWM模塊輸出PWM波
- 比較器輸出作爲PWM信號使用時,最好在輸出信號上加220pF左右的電容
F280049C比較器部分的完整程序我已經打包上傳到CSDN,需要的可以自行下載。下載鏈接如下所示:
https://download.csdn.net/download/fanxianyan1993/11983737
提問方式:以上程序有啥不懂的可以隨時向我提問哈,用微信掃描下方二維碼我會在第一時間給大家回覆的,謝謝。