正弦波生成方法及装置与流程

文档序号:18690125发布日期:2019-09-17 20:29阅读:976来源:国知局
正弦波生成方法及装置与流程

本发明涉及波形发生领域,特别是涉及一种正弦波生成方法及装置。



背景技术:

通常情况下,工频正弦波的信号发生都是使用专用的FPGA芯片,随着芯片技术的快速发展,芯片的资源越来越丰富,通过单个微控制单元实现正弦波的发生成为可能。

正弦波的发生,通常是将一个y=sin(ωt+θ)函数进行N点离散化,再将离散化后的N点数字量输出到数模转换器,将数字信号转换为模拟信号,实现正弦波信号的生成。数模转换器的位数越多,生成的正弦波越接近理想信号,一个16位的数模转换器支持N=216=65536点波形的离散化。这样的正弦波生成方法,对于使用FPGA芯片来说没有问题。但是,对于使用单个微控制单元来实现则充满了挑战。

具体来说,当我们需要实现一个频率为50Hz,离散化数量N为10000点以上的正弦波合成输出时,假设离散化数量N为10000点,合成一个频率为50Hz的正弦波,则要求微控制单元处理频率为500kHz,每个离散点的处理速度为2uS;如果要求20000点合成输出,则每个离散点的处理速度为1uS;如果要求更高的点数合成,则速度要求更高。

因此,仅仅通过微控制单元的定时器中断软件设置SPI的片选,来实现大量离散点的合成输出已经是不可能实现了。



技术实现要素:

基于此,有必要针对仅仅通过微控制单元的定时器中断软件设置SPI的片选,不可能实现大量离散点的合成输出问题,提供一种正弦波生成方法及装置。

一种正弦波生成方法,包括:

根据预设的离散点数量和数字信号频率,计算任意相邻两个离散点之间的时间间隔并将所述时间间隔设置为微控制单元的定时器计数值;

根据所述定时器计数值,每个时间间隔产生一个对应的DMA请求,将对应离散点的数据传输到微控制单元的SPI数据寄存器;

将所述SPI数据寄存器中离散的波形数据传输到与SPI接口相连的外部数模转换器,生成连续的波形数据;

当传输到SPI数据寄存器的离散点数据的数量达到预设的离散点数量时,生成相应正弦波并产生DMA中断请求。

在其中一个实施例中,所述根据所述定时器计数值,每个时间间隔产生一个对应的DMA请求,将对应离散点的数据传输到微控制单元的SPI数据寄存器的步骤包括:

根据所述定时器计数值,每个时间间隔产生一个对应的DMA请求以及SPI片选信号;

根据所述SPI片选信号,控制微控制单元的SPI数据寄存器的选通;

根据所述DMA请求,将对应离散点的数据传输至所述SPI数据寄存器。

在其中一个实施例中,所述将所述SPI数据寄存器中离散的波形数据传输到与SPI接口相连的外部数模转换器,生成连续的波形数据的步骤包括:

当所述对应离散点的数据传输至所述SPI数据寄存器完成后,产生SPI激活请求;

根据所述SPI激活请求,激活SPI数据寄存器产生SPI时钟信号;

根据所述SPI时钟信号,将所述SPI数据寄存器中离散的数据传输到与SPI接口相连的外部数模转换器;

数模转换器将所述离散的波形数据转换为连续的波形数据。

在其中一个实施例中,所述当传输到SPI数据寄存器的离散点数据的数量达到预设的离散点数量时,生成相应正弦波并产生DMA中断请求的步骤之后,还包括:根据所述DMA中断请求,若待生成的正弦波信号频率发生改变,则根据改变后的正弦波信号频率,调整定时器计数值。

在其中一个实施例中,所述任意相邻两个离散点之间的时间间隔的计算公式为:

其中,t表示任意相邻两个离散点之间的时间间隔,f表示待生成的正弦波信号的频率,N表示离散点数量。

在其中一个实施例中,所述DMA中断请求可以为一个正弦波周期信号,用于对正弦波信号的频率进行跟踪。

一种正弦波生成装置,包括微控制单元和数模转换器,所述微控制单元通过SPI接口与所述数模转换器连接,所述微控制单元包括定时器、DMA控制器以及SPI数据寄存器;

