DonaldH

    1. PIC单片机产生PWM波波形出问题了 14/12475 单片机 2020-04-02
      dingzy_2002 发表于 2020-4-2 12:50 1.一般PR2是设定PWM周期/频率的,正常情况下,这个是根据应用要求来确定频率范围的;不作为改动 2.单独 ...
      使用的是PIC16F677这款单片机  我采用了TMR2定时器的PWM输出,功能要求就是正占空比是100uS,然后频率可调节,从1k到3k的频率调节,然后我采用的是通过定时器1进行10ms的定时,在中断服务函数中进行处理,直接将PR2的值进行改变来实现频率的调节,在主函数中 通过操作 PSTRCONbits.STRB = 1;  T2CONbits.TMR2ON = 1; 来开启PWM输出 ,通过 PSTRCONbits.STRB = 0;  T2CONbits.TMR2ON = 0;来关闭PWM输出。 然后出现就是在输出PWM波形的时候会出现有1.3ms的持续低电平没有输出,如示波器图片所示。 //////////////////////////////////////////////////////////////////////// void TMR2_Initialize(void)///这是TMR2的初始化函数, 主频为1M {     T2CON = 0x00;          TMR2 = 0x00; //    PR2  = 0x00;     INTCONbits.PEIE = 1;     PIE1bits.TMR2IE = 0;     PIR1bits.TMR2IF = 0;          PSTRCON = 0x00;     CCP1CON = 0x0c;     CCPR1L =0x19;      } ////////////////////////////////////以下是对PR2 的操作    在定时器1 操作  10ms进一次中断服务函数 unsigned char     pr2num; unsigned char     setp_num = 1; unsigned char     PWM_FREQL = 249;    //1Khz  低频率的赋值 unsigned char     PWM_FREQH = 60;     //3.5kHZ  3521hz  高频率的赋值 void TMR1_Initialize(void) {     T1CON = 0x00;//T1时钟不分频 fosc/4   公式 65536-(X/4)     TMR1H = 0x00; //1S定时初值0     TMR1L = 0x00;          PIE1bits.TMR1IE = 1;     PIR1bits.TMR1IF = 0;     INTCONbits.PEIE = 0; //外设中断关闭 } void TMR1_ISR (void) //未使用 {     TMR1H = 0xF6;//10ms     TMR1L = 0x3C;     flag_tick_count++;          if(PWMOUT_on  == 1) //如果主函数中的PWMOUT_on =1 即开启PWM输出从1k-3.3k 变化即PR2-减后+      {               if(PWMOUT_up_dowm == 0)                {                 pr2num -= setp_num;                 if(pr2num <= PWM_FREQH)                 {                  PWMOUT_up_dowm = 1;                 }              }              else              {                 pr2num += setp_num;                 if(pr2num >= PWM_FREQL)                 {                  PWMOUT_up_dowm  = 0;                 }              }               PR2 = pr2num;         } } ////////////////////////////////////////////以下是主函数中刚才所说的PWM开启和关闭 的操作       if(pwm_start == 1)//  PWM开启时  pwm_start =1 关闭时=0         {           if(PWMOUT_on  == 0)           {                  PWMOUT_on   = 1;              TMR2 = 0;              pr2num= PWM_FREQL;              PSTRCONbits.STRB = 1;              T2CONbits.TMR2ON = 1;            }         }         else         {           if(PWMOUT_on   == 1)           {                 PWMOUT_on  = 0;             TMR2 = 0;             pr2num= PWM_FREQL;       这里是将PR2赋初值 停止输出就会赋              PSTRCONbits.STRB = 0;             T2CONbits.TMR2ON = 0;           }         }
    2. PIC单片机产生PWM波波形出问题了 14/12475 单片机 2020-04-01
      dingzy_2002 发表于 2018-11-6 11:36 给个我的例程(基于PIC12F615): 1.初始化部分: //PWM: CCP1CON = 0x0C; //普 ...
      直接改PR2寄存器不行吗  如果停止PWM输出 在赋初值给PR2 为啥再开pwm输出 是按照停止时的频率

最近访客

现在还没有访客

< 1/0 >

统计信息

已有--人来访过

  • 芯积分:2
  • 好友:--
  • 主题:--
  • 回复:2

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言