1611182791 发表于 2014-11-14 22:27:16

51单片机的意波形产生器!

本帖最后由 1611182791 于 2014-11-15 20:26 编辑

A、简介!
       大家好!在这里我向大家介绍一种利用51单片机产生任意波形的方法,所使用的单片机是STC12C5A60S2,方法比较拙劣,还希望高手们不要笑话我,从论坛上面学习了很多东西,想回报一下论坛,很多时候,都想写一点什么东西出来,希望对广大的初学者有一点点帮助。但总是没有什么好东西拿的出手,只好拿这个东西出来献献丑,特别感谢阿莫给了我们这么一个交流平台,第一次发帖,许多地方都不知道改怎么弄,也许触犯了许多规则,希望大家原谅,最近我们学校在组织一个电子设计竞赛,出的就是这个题,另一方面我个人认为这个案例也值得给那些正在备战2015全国大学生电子设计竞赛的同学们练练手,该题目涉及到数字信号到模拟信号的转换,但是比较简单,具体题目如下,但是由于时间能力有限在这里我主要介绍一下基础部分的实现方法,希望对读者有所帮助。
B、题目内容。
一、 任务根据DDS实现原理,用单片机设计并制作一台函数信号发生器,使之能产生正弦波、三角波、锯齿波、方波等信号,其系统框图如图1所示。

图1 函数信号发生器方框图
二、 要求1.基本要求
(1)函数信号发生器能产生正弦波、锯齿波、三角波和方波等周期性波形;
(2)除方波之外的波形输出信号频率在10Hz~500Hz范围内可调,输出信号频率稳定度优于10-3;
(3)在1kW负载条件下,输出信号的电压峰-峰值Vopp在0~5V范围内可调;
(4)输出信号波形无明显失真。
2.发挥部分
(1)除方波之外的波形输出信号频率范围扩展为1Hz~1KHz,输出信号频率可分段调节:频率值可通过键盘进行设置;
(2)在50W负载条件下,输出信号的电压峰-峰值Vopp在0~5V范围内可调,调节步进间隔为0.1V,输出信号的电压值可通过键盘进行设置;
(3)可显示输出信号的波形;
三、 说明(1)设计制作中不能够采用现成的DDS芯片。
四、 评分标准

项目
满分

设计报告
(30)
系统方案
4

理论分析与计算
9

电路与程序设计
9

测试方案与测试结果
5

设计报告结构及规范性
3

基本要求
(50)
实际制作完成情况
50

发挥部分
(70)
完成第(1)项
20

完成第(2)项
20

完成第(3)项
30





总分

150






C、设计思想。
      主要设计思想就是我们常说的查表法,除此之外也还有一些其它实现方法,在这里我首先利用MATLAB把我所需要的波形绘制出来,然后保存出来我所需要的波形参数,这个过程需要在MATLAB里面完成,接下俩我把上面获得的波形参数以数组的方式存入单片机内部,当然如果需要存储许多波形的话可以外加一块存储器,用来存储波形参数,有的朋友在网上看到过的光立方,其实部分作品它的花样的实现方法也是类似的,有了波形的参数接下来就可以从刚才存进去的表里面不断地读取数据送入单片机端口进行实时输出(打印出来),显然现在输出的都是一些有某种规律数字,但是我们所谓的波形显然都是模拟信号,所以我得在后面加了一个DA转换的电路把这些奇怪的数字转化为模拟信号(这个时候我们就可以很直观的感受到信号的模样了),我所使用的芯片是DAC0832(对是一个比较古老的芯片没有现代好多芯片方便时尚,但是它经典!)。
D、MATLAB数据采集。
      首先我在MATLAB里面编写不同函数的波形,然后保存出来波形数据,具体细节如下图所示,以正弦波为例:

运行上面的代码结果如下:

从这里可以获得波形参数:
双击Y1:

在这里需要对上面的数据就行取整运算。在把数据保存到单片机的数组里面。

当然在这里我改变了取点的个数,取得比较多。
E、单片机部分。
      在单片机部分其实都不用干什么,目前只要写一下数据的打印到端口和按键检测代码就基本可以了,以后还要添加波形显示部分和调整峰值部分的代码。



F、硬件部分。
(1)硬件部分原理图:
      这个原理图经验证没有问题,大家可以放心使用。

(2)硬件部分PCB:这个PCB里面我由于画的仓促,有个地方忘了接地,当时在这里卡了好大一会。

在实验室腐蚀出电路板焊接好之后:

G、测试。
方波:当然方波不用查表法,方波最开始可以用来测试硬件有没有问题。

锯齿波:

正弦波:波形有些失真了,这个是之前拍的照片,现在的波形可漂亮多了,频率2K没有问题。


萨函数:我实际测试的时候频率达到了500多赫兹,也还可以进一步提高,这里我主要是为了让波形更加平滑,所以频率比较低。


H、补充说明。
    我在这里所使用的方式是“查表法”,它的优点是速度快,缺点是实现起来稍微比较麻烦,另外个人也试过“计算法”,主要是锯齿波和三角波等一些规律比较简单的波,也就是根据表达式直接用单片机来计算所需要的点,这个可以去试试看,还是比较好玩的。



