MSP430控制的基于DDS的波形发生器设计.docx

上传人:sccc 文档编号:4895056 上传时间:2023-05-22 格式:DOCX 页数:50 大小:3.86MB
返回 下载 相关 举报
MSP430控制的基于DDS的波形发生器设计.docx_第1页
第1页 / 共50页
MSP430控制的基于DDS的波形发生器设计.docx_第2页
第2页 / 共50页
MSP430控制的基于DDS的波形发生器设计.docx_第3页
第3页 / 共50页
MSP430控制的基于DDS的波形发生器设计.docx_第4页
第4页 / 共50页
MSP430控制的基于DDS的波形发生器设计.docx_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《MSP430控制的基于DDS的波形发生器设计.docx》由会员分享,可在线阅读,更多相关《MSP430控制的基于DDS的波形发生器设计.docx(50页珍藏版)》请在三一办公上搜索。

1、华中科技大学电子与信息工程系2011年TI杯电子设计大赛项目总结报告题 目:MSP430控制的基于DDS的波形发生器设计 组 长:何永天(提高0801班 U200814111) 组 员:李恋阳(提高0801班 U200812892) 袁 园(提高0802班 U200813900) 杨春风(电信0804班 U200812791)吴文彬(电信0806班 U200812863) 指导老师:陈林 日 期:2011.7.8目 录1设计目标41.1基本功能41.2扩展功能42团队组成53系统设计方案53.1几种初步方案53.1.1方案一53.1.2方案二63.1.3方案的比较63.2器件选型73.2.1单

2、片机73.2.2数模转换DAC73.2.3压控增益放大器73.2.4运算放大器84系统硬件设计与实现84.1系统框图84.2系统电路图94.3器件清单94.4模块分析104.4.1DDS104.4.2幅度控制114.4.3放大稳压134.4.4自选波形144.4.5键盘144.4.6LCD显示155系统软件设计与实现165.1总体设计框图165.2初始化175.3DDS185.4LCD显示195.5DAC215.6键盘226系统测试与结果266.1总体方案选择266.1.1原方案266.1.2遇到的障碍:276.1.3改进方案:276.2硬件电路测试276.2.1VCA810压控放大器276.

3、2.2OPA1632286.2.3级联286.2.4关于换备选方案286.3系统联调结果286.3.1三角波、正弦波、方波测试结果286.3.2扩展波形的测试结果326.3.3扩展扫频功能的测试结果337结束语337.1目标完成情况337.2感想338参考文献349附录349.1电路图349.2源码清单35501. 设计目标设计并制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定波形,并根据用户输入选择产生指定类型与参数的波形,同时在必要的辅助输出显示设备上显示产生波形的类型与参数。1.1 基本功能l 具有产生正弦波、方波、三角波三种周期性波形的功能;l 输出波形的频

4、率范围为100Hz-20KHz(非正弦波频率按10次谐波计算);重复频率可调,频率步进间隔100Hz。l 输出波形幅度范围0-5V(峰峰值),可按步进0.1V(峰峰值)调整。l 由外界按键输入选择产生波形的种类、频率与峰峰值;l 界面显示输出波形的类型、重复频率(周期)和幅度。1.2 扩展功能l 输出波形频率范围扩展至100Hz-200KHz。l 用键盘或其它输入装置产生任意波形。l 增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于3%(负载电阻变化范围:100)。l 可产生单次或多次(1000次以下)特定波形(如产生1个半周期三角波输出)。l 具有掉电存储功能,可存储掉电前用户编辑的波

5、形和设置。l 其它(如增加频谱分析、失真度分析、频率扩展大于200KHz、扫描输出等功能)。2 团队组成我们的工作分为以下模块(详细分工在个人报告中叙述)l 前期:收集资料、方案设计、器件选型 l 硬件部分:电路参数设计、proteus制图及硬件仿真、各单级调试、PCB布线、通用版布线、电路焊接、排查焊接错误 l 软件部分: LCD模块、键盘扫描模块、DDS模块、调频、扫频、模块间接口设计与实现、自选波形模块(DA部分)、软件联调l 后期:硬件级联调试、软件联调报告书写、文档排版、幻灯片演示、视频制作、答辩展示3 系统设计方案3.1 几种初步方案3.1.1 方案一由MSP43F149单片机产生

