这是我写的一个spwm波形程序,spwm经滤波处理(有源,截止频率20KHZ)后,在50HZ~20KHZ频率段内,spwm波形还算漂亮,示波器测量的频率有一点点小波动,可不知道为什么,spwm的频率在50HZ以下,波形就变成杂波那,示波器显示的频率波动很大,还请各路英雄指点一下。, C! q$ W" t1 a: L /**************************************************************** ) b- Z6 G+ F/ x/ {3 k**描述:利用EVA** . p( n+ g: q5 S$ N, [; J/ `9 Y**系统时钟150M,高速外设时钟150M**** 1 _" e& I- H; p/ |****************************************************************/DSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 # H+ c$ L' g. c% s4 `& `: t #include "DSP28_Device.h" ( @6 f: _! G! \#include "math.h"www.hellodsp.com3 B2 H" @: K( s 4 D' O/ e. v7 q5 l #define PI 3.1415926 # d2 [8 \7 r1 K4 L) N- O#define Max_Samples 1024+512 //定义最大数组值DSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 : ? ?" [" b$ r5 S% ` double Sin_Table[Max_Samples+1]; 6 q* ?3 x! D0 e7 qint k=0,N; // N: 载波比 N=fz/fs/ Q8 ?$ [$ d2 ~5 A int fs=20; // fs: 正弦调制波频率 ; P3 Y5 W. k$ k# e! L Hlong int fz=10240; //fz: 三角载波频率; ' G1 d2 o% @: x" d" l' Jfloat M=0.9,TC; // M:调制比 M=Um/Us 正弦波峰值Um与三角波峰值Us; TC: 三角波载波周期1 V3 c/ N; C' N7 N1 X% \' N# j) h # ~% d1 }' l2 C9 e1 tvoid Init_Samples(); 1 j$ n i4 h% z# I, i6 X% b interrupt void eva_T1UFINT_isr(void); 7 Q/ w) a! g/ o% [DSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 void EVA_Timer1()* R) _5 q8 B% h) i. J {8 l2 u" N/ H9 |- ~ EvaRegs.T1PR = (int)TC/2; 3 V' Y4 u& O& f/ l3 oDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 EvaRegs.T1CNT = 0x0000; T0 s, w9 P! X& C; D, z EvaRegs.CMPR1=0;# \: [3 f3 K0 n$ [* t7 G" c EvaRegs.ACTRA.all =0x0666; //1,3,5高有效,2,4,6低有效& E/ ]) i; o0 K+ d/ V% I: r EvaRegs.DBTCONA.all=0x0000;//死去时间0x052C # Y8 L$ b W3 G EvaRegs.COMCONA.all=0x8E00;//0xAA00 使能比较,下溢重载 , `, K7 F& m& s% k4 g EvaRegs.T1CON.all =0x0846; DSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 3 E, K, y- B% [& o" s* d % E! s. X2 R: G* z EvaRegs.GPTCONA.bit.TCOMPOE=1; 2 _7 k1 S1 T* {( A# U EvaRegs.EVAIFRA.bit.T1UFINT=1;# q- v" g4 w+ }* u EvaRegs.EVAIMRA.bit.T1UFINT=1;, S( v% {9 P* L1 A% S+ T2 r7 C EvaRegs.T1CON.bit.TENABLE=1;# u5 Q# {3 V: [2 ~ } 5 N* u' _ t8 D, f* B- A* qDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 void main(void) 1 u9 N$ X( [; ~$ `! L* R" A{ . R+ q! K* q" L' e/ j2 |9 t3 LDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 InitSysCtrl(); //初始化系统控制寄存器, 时钟频率150Mwww.hellodsp.com/ ^9 V7 I, t x& H& \ EALLOW; www.hellodsp.com; h1 Z' [. }# M$ J" _$ s SysCtrlRegs.HISPCP.all = 0x0000; //高速时钟的工作频率=150M * n; O L' } `8 ]9 h GpioMuxRegs.GPAMUX.all=0x003F; ; N) w* V* ? m$ s EDIS; www.hellodsp.com- k; l. i& f' |1 V, J DINT; //关闭总中断,清除中断标志% h: ]* I; c9 A! N5 _ IER = 0x0000; //关闭外围中断. K- J% ~9 _0 S) m8 [ IFR = 0x0000; //清中断标志www.hellodsp.com$ [8 a( P) w% F- y InitPieCtrl(); //初始化PIE控制寄存器7 ?" h J2 a( ] InitPieVectTable(); % j+ x0 x1 U# x TC=150000000/fz; ' V" s( V N! P' h1 m EVA_Timer1();: n' g" l+ Q" k. r/ `$ M Init_Samples();www.hellodsp.com O+ F; x* O S4 l, C/ c EALLOW; 0 f& A* c) s) ?0 l3 t& H PieVectTable.T1UFINT = &eva_T1UFINT_isr; //中断服务程序入口地址放入中断向量表 5 N8 j. N- ~( sDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 EDIS; ( r* t- h4 P* m; `4 M# e5 v/ o PieCtrlRegs.PIEIER2.bit.INTx6 = 1; //GP定时器1使能位于PIE第2组第6个,将其使能 % U" W4 v7 t1 y$ R8 z# ~www.hellodsp.com IER |= M_INT2; //PIE第2组对应于CPU的可屏蔽中断2(INT2),将其使能4 k+ @& ?. T! y8 A# f EINT; //开总中断9 \! t. r$ k: B- _+ K for(;;) 1 H, b/ u* J, T) dwww.hellodsp.com {;} % G2 `! b( I- W' h8 g2 z; |) d; Q$ S} DSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 7 y# R' s) s6 ~3 i* Y* O + a- `: u0 m+ f, s7 I, d* QDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 void Init_Samples(void) ; R4 s4 ?/ V. K1 z{www.hellodsp.com, O/ Y: P( f: D, g int index=1; / a P& Y) m4 b1 y& E N=fz/fs; 7 Z) n1 k: P! ^* g/ U2 K3 h while(index<N+1) : h" a8 o& g% F; M5 _& s3 o { 2 G; q# r) k* }& V1 w. L) xDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 k++;www.hellodsp.com( {2 f# T# s, d) d' O Sin_Table[index]=TC/2-TC/4*(1+M*N/2/PI*(cos(2*PI/N*(k-1))-cos(2*PI/N*k))); i5 a5 {4 _/ J# r7 u d. h! Ywww.hellodsp.com index++;5 Q8 c" ^2 v. _, h }+ |( k- {1 y7 _. _ k=1;$ i3 p3 ]3 X/ H3 o } # y7 [8 {5 B; g9 C- V1 gwww.hellodsp.com ! h( J% y S! M8 N7 J! Q* ewww.hellodsp.cominterrupt void eva_T1UFINT_isr(void), H6 V- O$ ?5 X; C$ F6 f { " [* x/ P4 C; L( D! r% M6 `) s* f7 SDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 EvaRegs.CMPR1=Sin_Table[k];DSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 6 |2 p( t0 O0 K( ^3 ?$ E7 k k+=1;www.hellodsp.com% A: V7 y. R. y8 ]# b2 g" p$ Y$ A* d if(k>N) 7 o% z( E3 Q$ Q" |' _! F k=1; 4 Q( X0 t4 \+ Q, T. y, N9 cwww.hellodsp.com EvaRegs.EVAIMRA.bit.T1UFINT = 1; //使能定时器1的周期中断 ; ]5 N! c% k) S9 q8 xDSP交流网 DSP学习第一论坛 DSP技术应用与推广平台 DSP开发服务平台 EvaRegs.EVAIFRA.bit.T1UFINT = 1; //写1清除定时器1的周期中断标志# [% ?- ]9 b! @; @; `7 Z7 _ PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; //清零 PIEACK中的第2组中断对应位 8 g- L; I- D3 b } |
联系客服