pi和pwm电源芯片区别
PWM:(pulse width modulation)脉冲宽度调制
脉宽调制PWM是开关型稳压电源中的术语 。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型 。脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的 。
PFM:(Pulse frequency modulation) 脉冲频率调制
一种脉冲调制技术 , 调制信号的频率随输入信号幅值而变化,其占空比不变 。由于调制信号通常为频率变化的方波信号,因此,PFM也叫做方波FM 。
PWM是频率的宽和窄的变化,PFM是频率的有和无的变化,PWM是利用波脉冲宽度控制输出,PFM是利用脉冲的有无控制输出 。
其中PWM是目前应用在开关电源中zui为广泛的一种控制方式,它的特点是噪音低、满负载时效率高且能工作在连续导电模式,现在市场上有多款性能好、价格低的PWM集成芯片,如UCl842/2842/3842、TDAl6846、TL494、SGl525/2525/3525等;PFM具有静态功耗小的优点,但它没有限流的功能也不能工作于连续导电方式,具有PFM功能的集成芯片有MAX641、TL497等;PWM-PFM兼有PWM和PFM的优点 。
PFM相比较PWM主要优点在于效率
1、对于外围电路一样的PFM和PWM而言,其峰值效率PFM与PWM相当 , 但在峰值效率以前,PFM的效率远远高于PWM的效率,这是PFM的主要优势.
2、PWM由于误差放大器的影响 , 回路增益及响应速度受到限制,PFM具有较快的响应速度
//Rational.h
#ifndef RATIONAl_CLASS
#define RATIONAl_CLASS
class Rational
{
private:
int P,Q;
void Standardize();//将有理数化为标准形式
int gcd (int m,int n);//求两个数的最大公约数
public:
Rational (int p=0, int q=1);//构造有理数分数,分子默认为0,分母默认为1
Rational (Rational &r);//拷贝构造函数
Rational (double ra);//构造函数 , 将实数转换为标准形式的有理数
virtual ~Rational (void);//虚析构函数
void Reduce ();//将分数化为最简形式
int GetNumerator();//取分数的分子
int GetDenominator();//取分数的分母
Rational& operator= (Rational& r); //将一个有理数对象赋值给另一个对象
Rational& operator= (double ra);//将一个实数赋值给一个有理数对象
Rational operator- ();//将一个有理数取反
friend double Float(Rational &r);//强制转换一个有理数对象为一个实数
//以下为两个有理数对象、一个有理数对象和一个实数、一个实数和一个有理数对象
//之间的关系运算符的重载
int operator== (Rational& r) const;
int operator== (double ra) const;
friend int operator== (double ra, Rational& r);
int operator!= (Rational& r) const;
int operator!= (double ra) const;
friend int operator!= (double ra, Rational& r);
int operator< (Rational& r) const;
int operator< (double ra) const;
friend int operator< (double ra, Rational& r);
int operator<= (Rational& r) const;
int operator<= (double ra) const;
friend int operator<= (double ra, Rational& r);
int operator> (Rational& r) const;
int operator> (double ra) const;
friend int operator> (double ra, Rational& r);
int operator>= (Rational& r) const;
int operator>= (double ra) const;
friend int operator>= (double ra, Rational& r);
//以下两个有理数对象、一个有理数对象和一个实数
//之间的普通四则运算的重载
Rational operator(Rational& r) const;
Rational operator(double ra) const;
void operator = (Rational& r);
void operator = (double ra);
Rational operator- (Rational& r) const;
Rational operator- (double ra) const;
void operator-= (Rational& r);
void operator-= (double ra);
Rational operator* (Rational& r) const;
Rational operator* (double ra) const;
void operator*= (Rational& r);
void operator*= (double ra);
Rational operator/ (Rational& r) const;
Rational operator/ (double ra) const;
void operator/= (Rational& r);
void operator/= (double ra);
//输入输出流的重载 , 输出为最简形式
friend ostream &operator<<(ostream &output,Rational &obj);
friend istream &operator>>(istream &input,Rational &obj);
int Iegal(void) const;//判断有理数对象的值是否合法
};
//一个实数和一个有理数对象之间的四则运算重载
Rational operator(double ra, Rational& r);
Rational operator- (double ra, Rational& r);
Rational operator* (double ra, Rational& r);
Rational operator/ (double ra, Rational& r);
void PrintMixedNumber(Rational X);//将一个有理数对象转换为带分数形式
Rational SolveEquation(Rational a,Rational b,Rational c);//求解一般的分数方程
#endif
二、函数实现部分:
//Rational.cpp
#include
using namespace std;
#include "Rational.h"
void Rational::Standardize ()//将有理数化为标准形式
{
if(Q == 0)
{
cout<<"Error!"<
}
else
if(Q < 0)
{
P= -P;
Q= -Q;
}
}
int Rational::gcd (int m,int n)//求两个数的最大公约数
{
int i,t;
if(m==0 || n==0)
{
cout<<"Error!"<
}
if(n>m || n<-m)
{
t=n;
n=m;
m=t;
}
i=m%n;
if(i!=0)
do
{
m=n;
n=i;
i=m%n;
}while(m%n!=0);
return ((n>0)? n : -n);
}
Rational::Rational (int p, int q)//构造有理数分数,分子默认为0,分母默认为1
{
P=p;
Q=q;
Standardize();
}
Rational::Rational (Rational& r)//拷贝构造函数
{
P=r.P;
Q=r.Q;
Standardize();
}
Rational::Rational (double ra)//构造函数 , 将实数转换为标准形式的有理数
{
int base=1;
while(ra-(int)ra !=0)
{
ra=ra*10;
base=base*10;
}
P=ra;
Q=base;
}
Rational::~Rational (void)//虚析构函数
{}
void Rational::Reduce ()//将分数化为最简形式
{
int max=gcd(P,Q);
P= P/max;
Q= Q/max;
}
int Rational::GetNumerator()//取分数的分子
{
return P;
}
int Rational::GetDenominator()//取分数的分母
{
return Q;
}
Rational& Rational::operator= (Rational& r)//将一个有理数对象赋值给另一个对象
{
P=r.GetNumerator();
Q=r.GetDenominator();
return *this;
}
Rational& Rational::operator= (double ra)//将一个实数赋值给一个有理数对象
{
Rational temp(ra);
*this=temp;
return *this;
}
Rational Rational::operator- ()//将一个有理数取反
{
Rational temp(-GetNumerator(),GetDenominator());
return temp;
}
double Float(Rational &r)//强制转换一个有理数对象为一个实数
{
return (1.0*r.GetNumerator()/r.GetDenominator());
}
//以下为两个有理数对象、一个有理数对象和一个实数、一个实数和一个有理数对象
//之间的关系运算符的重载
int Rational::operator== (Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q==r_p*Q);
}
int Rational::operator== (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q==temp_p*Q);
}
int operator== (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p==temp_p);
}
int Rational::operator!= (Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return !(P*r_q==r_p*Q);
}
int Rational::operator!= (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
【pi和pwm电源芯片区别】 return !(P*temp_q==temp_p*Q);
}
int operator!= (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return !(r_p==temp_p);
}
int Rational::operator< (Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q
int Rational::operator< (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q}
int operator< (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p}
int Rational::operator<= (Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q<=r_p*Q);
}
int Rational::operator<= (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q<=temp_p*Q);
}
int operator<= (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p<=temp_p);
}
int Rational::operator> (Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q>r_p*Q);
}
int Rational::operator> (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q>temp_p*Q);
}
int operator> (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p>temp_p);
}
int Rational::operator>= (Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q>=r_p*Q);
}
int Rational::operator>= (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q>=temp_p*Q);
}
int operator>= (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p>=temp_p);
}
//以下为两个有理数对象、一个有理数对象和一个实数
//之间的普通四则运算的重载
Rational Rational::operator(Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(P*r_q r_p*Q,Q*r_q);
return obj;
}
Rational Rational::operator(double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_q temp_p*Q,Q*temp_q);
return obj;
}
void Rational::operator = (Rational& r)
{
P=P r.GetNumerator();
Q=Q r.GetDenominator();
}
void Rational::operator = (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_q temp_p*Q;
Q=temp_q*Q;
}
Rational Rational::operator- (Rational& r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(P*r_q-r_p*Q,Q*r_q);
return obj;
}
Rational Rational::operator- (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_q-temp_p*Q,Q*temp_q);
return obj;
}
void Rational::operator-= (Rational& r)
{
P=P-r.GetNumerator();
Q=Q-r.GetDenominator();
}
void Rational::operator-= (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_q-temp_p*Q;
Q=temp_q*Q;
}
Rational Rational::operator* (Rational& r) const
{
Rational temp(P*r.GetNumerator(), Q*r.GetDenominator());
return temp;
}
Rational Rational::operator* (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_p,Q*temp_q);
return obj;
}
void Rational::operator*= (Rational& r)
{
P=P*r.GetNumerator();
Q=Q*r.GetDenominator();
}
void Rational::operator*= (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_p;
Q=temp_q*Q;
}
Rational Rational::operator/ (Rational& r) const
{
Rational temp(P*r.GetDenominator(),Q*r.GetNumerator());
return temp;
}
Rational Rational::operator/ (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_q,Q*temp_p);
return obj;
}
void Rational::operator/= (Rational& r)
{
P=P*r.GetDenominator();
Q=Q*r.GetNumerator();
}
void Rational::operator/= (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_q;
Q=temp_p*Q;
}
//输入输出流的重载,输出为最简形式
ostream& operator<<(ostream &output,Rational &obj)
{
obj.Reduce();
output<
}
istream& operator>>(istream &input,Rational &obj)
{
int num,den;
char oper;
input>>num;
input>>oper;
input>>den;
Rational temp(num,den);
obj=temp;
return input;
}
int Rational::Iegal(void) const//判断有理数对象的值是否合法
{
if(Q==0)
return 0;
else
return 1;
}
//一个实数和一个有理数对象之间的四则运算重载
Rational operator(double ra, Rational& r)
{
Rational temp(ra);
temp=temp r;
return temp;
}
Rational operator- (double ra, Rational& r)
{
Rational temp(ra);
temp=temp-r;
return temp;
}
Rational operator* (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(temp_p*r_p,r_q*temp_q);
return obj;
}
Rational operator/ (double ra, Rational& r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(temp_p*r_q,r_p*temp_q);
return obj;
}
void PrintMixedNumber(Rational X)//将一个有理数对象转换为带分数形式
{
int t;
X.Reduce();
t=X.GetNumerator()/X.GetDenominator();
cout<}
Rational SolveEquation(Rational a,Rational b,Rational c)//求解一般的分数方程
{
Rational temp;
if(a.GetNumerator()==0)
{
cout<<"Error!"<
}
temp=(c-b)/a;
temp.Reduce();
return temp;
}
三、主函数(测试部分):
#include
using namespace std;
#include "Rational.h"
void main()
{
Rational A(-4,-8),C,D;
Rational B(10.05);
Rational E(B);
cout<<"Please input C: ";
cin>>C;
D=43.9;
cout<<"A = "< cout<<"B = "<
cout<<"E = "<
cout<<"A*=1.5 = "< cout<<"float(A) = "<
PrintMixedNumber(E);
Rational X;
cout<<"A*X B=C 解得: ";
X=SolveEquation(A,C,E);
cout<<"X = "<
推荐阅读
- 降龙伏虎是什么意思?降龙伏虎成语造句和典故
- 淘宝小类目和大类目是什么意思
- 做投标标书时 有的写的是投标文件 有的写的是响应性谈判文件 投标 投标文件和标书的区别
- 福特猛禽在国内和国外的价格为何不同?
- 马自达2.0发动机优点和缺点
- 永和总站-保税区总站(酒博城) 万科里享家 516路线路信息,首末班车时间,运行线路图,站点信息以及换乘指南-广州公交-广州地图
- 领航S1和解放霸铃哪个好
- 满族习俗是东北名俗文化吗
- 军人肩上的"杠"和"星"是什么意思?
- TitanHQ和Pax8宣布新的合作伙伴关系
