一种PWM转模拟量低纹波输出方法与流程

文档序号:16906143发布日期:2019-02-19 18:21阅读:452来源:国知局
一种PWM转模拟量低纹波输出方法与流程

本发明涉及一种PWM转模拟量低纹波输出的方法。



背景技术:

PWM转模拟量输出即数/模转换在很多领域中会应用到。在数字化处理领域中CPU主要是数据数字逻辑0101的处理运算,但处理结果在很多应用场合又需要转换成模拟量输出指示,及作为其它设备的输入信号来源.当前大部分CPU的内部外设资源还是比较少集成直接DAC的模块,因此就需要我们通过其它方式进行转换输出处理。

PWM转换模拟量的传统方法,如图2所示的A部分,此部分算法为传统的PWM输出波形前高后低的占空比输出,为了方便描述,将DUTY_CYCLE值设为低分辨率如10点,占空比intP=3,将电容C2的充放电模型抽象为线性方式,则一个周期的输出波形及充放电曲线如图4所示。由图4可看出,这种PWM转换模拟量的传统方法,其转换方式是前高后低(或前低后高),即占空比的高低电平集中在一起,这种方式转换输出的模拟量纹波较大。



技术实现要素:

本发明的目的是为了解决传统PWM转换模拟量输出纹波大而精度较差的问题,提供一种PWM转模拟量低纹波输出的方法。

为了实现上述目的,本发明采用如下技术方案:

一种PWM转模拟量低纹波输出的方法,具体包括以下步骤:

S1:将离散性脉冲计数变量对象gintPCnt值作减去给定占空比变量intP值处理:gintPCnt=gintPCnt-intP;

S2:判断步骤S1的结果值变量gintPCnt是否小于0;

S3:若结果值变量gintPCnt小于0则结果值变量gintPCnt加上分辨率周期值DUTY_CYCLE:gintPCnt=gintPCnt+DUTY_CYCLE;且IO输出电平为高:rPIN=1;

S4:若结果值变量gintPCnt不小于0则IO输出电平为低:rPIN=0;

S5:返回输出状态rPIN。

采用本发明的技术方案后,将一个周期里的高低脉宽比均匀离散分配,但整体高低脉宽比例依然保持P:N,从而实现了PWM转模拟量低纹波输出方式,提高了输出精度。

附图说明

图1为本发明中PWM转模拟量的载体硬件电路原理图;

图2为传统PWM转模拟量方法的流程图;

图3是本发明中PWM转模拟量方法的流程图;

图4是传统方式与本发明两种方式产生纹波分析的对比图。

以下结合附图和具体实施例对本发明作进一步详述。

具体实施方式

本发明一种PWM转模拟量低纹波输出的方法,其载体硬件电路如图1所示,CPU运算处理后的引脚(PWM_OUT)信号是PWM波形,经过电阻R78和电容C2组成的阻容器件充放电滤波成为含有一定纹波的直流电压信号,通过运算放大器U5A进行电压跟随处理后,由电容C3进行杂波滤除,然后经过运算放大器U5B进行相应输出电压的放大处理,从而实现了PWM转模拟量低纹波输出方式的载体。

本发明一种PWM转模拟量低纹波输出的方法,如图3所示的B部分,具体包括以下步骤:

S1:将离散性脉冲计数变量对象gintPCnt值作减去给定占空比变量intP值处理:gintPCnt=gintPCnt-intP;

S2:判断步骤S1的结果值变量gintPCnt是否小于0;

S3:若结果值变量gintPCnt小于0则结果值变量gintPCnt加上分辨率周期值DUTY_CYCLE:gintPCnt=gintPCnt+DUTY_CYCLE;且IO输出电平为高:rPIN=1;

S4:若结果值变量gintPCnt不小于0则IO输出电平为低:rPIN=0;

S5:返回输出状态rPIN。

