module DDS(Clk,out,MOSI,nSS,Sck)
inputClk
output MOSI,nSS,Sck
output [9:0] out
wire Clk
wire [9:0] q
reg [7:0] address
reg Clk_1M,En
reg [2:0] Cnt_R0
reg [3:0] Cnt_R1
rom u0(.address(address),.clock(Clk),.q(q))
TLC5615 u1(.Clk(Clk),.Clk_1M(Clk_1M),.En(En),.MOSI(MOSI),.nSS(nSS),.Sck(Sck),.DA_Data(q))
always @(posedge Clk)
begin
if(Cnt_R0 <局友 2)
begin
Clk_1M <= 0
end
else
begin
Clk_1M <= 1
end
Cnt_R0 <= Cnt_R0 + 1
end
always @(posedge Clk_1M)
begin
if(Cnt_R1 <雹腔 14)
begin
Cnt_R1 = Cnt_R1 + 1
En = 0
end
else
begin
Cnt_R1 = Cnt_R1 + 1
En = 1
end
end
always @(posedge En)
begin
address = address + 8
end
assign out = q
endmodule
用51单片机或者FPGA完全可以实现正弦波的输出,具体的方法有:1.你说的查表法,就是在ROM里面建一个表格,只需要四分之一正弦波的数据就可以了,然后用DA输出;
2.用扮枣PWM波的方法,就是用单片机的定时计数器输出不同占空比的方波,后端用厅枝拆合适的低通滤波器滤波,就能产生不同幅值的模拟信号正弦波,低通滤波器将方波的高频部分滤掉,PWM波的占空比越大,输出的模拟信号幅值就越高;
3.使用DDS技术,一块DDS芯片中主要包括频率控制寄存器、高速相位累加器和正弦计算器三搭升个部分。频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码;而相位累加器根据
dds频率控制码在每个时钟周期内进行相位累加,得到一个相位值;正弦计算器则对该相位值计算数字化正弦波幅度(芯片一般通过查表得到)。DDS芯片输出的一般是数字化的正弦波,因此还需经过高速D/A转换器和低通滤波器才能得到一个可用的模拟频率信号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)