6、三角波、正弦波和方波,并且控制波形之间的转换,以及波信号的频率和幅度。用LCD液晶显示模块显示波形的种类和相关参数。单片机输出数字信号,通过DAC进行数模转换。采用低通滤波器滤除DAC转换过程中形成的高频小锯齿波,运算放大器进行放大,电压跟随器稳幅,最后送入示波器显示信号。3.1.2 方案二用DDS(直接数字合成 Direct Digital Synthesis)芯片产生三角波、正弦波和方波,并用MSP430单片机送控制字给DDS以控制波形之间的转换,以及波信号的频率,通过TI公司的VCA810压控放大器芯片进行调幅。然后通过滤波器滤除高频噪声,通过放大电路对信号进行放大,之后通过缓冲对信号进

7、行稳幅,最后送入示波器显示信号,用单片机产生任意波形和其他扩展功能。3.1.3 方案的比较方案一的基本思路是用单片机发出指令输出相应的数字量,然后通过DA产生要求的模拟量,但是存在一个致命的问题,那就是本次的频率基本要求为100Hz-20KHz,扩展要求是100-200KHz,但是通常的MSP430系列单片机的晶振一般为8M左右,指令周期是机器周期,可达1/8ms,所以对生成方波来说还可以,而要合成三角波或正弦波则存在很多问题,程序实现难度很大,所以我们最终放弃了这个方案。方案二的基本思路是走两条路,使用DDS芯片产生三种基本波形,用单片机实现任意波形以及控制和显示等功能,容易对功能进行扩充,

8、且外围电路简单,系统可靠性较高,编程实现较为简单,整个系统成本较低,我们最终选择了这个方案。信号初步产生之后都要经过滤波、放大、缓冲输出等电路,各个方案下的设计大同小异,主要还是需要稳定可靠,带宽很宽。3.2 器件选型3.2.1 单片机选用MSP430F5438单片机,因为在种类和数量繁多的单片机中,TI的MSP430系列颇具特色,并具有良好的性能。3.2.2 数模转换DAC按照设计好的方案,扩展功能中的任选波形用DA来实现,有2种方法:外接DAC0832或者自带的DAC5571。l 自带的DAC5571优点:使用较简单(因为有完整的test代码和文档,而且已经集成在5438的开发板上);缺点

9、:速度上不去(因为5438自带的操作DA用来产生任选波形的代码要放在main中,但main函数比较庞大,影响了任选波形的频率)l 外接DAC0832优点:可以自己去设计DA的驱动函数,产生的任选波形的频率较高;缺点:设计和搭电路较复杂(0832的输出端还要加运放来将电流输出转换成电压输出)我们选择第一种自带DA3.2.3 压控增益放大器比较两个选择:VCA810和VCA822。具体来说,我们比较它们的增益带宽积,输出(驱动)电流,及我们对芯片的熟悉程度。最后决定选择VCA810,利用DAC产生控制电压改变放大器的增益。控制电压和放大器增益成线性,方便实现精确的增益控制。VCA810的最小增益步

10、进仅取决于 DAC 的位数,可以实现增益微调,为闭环改善放大器的性能提供方便。3.2.4 运算放大器主要考虑因素有增益带宽积,输出驱动电流(表明带负载的能力),噪声电压,电路复杂程度,对芯片的熟悉程度和价格,对于常用的几个比较结果如下:l OPA1632:增益带宽积:180MHZ; 输出驱动电流:150mAl OPA551:带宽:3MHZ;,增益带宽积:3MHZ; 输出驱动电流:200mAl OPA552:带宽:12MHZ,增益带宽积:3MHZ; 输出驱动电流:200mAl NE5532:小信号带宽:10MHZ, 输出驱动电流:60mAl THS4031:增益带宽积:100MHZ, 输出驱动电

11、流:90mAl THS4521:带宽:145MHZ, 输出驱动电流:100mAl uA741:增益带宽积:1MHZ, 输出驱动电流:25mAl 综合考虑,opa1632各项性能比其他芯片要好很多,因此决定选用opa16324 系统硬件设计与实现4.1 系统框图 由MSP430单片机通过3个SPI接口控制AD9833产生各种频率的正弦波、三角波、方波,经放大整形电路后输出,并通过独立的按键切换输出的波形,也可改变频率和幅度以及频率和幅度变化的步进(通过软硬件的配合)。通过TFT液晶模块和独立按键进行人机交互。系统上电后检查启动按键是否按下,当启动按下被按下时,启动各个模块,与此同时检查被按下的按

