⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 52pwm.txt

📁 pwm调速不错啊我调的成功通过
💻 TXT
字号:
89C52 PWM输出程序

#include <reg52.h> //Keil header file name
#include "use.h"
#include "Ver.h"

//extern void LedOut(unsigned char *pLed);
#define Pmax 55000 //55000 //42666(18.4320)
#define Ki 2.2     //i=2

//----------------------------
sbit PwinPin=P3^5;
//----------------------------

typedef union 
{
  unsigned int Pwm;   //pwm的数据
  unsigned char PwmUse[2]; //[0]=H;[1]=L
}PWM;

//----------------------------
PWM     PwmData;
unsigned int PwmBak;
//----------------------------
unsigned char PwmF=0;   //输出的1,0的标志
/*****************************************
PWM计算,输出
t0=T50ms(b0/[fs-fo]+Sgn(U)*20%+a1
;T50ms=Pwm50+Ah
;B0<fo=>0V;Must Bo In(Fo-Fs)
*******************************************/
void PwmOut(void)
{
  float Pwm,i,k,j;
  k=Pmax+(Mp1.AH+OminH)*Ki;
  i=(PminL+Mp1.AL)*Ki;

//----------------------------
//LedOut(LedBuf);     //LED显示输出
//----------------------------
  j=(LedMenu.B-Mp1.Fo)/(Mp1.Fs-Mp1.Fo);
  if(j<0) j=0;
  if(j>1) j=1;
  Pwm=j*k; //Bo/(Fs-Fo)*Pk
  j=Pwm*0.8+k*0.2+i; //先计算
  if(Mp1.U==1) {Pwm=j;}
  else Pwm=Pwm+i;
  TR0=0;
  PwmBak=(unsigned int)Pwm; //更新数据
  TR0=1;
}
//-------------------------------
void Init_Pwm(void)
{
  PwmData.Pwm=0;
  PwmPin=0;       //输出0 (地点平)
// PwmOut();
}
//定时器0 中断处理 pwmout()
void T0_Do(void) interrupt 1{
  TR0=0;
  if(PwmF==0) //输出高电平
  {
    PwmData.Pwm=-PwmBak;
    TH0=PwmData.PwmUse[0];
    TL0=PwmData.PwmUse[1];
    PwmPin=1;       //0 输出
    PwmF=1;
  }else{
    PwmData.Pwm=-PwmData.Pwm;
    TH0=PwmData.PwmUse[0];
    TL0=PwmData.PwmUse[1];   
    PwmPin=0;       //1 输出
    PwmF=0;
  }
  TR0=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -