基于单片机的dds函数信号发生器毕业论文内容摘要:

平信号, 当这个电容上面的电量充满时高电平的信号将回落 ,即 RST 端的高电平信号保持的 时间 是由外部这个充电电容决定的。 另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全 “l” 态。 如果系统在上电时得不到有效的复位,则程序计数器 PC 将得不到一个合适的初值,因此, CPU 可能会从一个未被定义的位置开始 执行程序 ,此时会造成单片机在上电的瞬间出现不稳定的情况发生,所以为了能让单片机稳定的工作,必须提供必要的复位电路。 DDS输出设计 DDS 输出主要采用 DDS 控制芯片 AD9833。 AD9833 是一款低功耗、可编程波形发生器,可以产生正弦波、三角波、方波。 输出频率和相位可软件编程,很容易调整,而不需要外部组件。 频率寄存器是 28 位的,如果是 25M 的时钟源,经过编程可以得到 的时钟;同样如果是 1M 的时钟源,可以得到 的时钟。 AD9833 通过 3 线串口进行写操作。 串口 工作时钟频率高达 40M ,并与 DSP 和微处理器标准兼容。 其工作电压在 ~ 之间。 AD9833 还具有休眠功能,可使没被使用的部分休眠,减少该部分的电流损耗,例如,若利用 AD9833 输出作为时钟源,就可以让 DAC 休眠,以减小功耗,该电路采用 10 引脚 MSOP 型表面贴片封装,体积很小。 广西师范大学 2020 届本科生毕业论文(设计) 10 图 9 AD9833 引脚图 芯片简介 AD9833 是 ADI 公司生产的一款低功耗 ,可编程波形发生器 ,能够产生正弦波、三角波、方波输出。 波形发生器广泛应用于各种测量、激励和时域响应领域 ,AD9833无需外接元件 ,输出频率和相位都可通过软件编程 ,易于调节 ,频率寄存器是 28 位的 ,主频时钟为 25MHz时 ,精度为 ,主频时钟为 1MHz时 ,精度可以 [7]。 DDS 信号发生 器的组成 AD9833 是一块完全集成的 DDS( Direct Digital Frequency Synthesis)电路 ,仅需要 1 个外部参考时钟、 1 个低精度电阻器和一个解耦电容器就能产生高达 的正弦波。 除了产生射频信号外 ,该电路还广泛应外于各种调制解调方案。 这些方案全都用在数字领域 ,采用 DSP 技术能够把复杂的调制解调算法简化 ,而且很精确 [9]。 DDS 原理及应用 AD933 的核心是 28 位的相位累加器 ,它由加法器和相位寄存器组成 ,每来 1 个时钟 ,相位寄存器以步长增加 ,相位寄存器的输出与相位控制字相加后输入到正弦查询表地址中。 正弦查询表包含 1 个周期正弦波的数字幅度信息 ,每个地址对应正弦波中 0176。 - 360176。 范围内的 1 个相位点。 查询表把输入的地址相位信息映射成正弦波幅度的数字量信号 ,去 DAC 输出模拟量 ,相位寄存器每经过 228/M 个 MCLK广西师范大学 2020 届本科生毕业论文(设计) 11 时钟后回到初始状态 ,相应地正弦查询表经过一个循环回 到初始位置 ,这样就输出了一个正弦波。 输出正弦波频率为: fOUT= M( fMCLK/228) ( 1) 其中 ,M 为频率控制字 ,由外部编程给定 ,其范围为 0≤M≤228- 1。 VDD 引脚为 AD9833 的模拟部分和数字部分供电 ,供电电压为 -。 AD9833 内部数字电路工作电压为 ,其板上的电压调节器可以从 VDD 产生 稳定电压 ,注意:若 VDD 小于等于 ,引脚 CAP/ 应直接连接至VDD[10]。 数码管显示电路 图 14 数码管显示电路 数码管显示分析 显 示电路为四位数码管,用来显示实时波形的频率。 通过数码管上的显示,我们可以清楚的知道当前波形的频率,以及工作的状态。 并可以通过按键来调节广西师范大学 2020 届本科生毕业论文(设计) 12 实时的工作频率。 在实际的单片机系统中,往往需要多位显示。 动态显示应用非常广泛是一种最常见的多位显示方法。 用数码管显示测得的数据,数码管有 8 段而每段必需占用一个单片机的 IO口,所以一位数码管必须占个单片机 IO 口,本次设计采用 4 位数码管,则需要32 个 I/O 口,而 89C52 单片机的 I/O 口只有 32 个。 动态显示能够很好的解决数码管占用单片机 IO 口过多的问题。 所有数码管的段选 全部连接在一起,如何能显示不同的内容呢。 动态显示的原理是多位数码管,交替来进行显示,利用人的视觉暂留效果使人看到好像有多个数码管同时显示。 在编程时,要用单片机控制段选和位选,所谓的位选是选中其中一个数码管,然后利用单片机输出段码,需要显示的数字就能显示在这位数码管上了,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。 在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示发暗且有重影。 静态驱动就是给单独每一个 LED 供电。 这样 每个 LED 都有足够的电流,亮度也相应的比较高。 动态扫描驱动就是把本来供给一个 LED 灯的电流,同时分给了 N 个灯,所以它的亮度会有所降低。 当然在同时供给两个 led 灯电流时不是平均的分配电流,而是 led 间扫描期间电流不断地交替,扫描的频率依据单片机的速度决定,也就是说各位的数码管上的电流在扫描频率内是供个其中一个led,在下一个扫描频率内是供给了另一个 led[12]。 若我们想让这个 4 位数码管的每段工作时的电流为 为正常工作时的电压取。 所以我们选取 100欧的限流电阻。 这样每个 LED 工作时的电流 约为 LED 能亮的同时不会被烧坏。 按键电路 图 214 为键盘接口电路的原理图,图中 按键在未按下时,通过一个电阻接到高电平,当按下时,按键导通。 连接单片机的 IO 口接地变成低电平。 当单片机检测到按键变为低电平时,进行频率的切换。 广西师范大学 2020 届本科生毕业论文(设计) 13 图 15 按键电路 3 软件设计 软件设计总流程图 开 始初 始 化加 载 数 据 到A D 9 8 3 3 寄 存 器是 否 到 1 0 S输 出 对 应 频率 和 波 形按 键 按 下下 一 频 率Y E SN OY E SN O 图 16 软件流程图 广西师范大学 2020 届本科生毕业论文(设计) 14 D9833 有一个标准串行接口,可以与一些微处理器直接连接,用外部串行时钟来往自身写数据和控制信息,串行时钟频率最高可达 40MHz,在写操作的过程中可能是连续的,也可能一直 保持高电平或低电平。 如果有数据 /控制信息写入 AD9833, FSYNC 在 16 位信息写进 AD9833 的过程中一直保持低电平。 FSYNC信号显示 16 位信息被写入 AD9833。 波形输出软件设计 当数据传输要到 AD9833 时, 置低电平。 80C51/80L51 8bit 字节形式传输数据,所以每次传输只需要 SCLK 下降沿。 为把数据写入 AD9833,第个 8bit数据传输完毕以后 依然要保持低电平,接着初始化下一个字节的的写操作。 结束后, 被置高电平。 在两次写操作的过程中, SCLK 必须一直保80C51/80L51 本来是以 LSB 在前的格式输出串行数据的。 但是 AD9833 首先接受的是 MSB(目标寄存器写时,首先 4 个 MSB 是控制信息,接下来 4 个是地址,8 个 LSB 才是数据)。 因此, 80C51/80L51 的传输例程必须考虑到这点,重新安排位序,让 MSB 先输出 方波产生软件设计 frequency_fun(500000,0x4000)。 //设定 reg0 为 500k frequency_fun(100000,0x8000)。 //设定 reg1 为 100k write_ad9833_d16(0x2020)。 //调用 reg0 频率数据,输出三角波 display_data[3]=10。 display_data[2]=5。 display_data[1]=0。 display_data[0]=0。 delay10s()。 write_ad9833_d16(0x2802)。 //reg1 display_data[3]=10。 display_data[2]=1。 display_data[1]=0。 display_data[0]=0。 delay10s()。 frequency_fun(50000,0x4000)。 //50k,reg0 frequency_fun(20200,0x8000)。 //20k,reg1 write_ad9833_d16(0x2020)。 //reg0 广西师范大学 2020 届本科生毕业论文(设计) 15 display_data[3]=10。 display_data[2]=10。 display_data[1]=5。 display_data[0]=0。 delay10s()。 write_ad9833_d16(0x2802)。 //reg1 display_data[3]=10。 display_data[2]=10。 display_data[1]=2。 display_data[0]=0。 delay10s()。 frequency_fun(10000,0x4000)。 //10k,reg0 frequency_fun(5000,0x8000)。 //5k,reg1 write_ad9833_d16(0x2020)。 //reg0 display_data[3]=10。 display_data[2]=10。 display_data[1]=1。 display_data[0]=0。 delay10s()。 write_ad9833_d16(0x2802)。 //reg1 display_data[3]=10。 display_data[2]=10。 display_data[1]=10。 display_data[0]=5。 delay10s()。 frequency_fun(2020,0x4000)。 //2k,reg0 frequency_fun(1000,0x8000)。 //1k,reg1 write_ad9833_d16(0x2020)。 //reg0 display_data[3]=10。 display_data[2]=10。 display_data[1]=10。 display_data[0]=2。 delay10s()。 write_ad9833_d16(0x2802)。 //reg1 display_data[3]=10。 display_data[2]=10。 display_data[1]=10。 display_data[0]=1。 delay10s()。 //输出方波波形 frequency_fun(1000000,0x4000)。 //500k,reg0 广西师范大学 2020 届本科生毕业论文(设计) 16 frequency_fun(202000,0x8000)。 //100k,reg1 write_ad9833_d16(0x2020)。 //reg0 display_data[3]=10。 display_data[2]=5。 display_data[1]=0。 display_data[0]=0。 delay10s()。 write_ad9833_d16(0x2820)。 //reg1 display_data[3]=10。 display_data[2]=1。 display_data[1]=0。 display_data[0]=0。 delay10s()。 frequency_fun(100000,0x4000)。 //50k,reg0 frequency_fun(40000,0x8000)。 //20k,reg1 write_ad9833_d16(0x2020)。 //reg0 display_data[3]=10。 display_data[2]=10。 display_data[1]=5。 display_data[0]=0。 delay10s()。 write_ad9833_d16(0x2820)。 //reg1 display_data[3]=10。 display_data[2]=10。 display_data[1]=2。 display_data[0]=0。 delay10s()。 frequency_fun(20200,0x4000)。 //10k,reg0 frequency_fun(10000,0x8000)。 //5k,reg1 write_ad9833_d16(0x2020)。 //reg0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。