一种基于DAC芯片快速生成三角波/锯齿波的方法与流程

文档序号:37363006发布日期:2024-03-22 10:16阅读:13来源:国知局
一种基于DAC芯片快速生成三角波/锯齿波的方法与流程

本发明涉及dac芯片波形生成领域,具体涉及一种基于dac芯片快速生成三角波/锯齿波的方法。


背景技术:

1、dac(数字模拟转换器)芯片能够被用于生成三角波、锯齿波,在使用dac芯片生成固定频率、固定电压范围的高精度三角波时,dac芯片连接控制器(如单片机、fpga),先由控制器计算出每次步进的数字增量△e并根据△e计算出dac芯片每次步进时所需的实时数字量,将该实时数字量发送到dac中,由dac转换为模拟量(电压值)输出,dac循环步进,当步进次数达到最大步进次数时,结束,此时电压值达到/接近三角波、锯齿波的峰值电压,完成波形的生成。

2、实际应用时,经常出现计算得出的数字增量△e为浮点数或者生成三角波所需的总步进次数s与dac芯片的自身的步进量2n(n为dac芯片的位数)不匹配的情况。此时,控制器在计算实时数字量时需要进行浮点数计算,例如:△e=2.3、起始数字量e1=0;则第一次步进时的实时数字量e'1=floor(2.3)=2、第二次步进的实时数字量e'2=floor(2+2.3)=4,第三次步进时的实时数字量e'3=floor(4+2.3)=6……即:控制器每次均需要先进行浮点数计算,再进行向下取整运算;这样的浮点数计算方式,存在计算速度慢、效率低的问题,影响了三角波/锯齿波的波形生成速度。

3、现有方法是将三角波/锯齿波的每一个步进时的实时数字量e'i都提前计算存储起来,这种方法虽然能够加快三角波的生成,但是,当步进次数较多时,该过程会增加很多的内存消耗,比如步进1000次,就需要存储1000个实时数字量e'i;并且,该方法的灵活性差,一旦三角波/锯齿波的波形需要改变,就需要重新存储新波形对应的实时数字量e'i,不利于新波形的快速生成。


技术实现思路

1、为了解决上述技术问题,本发明提供一种基于dac芯片快速生成三角波/锯齿波的方法,本方法无需引入浮点数运算或大数据存储,具有易于实施、快速、准确的特点,适用于各类型高精度三角波、锯齿波的实时、快速生成。

2、技术方案如下:

3、一种基于dac芯片快速生成三角波/锯齿波的方法,所述dac芯片受控于控制器,所述控制器内存储有:dac芯片的位数n、能够输出的最大电压值u、每次步进的时间间隔△t;待生成波形上升沿/下降沿的起始电压值u1、结束电压值u2、电压值从u1到达u2的时间t;

4、所述控制器将u1转换为起始数字量e1、将u2、u1的差值转换为总数字量e,并计算出:dac芯片从起始电压值u1到结束电压值u2所需的总步进次数

5、计算每次步进的数字增量若e能够被s整除,则补偿间隔m和补偿值g为空,直接进行步骤二;否则,进行步骤一;

6、步骤一:将△e的数值取整,取整方式为四舍五入取整、向下取整或向上取整;

7、若s>2n或者△e=0:则将△t的值记为初始定值t1,令△t=t1×k,计算新的总步进次数并基于当前s值重新计算△e且对其进行取整,若s<2n且△e≠0,则利用当前△t、△e和s值进行步骤a;否则,将当前k值自增一,再令△t=t1×k,计算新的总步进次数并基于当前s值重新计算△e并进行取整,直到s<2n且δe≠0;

8、否则直接进行步骤a;

9、所述步骤a为:

10、判断△e×s与e之间的大小关系:

11、若△e×s<e,则补偿值g取值为(0,|△e|]之间的一个正整数;

12、当δe>0时,执行步骤b;

13、所述步骤b为:计算补偿间隔其中,ceil表示向上取整,floor表示向下取整;

14、当δe<0时,执行步骤c;

15、所述步骤c为:计算补偿间隔其中,

16、若δe×s>e,则补偿值g取值为[-|δe|,0)之间的一个负整数;

17、当δe>0时,执行步骤c;

18、当δe<0时,执行步骤b;

19、步骤二、控制器将起始数字量e1发送到dac芯片,dac芯片将其转换为起始电压值u1,从起始电压值u1开始,dac芯片按照δt等时间间隔步进,控制器按照以下方式计算出第i次步进时的实时数字量e'i,并将其发送到dac芯片:

