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