12、键值。当检查到不同的按键被按下时,由MSP430通过SPI控制AD9833进行相应的改变。4.2 系统电路图其中DDS模块较为复杂,上图只是外部接口。其详细电路设计如下图所示:4.3 器件清单l msp430f5438开发板(1个)l VCA810压控增益放大器(1个)l OPA1632放大器(3个)l AD9833(1个)l UA741放大器(1个)l 电阻,电容,导线若干4.4 模块分析4.4.1 DDS 1) AD9833介绍AD9833是ADI公司的一款低功耗的DDS器件,能够输出正弦波、三角波、方波。AD9833无需外接元件,输出频率和相位可通过软件编程设置,易于调节。其频率寄存器为

13、28位,主频时钟为25 MHz时,其精度为01 Hz;主频时钟为l MHz时精度可达0004 Hz.AD9833内部有5个可编程寄存器:1个16位控制寄存器,用于设置器件_T作模式;2个28位频率寄存器和2个12位相位寄存器,分别用于设置器件输出正弦波的频率和相位。它的SIN-ROM查询表把输入的地址相位信息映射成正弦波幅值的数字量信号,驱动DA转换器输出模拟量。输出正弦波频率为:fout=FREQREG(fMCLK/228)式中:FREQREG为频率控制字,由频率寄存器FREQOREG或FREQlREG的值给定,其范围为0M 80dB。信号带宽和压摆率保持在整个增益调节范围内保持恒定。这40

14、db/ V增益控制在1.5db(最高误差范围0.9db),让应用程序在一个AGC增益控制电压精确到作为接收信号强度指示器(RSSI)的使用精度为1.5db。通过调节控制电压(Vc)来控制压控增益放大器VCA810的放大增益,从而控制正确的输出。VCA810 作为压控增益的主要部分, 其增益与控制电压的关系为:G=-40(VC+1)其中, Vc 表示控制电压, 可见, VCA810 的增益与其控制电压成线性关系, 只要用单片机控制D/ A 输出一线性变化的控制电压给Vc, 便可得到线性变化的电压增益输出理论上VCA810可调的放大倍数为1/100100,实际上由于DDS输出的正弦波和三角波幅度为

15、680mV,方波的幅度为6.8V左右,而且VCA的工作电压只有-5V+5V,所以放大倍数不可能为100倍,差不多达到7、8倍,但是缩小则可以到1/100。为了确保调节的精确,我们采用VCA810的缩小功能,提供给它的参考电压为0-1V。经过这一级缩小后,再送入后级放大。3) uA741反相模块由于我们采用的MSP430单片机自带DA模块,所以没有外接DA,利用单片机给DA写控制字,使DA输出幅值可变的电压作为VCA810的参考电压。从DA输出的电压幅度值范围为03.3V,而VCA810要求的参考电压为0-1V,所以需要反相和缩小,利用简单的uA741实现,电路如下:4.4.3 放大稳压1) O

16、PA1632介绍设计运算放大器时,我们考虑了许多不同型号的运放,功能各异,主要考虑增益带宽积,输出驱动电流(表明带负载的能力),噪声电压,(电路复杂程度,芯片熟悉程度,价格)等等。TI公司的OPA1632是音频运算放大器,性能比较好。增益带宽积为180MHZ,输出驱动电流为150mA。可以工作在较高频率下而不出现失真,且驱动能力较好。2) 功能实现该实验中,我们主要用OPA1632设计放大电路和电压跟随器。放大电路主要分为同相比例放大器和反相比例放大器两种。 反相比例放大器 同相比例放大器反相放大电路有如下特点:l 运放两个输入端电压相等并等于0,故没有共模输入信号,这样对运放的共模抑制比没有