czzhouyun 发表于 2014-11-14 22:32:05

图片呢?另0832貌似老的掉牙的DAC了吧,还用啊,怎么一点与时俱进的观念都没有啊

aammoo 发表于 2014-11-14 22:32:52

楼主你知道你违规几条不?

68336016 发表于 2014-11-14 22:39:26

file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps102.tmp.png

楼主给那么多这种本地路径,是想让我们访问你电脑吗?{:lol:}

gsnDragon 发表于 2014-11-14 23:38:11

新手练手还是可以的

amigenius 发表于 2014-11-15 00:00:43

一看到“基于“就烦,直接关

我要你的目光 发表于 2014-11-15 00:06:19

顶个!!

亲爱的混蛋 发表于 2014-11-15 00:11:19

楼主的字体太漂亮了

卡斯发动机 发表于 2014-11-15 00:16:48

这个是课程设计吗?还是不错的

1611182791 发表于 2014-11-15 10:43:05

czzhouyun 发表于 2014-11-14 22:32
图片呢?另0832貌似老的掉牙的DAC了吧,还用啊,怎么一点与时俱进的观念都没有啊 ...

不好意思,第一次发帖,许多地方不知道怎么弄,还希望高手多多指点,我一定虚心学习!谢谢!

1611182791 发表于 2014-11-15 10:45:05

卡斯发动机 发表于 2014-11-15 00:16
这个是课程设计吗?还是不错的

谢谢您的支持!希望对您有所帮助!

1611182791 发表于 2014-11-15 10:50:17

1611182791 发表于 2014-11-15 10:43
不好意思,第一次发帖,许多地方不知道怎么弄,还希望高手多多指点,我一定虚心学习!谢谢! ...

我感觉东西不一定要新,关键是在于他的经典,我也有用过其他的芯片IIC通讯的,但是由于条件差,实验室就有一对这个芯片,我能不用吗?我个人比较喜欢那些经典的东西,你说我不会与时俱进我也接受,物尽其用就好!

1611182791 发表于 2014-11-15 10:51:11

aammoo 发表于 2014-11-14 22:32
楼主你知道你违规几条不?

不好意思,第一次发帖,许多地方不知道怎么弄,还希望高手多多指点,我一定虚心学习!谢谢!

whuer 发表于 2014-11-15 10:52:35

唯有鼓励加油

1611182791 发表于 2014-11-15 10:52:48

amigenius 发表于 2014-11-15 00:00
一看到“基于“就烦,直接关

呵呵!谢谢你的提醒。个人也有这个感觉,只是昨天时间紧,现在修改了。

1611182791 发表于 2014-11-15 12:33:09

whuer 发表于 2014-11-15 10:52
唯有鼓励加油

感谢你的支持,我一定会努力的!

1611182791 发表于 2014-11-15 12:35:09

亲爱的混蛋 发表于 2014-11-15 00:11
楼主的字体太漂亮了

嘿嘿!我第一次发帖,字体呀什么都不清楚,还希望大家能多多指导我。谢谢!

1611182791 发表于 2014-11-15 12:36:53

我要你的目光 发表于 2014-11-15 00:06
顶个!!

感谢支持!

1611182791 发表于 2014-11-15 12:38:22

czzhouyun 发表于 2014-11-14 22:32
图片呢?另0832貌似老的掉牙的DAC了吧,还用啊,怎么一点与时俱进的观念都没有啊 ...

我感觉东西不一定要新,关键是在于他的经典,我也有用过其他的芯片IIC通讯的,但是由于条件差,实验室就有一对这个芯片,我能不用吗?我个人比较喜欢那些经典的东西,你说我不会与时俱进我也接受,物尽其用就好!

1611182791 发表于 2014-11-15 12:39:31

gsnDragon 发表于 2014-11-14 23:38
新手练手还是可以的

嘿嘿,感谢支持!

XA144F 发表于 2014-11-15 12:40:07

看来你该试试AtXmega了,这个单片机有DAC和DMA,产生波形更容易,如果通过串口连接电脑,让电脑下载任意波形文件就更好。
当然,STM32更好,用定时器驱动dac和dma,效果比51的好的多。

mo_fish 发表于 2014-11-15 12:49:27

amigenius 发表于 2014-11-15 00:00
一看到“基于“就烦,直接关

大学的毕业设计{:titter:}

太极风436 发表于 2014-11-15 12:56:06

牛11584849

renmin 发表于 2014-11-15 13:04:58

支持一下

小咯咯怒 发表于 2014-11-15 13:06:30

查表法。。{:shocked:}

1611182791 发表于 2014-11-15 13:53:13

小咯咯怒 发表于 2014-11-15 13:06
查表法。。

嗯,一直比较笨的方法,其实应该是用上位机给,让后单片机输出波形这样比较人性化。

1611182791 发表于 2014-11-15 13:59:19

XA144F 发表于 2014-11-15 12:40
看来你该试试AtXmega了,这个单片机有DAC和DMA,产生波形更容易,如果通过串口连接电脑,让电脑下载任意波 ...

