我们还是算了吧:spwm程序探讨(完整工程,频率可调)

来源:百度文库 编辑:偶看新闻 时间:2024/05/09 20:42:17
spwm程序探讨(完整工程,频率可调)(转)2010-05-23 18:00 这是我写的一个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: 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
}