求助,关于滤波

2019-03-24 12:18发布

在MSP430开发板上利用软件产生SPWM波,然后加个滤波电路想产生周期为1s的正弦波,可是加上硬件后出不来正弦波,求助滤波电路应该怎么改,软件设计有问题吗?
下面附有软件程序和外部滤波电路图,滤波电路放大器用的是opa2227,因为放大一倍,所以R4=0,直接连的导线
//******************************************************************************
//  LaunchPad Lab4 - Timer Toggle P1.6,
//
//                MSP430G2553
//             -----------------
//         /||              XIN|-
//          | |                 |
//          --|RST          XOUT|-
//            |                 |
//            |             P1.6|-->LED
//
//******************************************************************************
#include  <msp430g2553.h>
short temp[200]={2500,2578,2656,2735,2813,2891,2968,3045,3121,3197,3272,3346,3420,
  3492,3564,3634,3704,3772,3839,3904,3969,4031,4093,4152,4211,4267,4322,4374,
  4425,4474,4522,4567,4610,4651,4690,4727,4761,4793,4823,4851,4877,4900,4920,
  4939,4955,4968,4979,4988,4994,4998,4999,4998,4994,4988,4979,4968,4955,4939,
  4920,4900,4877,4851,4823,4793,4761,4727,4690,4651,4610,4567,4522,4474,4425,
  4374,4322,4267,4211,4152,4093,4031,3969,3904,3839,3772,3704,3634,3564,3492,
  3420,3346,3272,3197,3121,3045,2968,2891,2813,2735,2656,2578,2500,2421,2343,
  2264,2186,2108,2031,1954,1878,1802,1727,1653,1579,1507,1435,1365,1295,1227,
  1160,1095,1030,968,906,847,788,732,677,625,574,525,477,432,389,348,309,272,
  238,206,176,148,122,99,79,60,44,31,20,11,5,1,0,1,5,11,20,31,44,60,79,99,122,
  148,176,206,238,272,309,348,389,432,477,525,574,625,677,732,788,847,906,968,
  1030,1095,1160,1227,1295,1365,1435,1507,1579,1653,1727,1802,1878,1954,2031,
  2108,2186,2264,2343,2421};
int i=0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
  while(1);             // If calibration constants erased, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ;       // Set range
DCOCTL = CALDCO_1MHZ;        // Set DCO step + modulation
BCSCTL3 |= LFXT1S_2;                      // LFXT1 = VLO
P1DIR = 0x40;                             // P1.6 output (green LED)
P1OUT = 0;                                // LED off
IFG1 &= ~OFIFG;                           // Clear OSCFault flag
BCSCTL1 |= DIVA_0;        // ACLK = VLO
BCSCTL2 |= SELM_0 + DIVM_0 + DIVS_0;      // MCLK = DCO, SMCLK = DCO
// Configure TimerA
TACTL = TASSEL1 +MC_1;         // Source: ACLK, UP mode
CCR0 = 5000;     //Timer count 5100
CCR1 = 2500;      //Timer count 100
CCTL0 = CCIE;                   //CCR0 interrupt enabled
CCTL1 = CCIE;                   //CCR1 interrupt enabled
_BIS_SR(GIE);
for(;;);
}
// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
P1OUT |= BIT6;                // P1.6 output High
if(i==199)
{
  i=0;
}
else
{
  i++;
}
if(temp==4999)
{
  CCR1=4998;
}
else
{
  CCR1=temp;
}
}
// Timer A1 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{
switch( TA0IV )
{
case  2: P1OUT &= ~BIT6;                    // P1.6 output Low
           break;
case 10:
           break;
}
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
干磨河
2019-03-24 18:05
你这样胡来,能出来也只能算你运气好碰对了,先推荐楼主回去看看信号与系统里面采样那个章节。这个滤波器的设计和你的“采样频率”,就是PWM占空比变换频率,以及你的最大输出频率有关,滤波器的截止频率要选择在二者中间,而且在一定的频程内要把把镜像频率滤掉,不同的情况对滤波器的阶数,带外衰减都有要求。根据采样定理,两个点的方波是可以滤成正弦波的,但是这样的滤波器太理想了,现实中没有,所以还得增加但周期内采样点数。楼主也可以去看看DDS的资料

[ 本帖最后由 干磨河 于 2013-8-27 22:57 编辑 ]

一周热门 更多>

相关问题

    相关文章