本帖最后由 黑非拉 于 2014-6-4 12:03 编辑
DDS信号发生:
(1)DDS的基本原理(主要摘自从零开始走进FPGA世界):
DDS 是重要的频率合成方法,在波形发生器中有极其重要的应用。
DDS 主要由以下几部分组成:a) 相位累加器 b) RAM 数据读 c) D/A 转换器 d)
低通滤波器图1为直接频率合成法的流程图,有固定模块,输入频率控制器,输出固定频率的波形。
其中最主要模块是相位累加器,通过相位累加器循环计数,循环读取 RAM 的数据,从而得到固定频率的波形数据。
相位累加原理流程如图2所示,输入频率控制字,根据算法,来实现相位的变化。
Fout=Fclk*K/2^N,
Fout为输出频率,Fclk为时钟频率,K为频率控制字,N为累加器计数器位数。
(2)生成扫描一个圆轮廓的XY控制信号
对应圆的参数方程:x=x0+r*cos(t)y=y0+r*sin(t)t=2*pi*i/1024,i=0,1,2,…,1023
其中x0,y0对应DAC输出0v时的数字量,r对应DAC输出4v(4v与扫描范围相关)时的数字量。
BeagleBone将计算的数字量通过GPMC接口写进FPGA的RAM里,DDS调整频率和相位生成如图3所示的两路控制信号。
(3)生成扫描一个面圆的XY控制信号
在(2)的基础上扫描完一个圆轮廓接着扫描另一个圆轮廓,一个周期圆的半径r由小变大再由大变小,控制信号如图4、图5所示。
两种方法:
一、由BB软件事先计算好所有需要扫描的圆轮廓的矢量点对应的控制电压数字量,写进FPGA的RAM存储器中,FPGA遍历一遍RAM存储器就会来回扫描一个面圆,这种方法的好处是半径大的圆轮廓矢量点可以取得多点,而半径小的圆轮廓矢量点相对可以取得少点,比较灵活,但限于RAM存储器的容量,矢量点的个数有限,因而面圆包含的圆轮廓个数受限,但这个问题可以通过采用大容量RAM存储器的FPGA或采用外部大容量RAM得以解决,而且这种方法对任意形状的扫描区域都适用。
二、BB软件事先只计算一个圆轮廓的矢量点对应的控制电压数字量,写进FPGA的RAM存储器中,FPGA在每次遍历RAM存储器之前都会采用乘法除法运算计算圆轮廓的半径,调整控制电压数字量,这种方法一个面圆包含的圆轮廓的个数不会因为RAM存储器的容量受到限制,但这种方法大小圆轮廓取的矢量点的个数都是一样的,而且不适合任意形状的扫描区域或扫描轨迹。
本方案采用方法一。
下面上传部分BB软件的源码。
(1)附件一 基于TCP/IP的网络通信程序,用于BB与上位机PC的通信,BB端作为服务器端,PC端作为客户端,支持多客户端连接,支持断开重连,已经调试过。