所述定时器的计数值被配置为根据预设的离散点数量和数字信号频率计算得到的数值;

所述DMA控制器被配置为接收DMA请求以将离散波形数据传输到SPI数据寄存器中,并在数据传输完成后产生SPI激活请求,在数据传输达到一个周期时产生DMA中断请求;

所述SPI数据寄存器被配置为保存离散波形数据并响应DMA控制器产生的SPI激活请求,输出SPI时钟信号,根据所述SPI时钟信号将离散波形数据发送到数模转换器;

所述数模转换器用于将离散波形数据生成相应连续波形。

在其中一个实施例中,所述根据预设的离散点数量和数字信号频率计算得到的数值为待生成正弦波任意两个相邻离散点的时间间隔。

在其中一个实施例中,所述定时器还用于根据所述计数值,每个时间间隔产生一个对应的DMA请求。

在其中一个实施例中,所述数模转换器可以是16位数模转换器。

上述正弦波生成方法及装置,通过利用单个微控制单元的DMA控制器、定时器以及SPI数据寄存器资源,靠硬件设置SPI片选,可以实现大量离散点波形的合成输出,解决了仅通过微控制单元的定时器中断,最多支持离散点数量为1000,中断间隔为20uS的正弦波的生成,不能实现大量离散点的合成输出的问题。

特别的,通过设置数模转换器为16位数模转换器,可以实现最多65536点波形的离散化。不仅能够实现正弦波的高速生成,而且结构简单,功效媲美专用FPGA。

附图说明

图1为一个实施例中正弦波生成方法流程图;

图2为另一个实施例中正弦波生成方法流程图;

图3为又一个实施例中正弦波生成方法流程图;

图4为再一个实施例中正弦波生成方法流程图;

图5为一个实施例中正弦波发生装置模块图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,在一个实施例中,提供了一种正弦波生成方法的流程图,该方法包括:

S100:根据预设的离散点数量和数字信号频率,计算任意相邻两个离散点之间的时间间隔并将所述时间间隔设置为微控制单元的定时器计数值。

其中,正弦波的发生,通常是将一个y=sin(ωt+θ)函数进行N点离散化,再将离散化后的N点数字量输出到数模转换器,将数字信号转换为模拟信号,实现正弦波信号的生成。假设待生成的正弦波信号频率为f,离散点数量为N,此时,任意相邻两个离散点之间的时间间隔t的计算公式为

上述时间间隔t可对应于微控制单元的定时器的某个计数值,定时器能够根据所设置的计数值计数得到该时间间隔。

S110:根据所述定时器计数值,每个时间间隔产生一个对应的DMA请求,将对应离散点的数据传输到微控制单元的SPI数据寄存器。

其中,定时器的计数值即为任意两个相邻离散点之间的时间间隔,根据所述时间间隔,每个时间间隔产生一个对应的DMA请求,该DMA请求作用于微控制单元的DMA控制器。DMA控制器在收到DMA请求后执行数据传输功能,将对应离散点的数据传输到微控制单元的SPI数据寄存器。

S120:将所述SPI数据寄存器中离散的波形数据传输到与SPI接口相连的外部数模转换器,生成连续的波形数据。

其中,当DMA控制器响应DMA请求执行数据传输功能,将对应的离散点的数据传输到微控制单元的SPI数据寄存器后,激活SPI设备输出离散的波形数据到外部数模转换器,通过数模转换,将数字信号转换为模拟信号,生成相应的连续波形数据。

S130:当传输到SPI数据寄存器的离散点数据的数量达到预设的离散点数量时,生成相应正弦波并产生DMA中断请求。

其中,当数据传输达到一个周期后,数模转换器根据每个DMA请求接收到的离散波形数据转换得到的连续波形数据,生成一个完整的正弦波,同时,DMA控制器会产生相应的DMA中断请求,该中断请求可以为一个正弦波周期信号,用于对正弦波信号的频率进行跟踪。

如图2所示,在一个实施例中,步骤S110包括:

S112:根据所述定时器计数值,每个时间间隔产生一个对应的DMA请求以及SPI片选信号。