好的,感谢您的指点,确实现在好多单片机都有AD和DA,这个方法是接下来想尝试的,由于做上位机没有经验,我想现在先在51上面学习学习,等基础差不多了再去学习学习32等。

1611182791 发表于 2014-11-15 14:01:36

mo_fish 发表于 2014-11-15 12:49
大学的毕业设计

那些年我们做过的毕业设计,许多毕业论文开题就是个基于什么什么的、、、、好友节奏感,嘿嘿!

lovecxm 发表于 2014-11-15 14:01:50

你的整个思路很清晰,从原理到实现都干的不错!

1611182791 发表于 2014-11-15 14:05:03

renmin 发表于 2014-11-15 13:04
支持一下

嘿嘿,感谢支持!

硬件小y 发表于 2014-11-15 14:05:17

以前做过玩..

1611182791 发表于 2014-11-15 14:13:56

lovecxm 发表于 2014-11-15 14:01
你的整个思路很清晰,从原理到实现都干的不错!

嘿嘿,谢谢支持,第一次发帖,不懂事,只希望能给读者带来那么一点小启发我就满足了。

jys2500 发表于 2014-11-15 14:14:20

楼主,说好的DDS呢?用DAC不是DDS的实现原理吧?

fancyboy 发表于 2014-11-15 14:15:43

PWM输出直接滤波可以省去DAC芯片,SPWM技术,D类运放就是这个原理

1611182791 发表于 2014-11-15 15:38:25

jys2500 发表于 2014-11-15 14:14
楼主,说好的DDS呢?用DAC不是DDS的实现原理吧?

DAC不是DDS技术,具体的你可以去查查看,我所使用的思想就是DDS的思想。

1611182791 发表于 2014-11-15 15:41:00

fancyboy 发表于 2014-11-15 14:15
PWM输出直接滤波可以省去DAC芯片,SPWM技术,D类运放就是这个原理

SPWM确实是个不错的想法,我以前也试过这个方法,但是频率调节不太方便,各有各的优势吧。

hyb0830 发表于 2014-11-15 15:46:41

支持一下

bailao99 发表于 2014-11-15 16:26:40

能分享一下滤波器设计思路吗?很好奇一组滤波器参数可以出各种频率的光滑正弦波

fancyboy 发表于 2014-11-15 18:50:06

1611182791 发表于 2014-11-15 15:38
DAC不是DDS技术,具体的你可以去查查看,我所使用的思想就是DDS的思想。

dds实质就是dac打点

buptzjw 发表于 2014-11-15 19:01:39

做的挺不错的,加油。

1611182791 发表于 2014-11-15 19:51:25

buptzjw 发表于 2014-11-15 19:01
做的挺不错的,加油。

嘿嘿!感谢你的支持。

1611182791 发表于 2014-11-15 19:53:41

fancyboy 发表于 2014-11-15 18:50
dds实质就是dac打点

对!说道点子上面了,其实就这么简单,我就是把波形的参数通过DAC打出去。

1611182791 发表于 2014-11-15 19:59:49

bailao99 发表于 2014-11-15 16:26
能分享一下滤波器设计思路吗?很好奇一组滤波器参数可以出各种频率的光滑正弦波 ...

您好!首先感谢您的关注,我这里其实没有用滤波器,我是直接用查表法的思想实现的,没有用SPWM的方法,若用SPWM的方法麻烦之处就是滤波器的设计,而且要设计不同频带范围的带通滤波器,滤波器设计起来本身就很讲究,不过站在学习的角度可以试试看。所以您也就不必好奇,现在我确实设计不出可以出各种频率的滤波器。

wangyu_2011 发表于 2014-11-15 20:13:12

内存太小,分辨率太低,速度太慢,说实话没太大用处。

jingshi_yun 发表于 2014-11-15 20:20:06

这个只要低通就好了,频率比较低,随便凑一下就差不多了。。。用滤波的话,效率比起楼主的方案高。比较适合正常功率大一些的应用

1611182791 发表于 2014-11-15 20:30:16

wangyu_2011 发表于 2014-11-15 20:13
内存太小,分辨率太低,速度太慢,说实话没太大用处。

这个确实没有很大的实际用途,主要是用来练手的,让高手见笑了。{:lol:}

1611182791 发表于 2014-11-15 20:34:18

jingshi_yun 发表于 2014-11-15 20:20
这个只要低通就好了,频率比较低,随便凑一下就差不多了。。。用滤波的话,效率比起楼主的方案高。比较适合 ...

好的!学习了,我在这里抛砖引玉,我这个确实只是练练手,估计没有什么实际运用价值。

wangyu_2011 发表于 2014-11-15 20:42:03

在50W负载条件下和1KW负载,没有看到这部分啊。这部分如果真做成,还真是有点意思。

txyuseing 发表于 2014-11-16 13:17:48

适合大学生比赛的方法
不适合工程应用

newywx 发表于 2014-11-18 09:24:01

楼主这个做的挺好的
页: [1]
查看完整版本: 51单片机的意波形产生器!