别再只用示波器了!教你用STM32自制双通道信号发生器,玩转李萨如图形
用STM32打造双通道信号发生器从李萨如图形到实战应用当我们需要观察两个正弦波信号的相位差和频率比关系时李萨如图形提供了一种直观的视觉化方法。传统上这需要昂贵的双通道函数发生器但今天我们将探索如何用STM32内置DAC实现这一功能成本仅为商业设备的零头。1. 李萨如图形的魅力与应用价值李萨如图形Lissajous Curve是法国数学家Jules Antoine Lissajous在1857年提出的通过将两个不同频率、相位的正弦波分别输入示波器的X轴和Y轴在屏幕上形成的闭合曲线。这些图形不仅美观更是工程师和科学家的实用工具。典型应用场景包括教学演示直观展示频率比和相位差概念音频设备测试分析扬声器相位响应无线电测量比较两个信号的频率稳定性机械振动分析研究多自由度系统的耦合振动提示当两个正弦波频率比为简单整数比时李萨如图形最为稳定和清晰。2. 硬件设计STM32的信号发生系统2.1 核心器件选型我们的设计基于STM32F103RCT6这款芯片具有72MHz主频的Cortex-M3内核内置双通道12位DAC最高1MHz更新率丰富的DMA和定时器资源充足的GPIO用于扩展控制接口关键外围电路信号调理电路将DAC的单极性输出转换为±3.3V双极性信号低通滤波器消除DAC量化带来的高频噪声输出缓冲提供足够的驱动能力2.2 信号转换电路设计DAC输出为0-3.3V单极性信号我们需要将其转换为双极性信号。采用两级运放设计电路级类型功能增益第一级反相放大器0-3.3V → 0--3.3V-1第二级反相加法器偏移放大2输出电压计算公式Vout -3.3V 2 × Vin3. 软件架构与关键实现3.1 波形生成原理采用DDS直接数字合成技术通过查表法生成波形。核心组件协同工作// 典型配置流程 1. 初始化GPIODAC输出引脚 2. 配置定时器触发频率 3. 设置DMA从内存到DAC的数据传输 4. 使能DAC和定时器3.2 相位精确控制通过调整两路信号的触发时间差实现相位控制void set_phase_delay(uint32_t delay_us) { TIM_Cmd(TIM2, DISABLE); delay_us(delay_us); TIM_Cmd(TIM6, ENABLE); }频率分辨率计算公式Δf f_clk / (N × 2^32)其中N为波形点数通常取256或512。4. 实战生成并观察李萨如图形4.1 基本操作步骤连接设备通道1接示波器X输入通道2接示波器Y输入设置示波器为X-Y模式通过串口设置参数CHA SIN 1000 1.0 // 通道A1kHz正弦波1V幅值 CHB SIN 2000 1.0 45 // 通道B2kHz正弦波1V幅值45°相位调整频率比观察图形变化1:1 → 直线或椭圆1:2 → 八字形2:3 → 更复杂的闭合曲线4.2 高级应用技巧图形稳定性优化使用更高精度的时钟源如外部晶振增加波形点数512点或1024点添加软件锁相环算法特殊波形生成# Python示例生成非对称波形数据 import numpy as np points 256 asym_sine [int(2048*(1 np.sin(2*np.pi*i/points)*0.5*np.sin(np.pi*i/points))) for i in range(points)]5. 性能优化与扩展思路5.1 提升输出质量降低谐波失真的方法增加波形存储器深度采用插值算法平滑波形优化低通滤波器截止频率输出参数对比指标基础实现优化方案频率范围1Hz-10kHz0.1Hz-50kHzTHD1%0.1%相位分辨率1°0.1°5.2 扩展功能设计无线控制通过蓝牙模块实现手机APP控制波形存储外接SD卡保存自定义波形自动扫描频率/相位自动扫描功能网络同步多设备相位同步输出硬件升级建议改用STM32H7系列提升处理能力增加外部高速DAC如AD9744采用多层PCB设计降低噪声6. 教学与科研中的创新应用在高校实验室中这个低成本方案可以替代昂贵的商业设备。我们开发了一套配套实验课程实验一基础波形观察测量不同频率比下的图形稳定性验证相位差与图形倾斜角的关系实验二非线性系统分析将输出接入模拟电路观察系统非线性导致的图形畸变研究案例 某声学实验室使用该系统分析扬声器相位响应通过比较输入信号与麦克风采集信号的李萨如图形快速定位了分频器的相位失真问题。