黄 亮
(江苏省数字化电化学加工重点实验室(常州工学院),江苏 常州 213002)
随着芯片技术的发展,直接数字频率合成器(Direct Digital Frequency Synthesis简称 DDS或DDFS)的发展已经很成熟,它不仅成本低、功耗小、集成化程度高,而且产生的信号具有分辨率高、频率转换时间短、控制灵活和全数字化等诸多优点,因此已成为近年来频率合成领域中的主流技术。AD9850是AD公司出品的一款采用CMOS工艺的低功耗专用DDS芯片,采用28脚SSOP封装。AD9850内含可编程DDS系统和高速模拟比较器,能通过并行或串行方式实现全数字编程控制的频率合成。CY7C68013A是 Cypress符合USB2.0协议的高性能51内核单片机,它可通过USB2.0协议进行高速数据传输,另外还带有UART等通信端口。利用这些通信端口与外部设备通信,让51内核了解外部设备的具体要求,通过串行方式控制AD9850产生外部设备所要求的频率输出,实现数字化的DDS控制。模块化设计可非常方便地与各种外部设备接驳,也方便在此基础进行软、硬件的二次开发。
系统硬件框图如图1,电源系统为各工作单元提供5 V和3.3 V直流工作电压。5 V电压可由USB提供,也可利用外接直流电源经7805稳压得到。CY7C68013A单片机系统负责接收处理来自USB和两串口的数据,控制AD9850输出特定的频率,并不断刷新LCD12832液晶显示实时的参数信息,按键可用于DDS频率或其他参数的手动输入。AD9850输出电流波形经过电流电压转换、低通滤波后可获得两路相位正交的正弦波信号,正弦波经内部高速模拟比较器又可获得两路相位反相的矩形波输出。
图1 硬件框图
CY7C68013A有3种封装,这里采用具有双串口的100引脚QFP封装,图2为CY7C68013A最小系统简图,没有连接的引脚和IO口没有标出,所有的VCC脚都接到+3.3 V电源,所有的GND都接到电源负极。AVCC和AGND可以分别通过一个电感接VCC和GND。使用频率为24 MHz外部晶振以适应 UBS 2.0的通信速率。DPLUS和DMINUS引脚为USB的通信端口,通过一个 MINIUSB母口与计算机连接,实现和USB主机的高速数据传输。复位RESET和唤醒WAKEUP都通过一RC电路接到电源和负极,为方便固件程序调试,在复位端增加一轻触按键连接一小阻值电阻R15到电源负极,用来实现手动复位。AT24LC64用来存储USB固件程序,根据要求A0地址线需接高电平。跳线JP2和JP3用于在调试阶段隔离AT24C64的数据线和时钟线,跳线开路时可直接通过Cypress官方提供的控制台程序将固件下载到单片机内部运行;固件完善后可短接跳线,将IIC文件下载到此存储器内进行C2方式加载运行。系统3.3 V电源由5 V电源经LM1117-3.3稳压后得到。
图2 CY7C68013A最小系统
外围硬件电路如图3,其中图3(a)为串口0引出接口,通过CZ7使用3.3 V TTL电平和其他嵌入式系统通信。图3(b)为LCD液晶接口,液晶采用深圳晶联讯公司的JLX12832点阵液晶模块,此款液晶使用ST7565作为驱动IC,可使用串行方式进行连接,只占用5根IO口线,节省了硬件资源。图3(c)是串口1接口,使用MAX3232电平转换后,通过CZ5实现与外部的RS232通信,方便与具有RS232接口的工控系统通信。图3(d)为键盘接口,按键采用独立式键盘,每个按键占用1个IO口线,可根据具体需要增减按键数目。图3(e)是 AD9850芯片及其外围元件,AD9850采用125 MHz有源晶振作为时钟源,与单片机的接口采用串行方式,为此需将D0和D1接到高电平,D2~D6接到低电平,D7用作串行通信数据线。IOUT和IOUTB输出两路正弦电流信号,流经R29和R26后得到电压信号,通过C40和C36耦合输出,方波的产生需将两路正弦电压信号输入到内部高速模拟比较器,在比较器的VOUTP和VOUTN端得到两路反相的方波信号。
图3 外围硬件电路
图4 流程图
软件采用模拟操作系统的方式编写,程序流程图如图4,USB在上电设备枚举过程中会进行初始化。初始化LCD后显示复位时的默认频率,同时控制AD9850输出该初始频率,之后主循环开始轮询USB、串口0以及串口1的有效标志位。如相应的标志位为1,说明在该通信模式下收到有效数据,外部有改变输出频率的请求,主循环检测到标志位后便根据要求改变DDS的输出频率,同时清除该标志位。图3(b)、(c)、(d)分别为自定义UBS请求串口0、串口1的中断流程图,在各自通信协议内进行数据的接收和协议的解析,扮演了消息投递者的角色。一旦检测到有效数据流便设置相应的标志位,相当于把消息投递给主程序,主程序不断查询这些标志位,一旦收到消息便及时处理,更新DDS频率输出,并不断刷新LCD显示,使显示信息和输出频率保持一致。如需手动输入频率或其他工作参数可在主循环中加入扫键程序。
Cypress公司提供了比较完善的USB固件代码范例,只需在固件范例的基础上增加相应的功能代码便可实现具体的用户功能。在main()函数中有一个TD_Init()函数,用来初始化各种变量和外围硬件。用户只要把自己的各类初始化功能代码添加到此函数的结尾部分,单片机复位后便会调用这些初始化代码,具体C语言程序实现如下:
用户的任务函数则放在while(TRUE)主循环的TD_Poll()中,主程序会不断地循环执行,C语言程序实现如下:
对于COM0和COM1的通信,都采用中断方式接收外部数据,每收到1个字节便会产生对应的中断。只要自定义一种数据流格式,规定开头字节、结尾字节、数据长度及校验字节,串口中断程序便可根据此格式处理收到的数据。开始先查找起始字节,如找到则连续接收后面固定长度的数据,如最后一个字节正好为规定的结尾字节,则进行数据校验,校验正确后设置相应有效标志,中间有任意一个环节出错则丢弃全部数据,然后重新进行起始字节的查找。
CY7C68013A的USB中断由固件统一管理,每个USB设备都必须具备端点0,以控制传输的方式枚举设备,USB协议使用差错控制和重试机制来保证数据传输的正确性和可靠性,因此采用控制传输通信是非常可靠的,可以省去校验过程。具体实现过程是在固件的SetupCommand()函数中添加自定义请求,相关C语言程序如下:
自定义的REQ_DDS是一个宏代换,在FX2.H头文件中进行定义,需要注意的是不能和标准请求宏发生冲突,若0xA1没有被使用,就可以这样定义:#define REQ_DDS 0xA1。
上电后液晶显示初始化界面,并输出1 000 Hz频率。
在进行USB接口调试时,可以用Cypress控制台程序向设备发送A1请求,后面跟上需要产生的频率信息,如A1 00 00 01 23 45,可以解析为产生12.345 kHz的频率输出,发送A1的DDS自定义请求后,就可以用示波器在正弦波输出端测量到该频率信号。
串口0和串口1的调试方法基本相同,只是串口0可以用3.3 V的TTL232直接进行调试,串口1需用RS232方式,上位机都采用串口调试软件,约定每次发送16个字节,以0xE1开头,0xEA结尾。0xE1后面跟上频率信息,0xEA前1个字节即倒数第2个字节为校验字节,它等于前面14个字节累加的和,用以简单的数据校验。需要产生12.345 kHz频率时,可以用串口调试软件发送如下16个字节:
其中4A为其前14个字节的累加和。以HEX方式发送到设备后,同样可以观测到正弦波形,同时可以在AD9850的比较器输出端观测到同频率的两路反相方波信号。
该DDS信号发生器结合了比较高级的CY7C68013A单片机,实现 USB2.0、TTL232以及RS232的通信控制,非常方便与各种外设进行互联,也方便在此基础进行软、硬件的进一步开发,信号输出稳定,性价比高,正弦频谱单纯净,频率分辨率高。
[1]Cypress Semiconductor Corporation.EZ-USB ® FX2LPTMUSB Microcontroller High-Speed USB Peripheral Controller[EB/OL].[2012 -11 -01].http://www.cypress.com/?docID=34060.
[2]薛园园,赵建领.USB应用开发宝典[M].北京:人民邮电出版社,2011.
[4]赵燕徐,郑茹琼,蔡顺燕.基于AD9850的可编程信号源的设计[J].信息技术,2010(7):116-118.
[3]许德志,丁才成.一种基于DDS技术的信号发生器研究与实现[J].电子科技,2010(3):60-61.