打印
[技术问答]

测频率来调整单片机的PWM输出求检查

[复制链接]
600|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
帅的一|  楼主 | 2019-8-8 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
uint jici=0,pinlv=0,count=0,jishu=0;

void delay(uint xms);
void dis();
void Timer0_ISR(void)interrupt 1
{
                jici++;
                TH0=1536/256;
                TL0=1536%256;
        if(jici==25)
        {
                jishu=jici;
                TR0=TR1=0;
                count=pinlv;
                TL1=TH1=0;
                count=0;
                jici=0;
                TR0=TR1=1;
        }
}

void dis(uint num)
  {   
          if(jishu==25)
    {     
                            if (num<100)
                                        {
                                                clr_LOAD;       
                                          set_SFRPAGE;               
                                                PWM5L+=10;
                                                clr_SFRPAGE;
                                                set_LOAD;                               
                                                jishu=0;
                                        }
     }
        }

void main()
{   
      Set_All_GPIO_Quasi_Mode;
            PWM5_P03_OUTPUT_ENABLE;
            PWM4_P01_OUTPUT_ENABLE;
            PWM3_P00_OUTPUT_ENABLE;
            set_T0M;
            clr_PWMTYP;
            clr_PWMMOD0;
            clr_PWMMOD1;
            PWM_CLOCK_DIV_8;
            PWMPH = 0x07;
            PWMPL = 0xCF;
           set_SFRPAGE;
           PWM5H = 0x03;
           PWM5L = 0xe8;
           PWM4H = 0x03;
           PWM4L = 0xe8;
     PWM3H = 0x00;
           PWM3L = 0x00;
           clr_SFRPAGE;
              set_LOAD;
                                set_PWMRUN;
      P11_Input_Mode;
                        clr_PIPS1;
                        set_PIPS0;
                        Enable_BIT1_FallEdge_Trig;
                        TIMER0_MODE1_ENABLE;
                        TH0=1536/256;
                        TL0=1536%256;
                        set_EPI;
                        set_ET0;
                        set_EA;
                        set_TR0;


while(1)
{
dis(pinlv);

}
}

void PinTnterrupt(void) interrupt 7
                                        {
                                                                 if(PIF==0x02)
                                                                 {
                                                                                PIF=0;
                                                                                count++;
                                                                 }

                                        }


用管脚中断来检测外部脉冲,用定时器0来进行1S的定时。
通过检测外部频率来调整输出的PWM ,在外部脉冲频率小于100的时候PWM的占空比就会变大。
能帮我检查检查吗

使用特权

评论回复
沙发
小灵通2018| | 2019-8-8 22:37 | 只看该作者
你先实现测外部频率吧。

使用特权

评论回复
板凳
小灵通2018| | 2019-8-8 22:38 | 只看该作者
确保外部频率测量准确,然后实现一个PWM,然后通过测的频率变换成需要的参数赋值给PWM。

使用特权

评论回复
地板
xuanhuanzi| | 2019-8-14 23:40 | 只看该作者
要先脱离底层,实现你这个功能,然后晚上底层代码。

使用特权

评论回复
5
dongnanxibei| | 2019-8-15 00:05 | 只看该作者
先写个频率调整PWM的,然后实现频率检测的,和PWM调整的

使用特权

评论回复
6
wahahaheihei| | 2019-8-15 16:03 | 只看该作者
楼上说的对,程序要分模块,这样看的明白。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

0

粉丝