TMS320F240片内PWM实现D/A扩展功能
在-3 dB带宽为1000 kHz的条件下,求解得到:
R1=1.6 kΩ,R2=2.4 kΩ,R3=7.5 kΩ,R4=∞,C1=0.1μF,C2=0.01μF,C3=0.047μF (9)
R4决定滤波器直流分量的增益,选取R4=∞(即不安装R4),则D/A输出增益为1;要想改变带宽大小,只须保持R4和电容值不变,改变其它电阻的阻值即可。
图3 低通滤波器电路
3 软件程序设计和实验结果
利用TMS320F240配套的EVM(Evaluation Module)板作为DSP的实验平台,给定一模拟电压作为F240的A/D输入,将A/D转换的值作为产生PWM波形的DSP定时器中比较寄存器的值;通过中断,不断获取最新的A/D转换值,改变PWM波形的占空比,得到对应幅值的PWM波形,再将所得的20 kHz的PWM信号输入给滤波器,用数字示波器观察滤波器的D/A输出,以评价这种D/A转换方法的实际效果。
3.1 通过D/A转换产生对应幅值PWM波形的DSP程序
基于DSP功能模块化的特点,其汇编程序的编制主要分三个步骤:① 初始化设置时钟源模块,得到所需的CPUCLK和SYSCLK; ② 设置事件管理模块,初始化定时器和A/D转换操作; ③ 编写定时中断服务子程序,即可完成从A/D转换产生对应幅值的PWM波形输出。部分程序代码如下:
;设置 PLL模块
LDP #224;
SPLK #0000000001000001b,CKCR0
;SYSCLK=CPUCLK/2
SPLK #0000000010111011b,CKCR1
;CLKIN(OSC)=10MHz, CPUCLK=20MHz
SPLK #0000000011000011b,CKCR0
;使能锁相环(PLL)操作
SPLK #0100000011000000b,SYSCR
;CLKOUT=CPUCLK
;设置EV 管理器
LDP #232;
SPLK #0,T1CMPR ;初始化定时比较寄存器
SPLK #0000000001010101b,GPTCON
;通用定时器的PWM输出为低有效
SPLK #1000,T1PR ;设置PWM波形的周期为20 kHz
SPLK #0000h,T1CNT ;初始化计数寄存器
SPLK #0001000000001010b,T1CON
;设置连续增计数方式,使能比较操作
SPLK #0000000010000000b,EVIMRA
;清除定时器1比较中断屏蔽位
LDP #224
SPLK #1000110100000010b,ADCTRL1
;设置A/D连续转换模式,选择通道CH0
SPLK #0000000000000101b,ADCTRL2
;设置A/D转换输入时钟预定标因子为16
LDP #232
SBIT1 T1CON,B6_MSK ;使能定时器1中断启动位
LDP #224
SBIT1 ADCTRL1,B0_MSK;使能A/D转换启动位
CLRC INTM;
END B END ;等待定时器1中断的产生
;产生PWM 波形ISR
Change_CMPR:
LDP #224 ;定时器1比较中断服务子程序
LACC ADCTRL1;
SACL ADCTRL1 ;清除片内A/D转换中断标志位
LACC ADCFIFO1;读取最新的A/D转换值
RPT #5;
SFR ;把存于结果寄存器的高10位的A/D
;转换值移至ACC的低十位
LDP #232;
《TMS320F240片内PWM实现D/A扩展功能(第3页)》