基于51单片机的波形发生器系统仿真设计 其它仿真设计也可加好友 实现功能: 1、通过按键切换波形。 可输出正弦波/方波/三角波/锯齿波/组合波(正弦波+三角波+锯齿波)/梯形波 2、切换波形时,数码管显示0-5,蜂鸣器响一声 3、通过按键设置步进值(0、10…90、100Hz)后,可按设定的步进值进行频率(10-2000Hz)调节 4、可调节方波的占空比(±10% / 10%-90%) 5、通过滑动变阻器调节波形幅度大小 6、可通过按键对锯齿波进行取反 包含仿真+源码 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言 PS:频率过高波形会失真

先来唠唠这波形发生器到底怎么玩转的。咱们用STC89C52这块经典51单片机当大脑,配合DAC0832做数模转换,直接上Proteus搭了个能摸得着的虚拟实验室。别看这玩意儿体积小,能折腾的花样可不少——六种波形一键切换,频率、占空比、幅度全都能调,连数码管都会跟着蹦数字。

按键切换波形这块最带劲,代码里直接玩起了乾坤大挪移。看这段中断处理:

void keyscan() interrupt 0
{
    EX0 = 0;
    delay_ms(10);
    if(KEY == 0){
        wave_type++;
        if(wave_type >5) wave_type=0;
        beep = 0;  //蜂鸣器叫一声
        display_num(wave_type);
    }
    EX0 = 1;
}

每次按键触发外部中断0,wave_type这个全局变量就+1,超过5就归零。数码管显示当前波形编号时还特意加了消隐处理,不然数字跳变时会有残影。蜂鸣器驱动电路接了个三极管放大,不然51的IO口推不动。

波形生成的核心在定时器中断里,不同波形对应不同算法。正弦波用查表法最省事,256个点的正弦表直接存进code区:

code unsigned char sin_wave[] = {128,131,134,...,125}; //256个预计算值

方波实现最暴力,直接操作IO口电平。占空比调节用了个小技巧——在定时器中断里动态调整高低电平持续时间:

if(square_cnt < duty_cycle) P1 = 0xFF;  //高电平
else P1 = 0x00;  //低电平
square_cnt = (square_cnt+1)%100;

频率调节更刺激,通过改变定时器重装值来实现。比如要输出1kHz波形,定时器每50us就得中断一次(因为每个周期要200个点)。注意当频率超过1500Hz时得降低DAC采样点数,不然更新速度跟不上就会失真。

基于51单片机的波形发生器系统仿真设计 其它仿真设计也可加好友 实现功能: 1、通过按键切换波形。 可输出正弦波/方波/三角波/锯齿波/组合波(正弦波+三角波+锯齿波)/梯形波 2、切换波形时,数码管显示0-5,蜂鸣器响一声 3、通过按键设置步进值(0、10…90、100Hz)后,可按设定的步进值进行频率(10-2000Hz)调节 4、可调节方波的占空比(±10% / 10%-90%) 5、通过滑动变阻器调节波形幅度大小 6、可通过按键对锯齿波进行取反 包含仿真+源码 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言 PS:频率过高波形会失真

锯齿波的取反功能特别有意思,其实就是把DAC输出值做反向计算:

//正常锯齿波
output = ramp_cnt;  
//取反后
output = 255 - ramp_cnt;

组合波的处理有点烧脑,得把三种波形的数值做加权叠加。为了防止溢出,每个波形的幅值都先除以3:

combined = (sin_wave[sin_cnt] + tri_wave[tri_cnt] + saw_wave[saw_cnt]) / 3;

滑动变阻器调幅度是通过ADC0832实现的,不过仿真里直接用了Proteus的模拟输入控件。读取到的电压值映射为0-255的幅值系数,最终输出前做个乘法运算:

final_output = raw_output * amplitude / 255;

调试时踩过几个坑:频率太高时波形畸变,后来发现是中断服务程序执行时间太长,把部分计算移到主循环才解决;占空比调节时边缘有毛刺,加了施密特触发器整形才好些。

源码里最妙的要数那个状态机设计,把波形选择、参数调整、显示刷新这些任务安排得明明白白。比如频率步进设置时,短按切步长,长按直接跳转的设计,完全靠定时器计数长按时间来实现。

最后上电测试,方波上升沿约1.2us,正弦波THD控制在5%以内,拿虚拟示波器量出来的指标基本达标。不过真要实物制作的话,建议在DAC后面加个运放做滤波,不然高频段的噪声能让人怀疑人生。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