矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3923|回复: 15

做个简单的信号发生器

[复制链接]
     
发表于 2020-4-3 17:59:41 | 显示全部楼层 |阅读模式
本帖最后由 isoimg2130 于 2020-4-3 18:01 编辑

        能发出振幅-2.5V到+2.5V,可调偏置。若不需偏置就是输出0.6-5V,1hz-10MHz的正弦波,三角波和方波,但是3M以后波形变形,所以实际输出只能到3M。
        这是原理图 QQ截图20200403171157.png QQ截图20200403171218.png
        焊元件过程省略,做好的样子是6块一样尺寸的板子拼成一个正方体就当壳子了。实际效果是如下图:

侧颜

侧颜

俯视

俯视

        以下是输出的波形。

1M方波

1M方波

1V5三角波100K

1V5三角波100K

1V5正弦波200K

1V5正弦波200K

1V正弦波167K

1V正弦波167K

2M正弦波

2M正弦波

2V三角波5HZ

2V三角波5HZ

2V三角波64KHZ

2V三角波64KHZ

2V正弦波2HZ

2V正弦波2HZ

2V正弦波465hz

2V正弦波465hz

500毫伏1KHZ正弦波

500毫伏1KHZ正弦波

程序.rar

121.44 KB, 下载次数: 64

评分

3

查看全部评分

     
发表于 2020-4-3 19:56:44 | 显示全部楼层
        我看不简单,够复杂的。
回复 支持 反对

使用道具 举报

     
发表于 2020-4-3 20:18:32 | 显示全部楼层
这个信号发生器很不简单!
回复 支持 反对

使用道具 举报

     
发表于 2020-4-3 20:28:33 | 显示全部楼层
创意不错,我也觉得有点复杂
回复 支持 反对

使用道具 举报

     
发表于 2020-4-3 23:25:04 | 显示全部楼层
六块PCB板的构想独特,有创意。
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 00:29:59 | 显示全部楼层
膜拜大佬
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 00:52:25 | 显示全部楼层
请教老师一个问题:正弦波您是怎么产生的,程序中调用了数学库吗?
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 07:27:42 来自手机 | 显示全部楼层
正直电子 发表于 2020-4-4 00:52
请教老师一个问题:正弦波您是怎么产生的,程序中调用了数学库吗?

c都支持正弦运算
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 07:51:20 | 显示全部楼层
iffi123 发表于 2020-4-4 07:27
c都支持正弦运算

哈哈,我这还没玩过这个了,这就去试试
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-4-4 08:23:46 | 显示全部楼层
正直电子 发表于 2020-4-4 00:52
请教老师一个问题:正弦波您是怎么产生的,程序中调用了数学库吗?

  当不起老师,要是想让单片机本身就能产生1M的波形,51显然是不现实的,把一个数与一下0x8000,要了5毫秒,搞的我for循环都不敢用。直接复制了16遍代码。STM32f103应该可以。我仿真过AVR和51的。若是正弦波的话,模拟DA,看点数多少。我试了下,AVR能到1K。
  1. void zhengxianbo(void)                                                                //获取不同点数的正弦波数据
  2. {
  3.     u8 i;
  4.     float x;                                                                   //弧度
  5.     float jiao=(float)360/quyangdianshu;                                            //角度 分度角//quyangdianshu: 一周期内的取样点数
  6.     for(i=0;i<quyangdianshu;i++)               
  7.     {
  8.         x=jiao*i;                                                                    //得到角度值
  9.         x*=3.14/180;                                                                 //角度转弧度  弧度=角度*(π/180)         
  10.         shuju[i]=(u8)((float)fenbianlv/2*sin(x)+fenbianlv/2);                        //一周期内对应DA输出最大值
  11.     }
  12. }
复制代码

然后把得到的数据用模拟DA输出就可以了。STM32有自带DA的就不需要模拟了。而我这个信号发生器程序用的AD9833产生的波形。



补充内容 (2020-4-4 22:51):
5微秒,打错了。

单片机产生波形

单片机产生波形
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 08:28:53 | 显示全部楼层
本帖最后由 iffi123 于 2020-4-4 08:30 编辑
正直电子 发表于 2020-4-4 07:51
哈哈,我这还没玩过这个了,这就去试试


不过lz是用了dds芯片, stm32上次我测试fft功能,生成过1024点正弦波
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 09:26:46 | 显示全部楼层
isoimg2130 发表于 2020-4-4 08:23
当不起老师,要是想让单片机本身就能产生1M的波形,51显然是不现实的,把一个数与一下0x8000,要了5毫 ...

三人行,必有我师。
我之前也有个土办法就是用PWM实现三角波的产生,PWM波占空比增大电压升高,三角波开始上升,PWM波占空比降低电压降低,这方法很类似于刚入门写的呼吸灯,然后人为设置几个变量就能用编码器调整频率,上升时间和下降时间了,但有个缺点就是频率不会太高。成功了之后我就想能不能让PWM占空比的增量不是一个常数,而是不断改变就可以输出完美正弦波了?结果水平太差也没搞明白,这就看看您的程序
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 11:01:45 | 显示全部楼层
本帖最后由 iffi123 于 2020-4-4 11:02 编辑
正直电子 发表于 2020-4-4 09:26
三人行,必有我师。
我之前也有个土办法就是用PWM实现三角波的产生,PWM波占空比增大电压升高,三角波开 ...


PWM+LPF做DAC也是有的,要求不高场合使用, 用作可变频率正弦波,低频谐波不好过滤,波形恐怕不大好

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 11:09:50 | 显示全部楼层
iffi123 发表于 2020-4-4 11:01
PWM+LPF做DAC也是有的,要求不高场合使用, 用作可变频率正弦波,低频谐波不好过滤,波形恐怕不大好

确实,要依靠低通滤波器才行,这个方案并不好
回复 支持 反对

使用道具 举报

     
发表于 2020-4-4 16:56:53 | 显示全部楼层
"把一个数与一下0x8000,要了5毫秒",  51主频也不低,有这么夸张?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 05:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表