黃 亮
(江蘇省數字化電化學加工重點實驗室(常州工學院),江蘇 常州 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.