17、特殊要求。l vN= vP,而vP=0,反相端N没有真正接地,故称虚地点。l 电路在深度负反馈条件下,电路的输入电阻为R1,输出电阻近似为零。l 输入输出关系: Vo=-RfRlVs同相比例运算电路的特点如下:l 输入电阻很高,输出电阻很低。l 由于vN= vP= vS,电路不存在虚地,且运放存在共模输入信号,因此要求运放有较高的共模抑制比。l 输入输出关系: Vo=(1+RfRl)Vs由于实际放大倍数比理论值低,所以我们设计Rf=100千欧,R1=5.1千欧,放大倍数约为21倍。4.4.4 自选波形实现自选波形有两种不同的理解和方法:l 手动描波形,由硬件接收,然后描点显示出来;l 写好一组

18、波形,存在flash内部,通过按键选择我们实现的是第二种,首先用MATLAB描出想要产生的任意波形,然后取出大量的点写入代码中,将波形描绘出来。按照设计好的方案,扩展功能中的任选波形用DA来实现,有2种方法:外接DAC0832或者自带的DAC5571。 l 自带的DAC5571优点:使用较简单(因为有完整的test代码和文档,而且已经集成在5438的开发板上);缺点:速度上不去(因为5438自带的操作DA用来产生任选波形的代码要放在main中,但main函数比较庞大,影响了任选波形的频率)l 外接DAC0832优点:可以自己去设计DA的驱动函数,产生的任选波形的频率较高;缺点:设计和搭电路较复

19、杂(0832的输出端还要加运放来将电流输出转换成电压输出)综上考虑,我们选择使用自带的DAC处理。4.4.5 键盘本实验中,我们通过按键实现波形切换和调频、调幅。通过开关实现波形的切换比较简单只需通过输出波形后不断返回到检测开关的子程序中,判断是否有别的开关拨动,如果有别的开关拨动则执行别的程序,否则输出原来的波形,不过如果要能够识别别的开关发生变化,必须将此开关关掉否则会识别不了别的键按下。当然开关的调频和调幅的实现也一样,不过首先先输出一个波形,然后再检测开关是否需要调频或者调幅,如果需要则转入到相应的程序中,最后再重新输出波形。下面是我们设计的按键对应控制的功能:4.4.6 LCD显示我

20、们使用的是BW-DK5438开发板自带的TFT液晶屏,用SPI的SCK端来驱动液晶的写信号,当全屏刷新、区域填充时,刷新速度可达10Mpps,因此可以流畅的运行。下图是TFT液晶接口示意图:5 系统软件设计与实现5.1 总体设计框图5.2 初始化1) 功能介绍由于初始化代码由开发板自带,且并不很多实际内容,故仅列出初始化流程,省略具体代码。2) 核心代码主函数中主要功能包括初始化、扫频功能实现、自选波形功能实现以及键盘扫描。伪代码如下:Init();/初始化函数 while(1) /主函数循环 _delay_cycles(2048000);/键盘扫描延迟 if(扫描使能)/扫频功能函数 Fre

21、qCoeff=(FreqCoeff+1)%99;/当前档位下频率系数递增 DDS输出;LCD显示; else if(Mode=3) /自选波形函数 while(ReadKey() = 0xFF) /当无键盘按下时,执行自选波形DAC循环输出 自选波形DAC绘制; ScanKey();/扫描键盘5.3 DDS1) 功能介绍主要是对AD933进行SPI模拟与单片机进行连接,再根据按键输入的数据分别转换成正弦波、三角波和方波进行输出的程序。其中转换的格式固定,但是AD9833输出频率时是先低位后高位,区别于SPI模拟时单片机给AD9833数据时是先高位后低位。FSYNC为使能,低电平可传数据,刚开始

22、必须为高电平,SCLK为时钟,在下降沿对应数据,SDATE为传数据(频率控制字),16位,但可能单片机输出一次性为8位,必须先高8位后低8位给AD9833的SDATA 2) 核心代码:void dds(void) /WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer unsigned long freq_value; /不是频率!是计算出的频率控制字 AD9833_SPI_PORT_Init(); output_init(); switch (FreqStep) /根据频率计算频率控制字 case 0: freq_value = (unsigned

23、long)(FreqCoeff * 0x400 * 1.05); break; case 1: if (FreqCoeff = 7) freq_value = (unsigned long)(0x11800 * 1.05); else if (FreqCoeff = 8) freq_value = (unsigned long)(0x13000 * 1.05 *1.05); else if (FreqCoeff = 9) freq_value = (unsigned long)(0x15800 * 1.05 *1.05); else freq_value = (unsigned long)(F

24、reqCoeff * 0x2800 * 1.05); break; case 2: freq_value = (unsigned long)(FreqCoeff * 0x19000 * 1.05); break; case 3: freq_value = (unsigned long)(FreqCoeff * 0xFA000 * 1.05); break; default: freq_value = 0; break; switch (Mode) /不同Mode调用不同output函数 case 0: output_square(freq_value); /Mode=0对应方波 break;

