利用STC8G1K08实现的数字信号合成模块

简介

普通的电子学实验可以借助于面包板方便实现。其中会涉及到一些信号源、CM押镖、频率计等通用测量功能模块。在普遍要求对测量过程进行自动化的今天,这些设备往往需要能够直接通过有线,或者无限的方式连入计算机,形成自动测量的系统。

面包板可以比较方实现这些模块的灵活连接,使得测量系统在构建和拆解都比较方便。测量功能模块通过无线方式连入计算机,可以减少这部分的引线部署的步骤,提高系统搭建的效率。

利用STC8G1K08实现的数字信号合成模块_第1张图片

▲ 基于面包板的测试系统

下面显示了基于面包板进行测试被控对象频率小的的系统,其中信号源是由DDS芯片AD9833产生,另外一块单片机卡来获取输入输出信号的幅值,频率等参数。

利用STC8G1K08实现的数字信号合成模块_第2张图片

▲ 实验电路板及其功能模块

在博文AD9833数字信号发生器模块中给出AD9833原来的控制方案。是基于ST公司的STM32F030制作的控制板,体积相对比较大。对于未来部署在面包板上形成测量系统有比较大的影响。本文提出了基于STC8G1K08-SOP16封装的单片机重新设计的方案。进一步简化电路,缩小体积。

设计方案

设计的目标是在保留电路的基本功能的基础上,减少整体的体积。
设计电路稳定:

D:\zhuoqing\AltiumDesigner\Tools\2020\DDSAD9833\DDSAD9833.PcbDoc *

1. 电路原理图

电路的核心即基于STC8G1k08单片机,开发方便,抗干扰能力强。

电路包括有三个接口:

  1. ISP端口,其中有电源和UART,以及信号输出端口;
  2. AD9833接口插座;
  3. ZIgBee串口模块。
    利用STC8G1K08实现的数字信号合成模块_第3张图片
    ▲ 设计系统原理图

2. PCB电路板

下图所示的是设计的PCB电路板以及焊接组之后的形式。
利用STC8G1K08实现的数字信号合成模块_第4张图片

▲ PCB电路板

下面是将实验模块安装上AD9833数字信号发生器以及ZIGBEE无线串口通讯模块。该模块可以竖直安插在面包板上,提供信号源的功能。
利用STC8G1K08实现的数字信号合成模块_第5张图片

▲ 组装有AD9833以及ZigBee无线通信模块

对外的接口定义:

序号 符号 功能
1 VCC 电源
2 GND
3 TXD ISP串口输出
4 RXD ISP串口输入
5 GND 底线
6 OSVO 信号输出

3. 软件开发

软件所在的目录:

D:\zhuoqing\window\C51\STC\Tools\SSDAD9833\SSDAD9833.uvproj

控制命令

具体命令可以参见下面的代码。


void SerialDebugProcessBuffer(void) {
    double lfFrequency;
    SerialDebugBuffer2Argument();
    if(g_ucSDANumber == 0) return;
    if(strcmp("hello",                (char *)STD_ARG[0]) == 0)
        printf("%s is ready !\r\n", VERSION_STRING);
    else IFARG0("ad9833setfrequency") {
        sscanf(SDA(1), "%lf", &lfFrequency);
        AD9833SetFrequency(lfFrequency);
    } else IFARG0("ad9833sinusoidal") 
        AD9833SinusoidalOutput();
    else IFARG0("ad9833triangle")
        AD9833TriangleOutput();
    else IFARG0("ad9833square")
        AD9833SquareOutput();    
    else if(strcmp(SDA(0), g_szChipID) == 0) {
        IFARG1("sf") {    
            sscanf(SDA(2), "%lf", &lfFrequency);
            AD9833SetFrequency(lfFrequency);            
        } else IFARG1("sinusoidal") 
            AD9833SinusoidalOutput();
        else IFARG1("triangel")
            AD9833TriangleOutput();
        else IFARG0("square")
            AD9833SquareOutput();        
    }
    else printf("Error command : %s !\r\n", STD_ARG[0]);
}


特别请注意对于使用芯片的CHipID作为寻找的时候,可以同时驱动多个信号源来提供信号。

你可能感兴趣的:(电子模块实验,基础电子)