这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 用PIC单片机的硬件PWM单元产生的正弦波效果还不错哦!

共8条 1/1 1 跳转至

用PIC单片机的硬件PWM单元产生的正弦波效果还不错哦!

工程师
2021-07-06 23:12:44     打赏

用PIC单片机的PWM生产一个频率和幅值可调的正弦波,先看效果~

image.png


主要源码如下:

#include "Head.h"

void main (void)

{

     OSCCON=0b11110000;  

     TRISD=0;       

     PORTD=0;   

     TRISC=0b10000000;

     OPTION_REG=0b10001000; 

     INTCON=0b11100000;   

     PIE1=0b00100000;//开串口中断

     CCP1CON=0b00001100;

     PR2=255;

     T2CON=0b00000100;//  最大脉冲宽度 4*(255+1)=1024

     TXSTA=0b00100100;     //SYNC=0;BRGH=1;

     RCSTA=0b10010000;

     BAUDCON=0b00001000;   //BRG16=1;

     SPBRGH=0;

     SPBRG=207;            //FOSC/[4(n+1)] (32000000/38400)/4-1=207  


     while(1)

     {

      Send();

     }   

}


//定时器中断程序

void interrupt TMR0INT(void)//4/32*256=32us 

{

    static unsigned char a=0,b=0,c=0;

    static unsigned int pwm_duty=0;

    const unsigned int pwm_1[PI_data]={0,13,25,37,50,62,74,85,96,107,118,127,137,146,154,162,

    169,175,181,186,190,194,196,198,200,200,200,198,196,194,190,186,

    181,175,169,162,154,146,137,127,118,107,96,85,74,62,50,37,

    25,13};

    const unsigned int pwm_2[PI_data]={0,31,63,94,124,155,184,213,241,268,294,319,342,364,385,405,

    422,438,452,465,476,484,491,496,499,500,499,496,491,484,476,465,

    452,438,422,405,385,364,342,319,294,268,241,213,184,155,124,94,

    63,31};

    const unsigned int pwm_3[PI_data]={0,63,125,187,249,309,368,426,482,536,588,637,685,729,771,809,

    844,876,905,930,951,969,982,992,998,1000,998,992,982,969,951,930,

    905,876,844,809,771,729,685,637,588,536,482,426,368,309,249,187,

    125,63};

    

    if(T0IF)

    {

        T0IF=0; 

        LATD6^=1;

        if(++a==Pwm_frequency)  //1000000/(Pwm_frequency*32*50)=频率HZ  1000000/(6*32*50)=104HZ

        {

          a=0;

          if(++b==PI_data)b=0;

          switch(c)

          {

             case 1:  {pwm_duty=pwm_1[b];break;}

             case 2:  {pwm_duty=pwm_2[b];break;}

             case 3:  {pwm_duty=pwm_3[b];break;}

             default: {pwm_duty=pwm_1[b];break;}  

          }  CCP1CON=(CCP1CON&0xcf)|((pwm_duty&3)<<4);CCPR1L=pwm_duty>>2;

       }

    }

    

   if(RCIF)    

   {  

      static unsigned char temp=0;  

      if(OERR==1){CREN=0;asm("nop");CREN=1;} 

      temp=RCREG;

      switch(temp)

      {

        case 'a':{Pwm_frequency++;break;}//频率加

        case 'b':{if(Pwm_frequency)Pwm_frequency--;break;}//频率减

        case 'c':{c++;if(c>3)c=1;break;}//振动幅度

      }

    }

}





关键词: 正弦波     PWM    

工程师
2021-07-06 23:24:29     打赏
2楼

波形来看,还是挺不错的嘛!


工程师
2021-07-06 23:29:23     打赏
3楼

这波形下半部分怎么是尖的?上半部分是圆滑的


专家
2021-07-07 00:02:31     打赏
4楼

感谢楼主的分享,很实用了。


工程师
2021-07-07 00:11:12     打赏
5楼

感谢楼主的分享,很实用了。


工程师
2021-07-07 08:15:55     打赏
6楼

有电路图吗?方便对比、分析、学习!


工程师
2021-07-07 22:23:28     打赏
7楼

我猜是 PWM + RC 低频滤波吧?!


工程师
2021-07-07 22:26:36     打赏
8楼

我以前在网上看到类似的,估计是这样的电路:

image.png


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]