25、case 1: /Mode=1对应三角波 output_triangle(freq_value); break; case 2: /Mode=2对应三角波 output_sinusoid(freq_value); break; default: output_sinusoid(0x00005000); 5.4 LCD显示1) 功能介绍完成液晶初始化、显示功能。由于TFT性能优良、尺寸大,且开发板自带TFT液晶驱动程序以及相应显示函数,则在编写过程中,主要内容是通过调用绘制函数,将按键输入的信息显示在TFTLCD上,从而实现人机交互。在LCD上,我们设计了一个图形化的显示界面,它可以实时的反应波

26、形状态、频率、幅值等等信息。下面是该界面的详细说明,上面标示出了各元素的具体坐标:2) 核心代码void InitInterface(void) /初始化/清屏 Clear_LCD(Color_BK); TA0CCR1 = 220; DrawRectFill(0,0 ,240,320,WINDOW_BK_COLOR); / 绘制背景 DrawRectFill(0,0 ,240,30,STATUS_BK_COLOR); /标题栏 Color_BK = STATUS_BK_COLOR; Color = STATUS_COLOR; PutString24M(60,3,波形发生器); /标题字 Dra

27、wRectFill(20,60,205,30,WINDOW_COLOR); / 波形窗口题 Color_BK = WINDOW_COLOR; Color = WINDOW_BK_COLOR; PutString24M(70,63,波形信息); Color=WINDOW_COLOR;Color_BK=WINDOW_BK_COLOR; DrawRect(20,90,205,125,WINDOW_COLOR); PutString24M(25,105,波形:);Mode = 2; DrawMode();/初始化波形为正弦波 PutString24M(25,140,频率:);FreqStep= 0;F

28、reqCoeff = 10;DrawFreq();/初始化频率为100Hz PutString24M(25,175,峰-峰值:);Vpp = 6;DrawVpp();/初始化峰峰值为0.6V DrawRectFill(0,290,240,30,STATUS_BK_COLOR);其他绘制函数及关键代码:l void DrawMode(void); 绘制波形模式PutString24M(90,105,方波 );l void DrawFreqStep(void); 绘制频率档位 switch(FreqStep)/判断FreqStep取值,在LCD中绘制档位提示符 case 0: PutString2

29、4M(130,255,x100 Hz);/100Hz档Break; l void DrawFreq(void); 绘制频率 unsigned char str10;/用于存储字符型频率值 float freq_f;/浮点型频率值 switch(FreqStep) case 0: freq_f = 100 * FreqCoeff * 0.1;/100Hz档位时,频率 = 频率系数(1-99) * 0.1 * 100,单位Hz break; /其余档位同上,省略 sprintf(char *)str,%3.1f,freq_f);/浮点型数据到字符串型转换 DrawRectFill(90,140,7

30、0,30,WINDOW_BK_COLOR);/绘制背景覆盖数据,以防叠加至当前值 PutString24M(90,140,str);/绘制当前频率值 if(FreqStep = 0)PutString24M(170,140, Hz);/通过判断FreqStep取值,确定绘制的单位为“Hz”或“kHz” else PutString24M(170,140,kHz);l void DrawVpp(void); 绘制峰峰值unsigned char str10;/用于存储字符型峰峰值float Vpp_f;/浮点型峰峰值Vpp_f = 0.1 * Vpp;/峰峰值 = 峰峰值系数(0-50) * 0

31、.1sprintf(char *)str,%3.1f,Vpp_f);/浮点型数据到字符型数据转换PutString24M(130,175,str);/绘制当前峰峰值PutString24M(170,175,V);/绘制单位 “V”5.5 DAC1) 功能介绍DAC在本次设计中完成两个功能:一、通过改变输入的数字信号,输出自选波形;二、输出压控放大器参考电压,从而改变放大器的增益。2) 核心代码/初始化#define SDA5571 BIT6 / DAC5571数据#define SCK5571 BIT7 / DAC5571时钟#define SCL_H P9OUT |= SCK5571#def