本发明的上述算法实现的PWM输出波形为均匀分散的占空比波,为了方便描述,将DUTY_CYCLE值设为低分辨率如10点,占空比intP=3,将电容C2的充放电模型抽象为线性方式,则一个周期的输出波形及充放电曲线如图4所示。

从图4可看出,传统方式实现输出模拟量产生的纹波如图中的指示值dA,而采用本发明实现输出模拟量产生的纹波如图中的指示值dB,dB<dA,因此,可见本发明输出模拟量纹波比较低。

传统一个占空比调配PWM输出一个周期里的高低脉宽之比为P:N,而本发明是将这高低脉宽比均匀离散分配,但整体高低脉宽比例依然保持P:N。本发明的实现方式原理分析如下:

一个周期占空比的PWM分解出高脉宽为intP,低脉宽为intN(即为"DUTY_CYCLE-intP"),函数每执行一次离散性脉冲计数变量对象gintPCnt会调整一次,以判断实现本次函数执行后的输出为高电平或低电平作为离散输出的基本单位值,实现过程由以下分步骤分析,并随意假设实例值intP=3,intN=7,DUTY_CYCLE=10。

1)"gintPCnt=gintPCnt-intP"即自减去占空比intP值,第一次调用此函数(原始gintPCnt初始值为0)处理后,此变量gintPCnt变为"-intP"。此时判断小于0则返回输出为高电平,且同时处理此变量为"gintPCnt=gintPCnt+DUTY_CYCLE=-intP+DUTY_CYCLE=intN=7"即变为低脉宽的值,本次函数调用后结速返回高电平,即高电平输出1次。

2)第二次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=7-3=4。此时判断非小于0则返回输出为低电平,然后就完成本次函数结束返回低电平,即低电平输出1次。

3)第三次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=4-3=1。此时判断非小于0则返回输出为低电平,然后就完成本次函数结束返回低电平,即低电平输出2次。

4)第四次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=1-3=-2。此时判断小于0则返回输出为高电平,且同时处理此变量为"gintPCnt=gintPCnt+DUTY_CYCLE=-2+10=8"即变为低脉宽的值,本次函数调用后结速返回高电平,即高电平输出2次。

5)第五次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=8-3=5。此时判断非小于0则返回输出为低电平,然后就完成本次函数结束返回低电平,即低电平输出3次。

6)第六次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=5-3=2。此时判断非小于0则返回输出为低电平,然后就完成本次函数结束返回低电平,即低电平输出4次。

7)第七次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=2-3=-1。此时判断小于0则返回输出为高电平,且同时处理此变量为"gintPCnt=gintPCnt+DUTY_CYCLE=-1+10=9"即变为低脉宽的值,本次函数调用后结速返回高电平,即高电平输出3次。

8)第八次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=9-3=6。此时判断非小于0则返回输出为低电平,然后就完成本次函数结束返回低电平,即低电平输出5次。

9)第九次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=6-3=3。此时判断非小于0则返回输出为低电平,然后就完成本次函数结束返回低电平,即低电平输出6次。

10)第十次调用此函数,同样处理"gintPCnt=gintPCnt-intP",本次处理后gintPCnt=gintPCnt-intP=3-3=0。此时判断非小于0则返回输出为低电平,然后就完成本次函数结束返回低电平,即低电平输出7次。

11)第十一次调用此函数,则执行动作与第1)步是同样状态了,因为再次反复执行依然是1)-10)的周期过程了。而在于1)-10)的周期中可分析出输出的高电平共为3次,低电平7次,即实现了高低脉宽比为intP:intN。且实现了这高低脉宽比均匀离散分配效果了,即实现了如图4所示的本发明PWM输出波形。

本发明的核心在于"gintPCnt=gintPCnt-intP",和小于零"gintPCnt=gintPCnt+DUTY_CYCLE"的调整,即采用了intP与intN减比较处理实现高低脉宽比例调整处理,以决定每一次函数调用后的单位输出电平,从而整体的高低脉宽输出比例一直保持着"intP:intN"关系。

以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1