20、e’i=e’i-1+δe,若m和g不为空,则每间隔时间m×δt,令已经计算出的e’i加上补偿值g;其中,i=1,2,3……s,e’i-1表示上一次的实时数字量,当i=1时,e’i-1的取值为起始数字量e1;

21、dac芯片将接收到的e'i转换为电压值输出,当步进次数达到s后,停止步进,完成波形上升沿/下降沿的生成。

22、为了获取最小的补偿误差,优选,步骤a中,若|δe|大于1;

23、若δe×s<e,则补偿值g分别等于(0,|δe|]之间的每一个正整数,并且,g每次等于一个正整数,均计算补偿间隔m以及补偿总量再计算补偿总量h与|δe×s-e|之间的差值绝对值δh;

24、将δh最小时对应的补偿值g、补偿间隔m存储,删除其他的补偿值g、补偿间隔m;

25、若δe×s>e,则补偿值g分别等于[-|△e|,0)之间的每一个负整数,并且,g每次等于一个负整数,均计算补偿间隔m以及补偿总量再计算补偿总量h与|δe×s-e|之间的差值绝对值δh;

26、将δh最小时对应的补偿值g、补偿间隔m存储,删除其他的补偿值g、补偿间隔m。

27、进一步,若差值δh最小时对应的补偿值g、补偿间隔m有多组,则将g值最小的一组存储;

28、当出现δh=0的情况时,直接存储该情况对应的补偿值g、补偿间隔m,删除其他的补偿值g、补偿间隔m,结束,无需再令g取其他数值。

29、为了更进一步减少补偿误差,优选,若s>2n或者δe=0:则将δt的值记为初始定值t1,令δt=t1×k,计算新的总步进次数并基于当前s值重新计算δe且对其进行取整,若s<2n且δe≠0:

30、则利用当前δt、δe和s值进行步骤a,基于步骤a得出补偿值g、补偿间隔m,并获取补偿总量再计算补偿总量h与|δe×s-2n|之间的差值绝对值△h;若δh小于预设阈值,则存储补偿值g、补偿间隔m;否则,将当前k值自增一,令δt=t1×k,计算新的并基于当前s值重新计算δe且对其进行取整,利用当前δt、δe和s值再次进行步骤a,得出补偿值g、补偿间隔m,并获取补偿总量再计算补偿总量h与|δe×s-2n|之间的差值绝对值δh;直到δh小于预设阈值;

31、否则,将当前k值自增一,再令δt=t1×k,计算新的总步进次数并基于当前s值重新计算△e且对其进行取整,直到s<2n且△e≠0。

32、进一步,若波形中包含多个相同的上升沿/下降沿,当第一个上升沿/下降沿生成完毕,再生成其他上升沿/下降沿时,控制器直接利用已经存储的信息进行步骤二,计算实时数字量e'i并将其发送到dac芯片,dac芯片将每次步进时接收到的e'i转换为电压值输出,完成其他上升沿/下降沿的生成;

33、若波形中包含多个不相同的上升沿/下降沿,则对不相同的上升沿/下降沿分别处理;

34、若波形中包含对称的上升沿和下降沿,则生成其中一半上升沿/下降沿后,再生成另一半时,控制器将u2转换为起始数字量,将△e和g的值取反,再直接进行步骤二,计算实时数字量e'i并将其发送到dac芯片,dac芯片将每次步进时接收到的e'i转换为电压值输出,完成另一半上升沿/下降沿的生成。

35、进一步,所述控制器将u1转换为起始数字量e1的方式为:

36、计算并对结果进行取整运算,令取整后的数值等于起始数字量e1,其中,取整方式为四舍五入取整、向下取整或向上取整;

37、将u2、u1的差值转换为总数字量e的方式为:

38、计算并对结果进行取整运算,令取整后的数值等于总数字量e,该取整方式与计算起始数字量e1时的取整方式相同。

39、本发明系统及方法具有以下特点:

40、本方法控制器将步进的数字量取整,dac每次步进时,控制器无需进行浮点数运算而是采用整数数字增量计算实时数字量,计算效率高,加快了三角波/锯齿波的生成速度;在步进的过程中设置了补偿间隔m和补偿值g,对步进时的累计误差进行了有效的补偿,使得三角波/锯齿波的波形形貌(斜率和幅值)接近于预设波形形貌,保障了三角波/锯齿波的生成精度。

41、本方法既能够保障三角波/锯齿波的生成精度,又能够提升生成速度,具有易于实施、快速、准确的特点,适用于各类型高精度三角波、锯齿波的快速生成。

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