32、ine SCL_L P9OUT &=SCK5571#define SDA_H P9OUT |= SDA5571#define SDA_L P9OUT &=SDA5571/完成IIC的起始条件操作void start(void) SCL_H;/时钟信号置高 SDA_H;/数据线置高 delay();/延迟 SDA_L;/数据线置低 delay();/延迟 SCL_L;/时钟信号置低 delay();/延迟/核心功能实现if(Mode=3)/当自选波形模式while(ReadKey() = 0xFF)/当没有键盘按下时 Write_DAC(voltage+);/递增输出锯齿波5.6 键盘1) 功能

33、介绍/P6引脚定义#defineKPR0 BIT0 / 键盘0行#defineKPR1 BIT1 / 键盘1行#defineKPR2 BIT2 / 键盘2行#defineKPR3 BIT3 / 键盘3行#define KPC0 BIT4 / 键盘0列#defineKPC1 BIT5 / 键盘1列#defineKPC2 BIT6 / 键盘2列#defineKPC3 BIT7 / 键盘3列由键盘接口图以及引脚定义可以看出,P6端口的8条I/O端口线被分成4条行线P6.0P6.3和4条列线P6.4P6.7。按键的两端分别接在行线和列线上,行线与列线的每个交界处均有一个按键。如果有按键被按下,则与之相

34、连的行线与列线被接通。要想检测是否有按键被按下,先使4条行线输出低电平,读列线P6.4P6.7。因为所有列线都经上拉电阻接到VCC,如果没有按键被按下,列线读进来的都是高电平1;如果有按键被按下,则列线读进来的电平应与行线输出的一致,为低电平0.据此可以判断是否有按键按下。对于行列扫描式键盘,常采用扫描的办法识别键码。如果4条行线没有输出低电平,那么就可以根据读列线的值来判断这一行是否有键被按下了。2) 核心代码#define KEY_PORT_IN P6IN #define KEY_PORT_OUT P6OUT #define KEY_PORT_DIR P6DIR #define KEY_P

35、ORT_REN P6REN#define ROW_IN_COL_OUT P6DIR = KPC0+KPC1+KPC2+KPC3 ; P6OUT =(KPC0+KPC1+KPC2+KPC3) ; _delay_cycles(20) / 键盘列输出行输入 #define CLO_IN_ROW_OUT P6DIR = KPR0+KPR1+KPR2+KPR3 ; P6OUT =(KPR0+KPR1+KPR2+KPR3) ; _delay_cycles(20) / 键盘行输出列输入unsigned char ReadKey(void) unsigned char column,row,key;/分别表示

36、行、列线读取值、返回键值 unsigned char Key;/储存键值对应的8位键盘扫描值,对应关系见下图 ROW_IN_COL_OUT;/键盘列输出行输入 row = KEY_PORT_IN&(KPR0+KPR1+KPR2+KPR3);/读取P6端口并屏蔽高4位输出值即行线值 if(row!=(KPR0+KPR1+KPR2+KPR3)/若行线没有输出低电平,说明有按键按下 CLO_IN_ROW_OUT ;/键盘行输出列输入 column = KEY_PORT_IN&(KPC0+KPC1+KPC2+KPC3);/读取P6并屏蔽低4位即列线值 ROW_IN_COL_OUT;/键盘列输出行输入

37、Key = row + column;/行列线值相加,则高低4位的不同取值可以表示不同的键值 _NOP(); switch(Key)/通过判断键值做出对应的响应 case 0xE7: key=1; break; case 0xD7: key=2; break; /其他键值省略 default: key=0xFF; else key=0xFF;/若没有键盘输出,则返回键值0xFF KEY_PORT_DIR=0xFF;/键盘8个IO口均设置为输出 KEY_PORT_OUT=0x00;/输出低电平 return key;/返回逻辑键值下图是8位键值与逻辑值对应关系:3) 各按键功能代码l 按键1:模式选择按键后Mode值循环模4递增,在方波、三角波、正弦波、自选波形中单向切换。通过改变全局变量Mode值,可以传递给LCD模块输出正确的波形模式显示在屏幕上,并通过调用DDS模块的函数输出正确的控制字给DDS从而输出正确波形。Mode = (Mode+1)%4;/0-方波,1-三角

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号