其中,在产生对应的DMA请求的时候,相应的生成对应的SPI片选信号,用于控制SPI数据寄存器的是否被选中,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对SPI数据寄存器的操作才有效。

S114:根据所述SPI片选信号,控制微控制单元的SPI数据寄存器的选通。

其中,根据SPI片选信号,控制微控制单元的SPI数据寄存器是否被选中,在选通后,对SPI数据寄存器进行数据传输操作。

S116:根据所述DMA请求,将对应离散点的数据传输至所述SPI数据寄存器。

其中,根据DMA请求,将数据传输到选通的SPI数据寄存器。

如图3所示,在一个实施例中,步骤S120包括:

S122:当所述对应离散点的数据传输至所述SPI数据寄存器完成后,产生SPI激活请求。

其中,当所述对应离散点的数据传输至所述SPI数据寄存器完成后,产生SPI激活请求,该SPI激活请求能够激活SPI数据寄存器产生相应的SPI时钟信号,用于进行相应的数据通信。

S124:根据所述SPI激活请求,激活SPI数据寄存器产生SPI时钟信号。

其中,由于SPI是串行通讯协议,也就是说数据是一位一位的传输的,因此,需要根据所述SPI激活请求,产生SPI时钟信号,用于SPI数据寄存器与外部数模转换器之间的数据交换。

S126:根据所述SPI时钟信号,将所述SPI数据寄存器中离散的数据传输到与SPI接口相连的外部数模转换器。

其中,根据所述时钟信号,数据输入与数据输出则基于此时钟脉冲完成数据传输。数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。

S128:数模转换器将所述离散的波形数据转换为连续的波形数据。

其中,数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟量的器件。通过数模转换器,可以将离散的波形数据转换成连续的波形数据。

如图4所示,在一个实施例中,图1所示一种正弦波生成方法还包括步骤:

S140:根据所述DMA中断请求,若待生成的正弦波信号频率发生改变,则根据改变后的正弦波信号频率,调整定时器计数值。

其中,定时器计数值为任意相邻两个离散点之间的时间间隔,该时间间隔是通过预设的离散点数量和数字信号频率计算出来的,因此,当DMA中断请求产生时,表明已经生成了一个周期的完整正弦波,当下一个周期需要生成另一个频率不同的正弦波时,则需要根据新的正弦波频率,重新计算定时器计数值,从而实现所生成正弦波随预设数据的变化而做出相应的变化。

如图5所示,在一个实施例中,提供了一种正弦波生成装置,该装置包括:微控制单元10和数模转换器20,微控制单元10通过SPI接口与数模转换器20相连接。

其中,微控制单元10包括定时器100、DMA控制器200以及SPI数据寄存器300。定时器100的计数值被配置为根据预设的离散点数量和数字信号频率计算得到的数值,该数值为任意相邻两个离散点之间的时间间隔;DMA控制器200被配置为接收DMA请求以将离散波形数据传输到SPI数据寄存器中,并在数据传输完成后产生SPI激活请求,在数据传输达到一个周期时产生DMA中断请求;SPI数据寄存器300被配置为保存离散波形数据并响应DMA控制器产生的SPI激活请求,输出SPI时钟信号,根据所述SPI时钟信号将离散波形数据发送到数模转换器;数模转换器20用于将离散波形数据生成相应正弦波。

在一个实施例中,定时器100还用于根据计数值,每个时间间隔产生一个对应的DMA请求。DMA控制器200可响应该请求,完成数据传输功能。

在一个实施例中,数模转换器20可以是16位数模转换器。数模转换器20的位数越多,生成的正弦波越接近理想信号,一个16位的数模转换器最多支持N=216=65536点波形的离散化。

上述正弦波生成方法和装置上述正弦波生成方法及装置,通过利用单个微控制单元的DMA控制器、定时器以及SPI数据寄存器资源,通过设置数模转换器为16位数模转换器,靠硬件设置SPI片选,可以实现最多65536点波形的离散化,解决了仅通过微控制单元的定时器中断,最多支持离散点数量为1000,中断间隔为20uS的正弦波的生成,不能实现大量离散点的合成输出的问题。上述正弦波生成方法及装置,不仅实现了正弦波的高速生成,而且结构简单,功效媲美专用FPGA。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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