程序员开发实例大全宝库

网站首页 > 编程文章 正文

工程师实战:基于STM32 MCU的数字函数发生器

zazugpt 2024-09-11 11:33:58 编程文章 28 ℃ 0 评论

(本文摘自21ic论坛,作者:21ic网友 enderman1)

写在前面的话:

第一次参加论坛里的比赛,相对自己的能力进行一个检验,请大家多多关照~听说比赛截止时间是下月月底?本人决定慢慢来(虽然现在程序都写的差不多了),所以准备一天更新一次吧~(或许。。。)

本次设计采用硬件有

主控: STM32F410 主要原因是本人手头正好有个STM32F410 nucleo的官方板卡(自带ST_link)美滋滋~

示波器: 蹭实验室的~

三极管若干:可能考虑到放大产生的信号

其它:....

思路:

使用stm32 DAC功能产生各种信号 (0~3v)

先来一个板卡的靓图~~



关于这次设计我准备分为三大部分来实现:

第一部分:理论分析与方案构想

第二部分:基本功能实现与论证

第三部分:代码优化与功能扩展

额外部分:作品展示与总结+视频演示

【第一部分】

一、实现方案分析

1、大概分析:首先拿到这个题目,要求要用MCU产生各种波形(线性波形)。要了解一个道理:MCU现在采用的是stm32,它是一个离散(数字)的系统(类比计算机),若要让他产生一个模拟信号,由于单片机拥有自身的工作频率,因此每次产生的信号理想状态都是冲击函数δ(t-τ)(序列)与想要产生的波形f(t-τ)的乘积,如图所示:(忽略垃圾字...)



在实际情况下相当于对t时刻进行平顶抽样之后产生的那个值(也可以看作一个很窄门函数平移的结果),如图:



而目的是产生一个线性的模拟信号,因此当取样周期τ趋近于无穷小的时候,才可以达到理想状态,当然对于单片机来说(对于一个离散的数字系统而言)是不可能的,因此要尽量减少产生信号的周期;当然就算再减少,在示波器也可以看到阶梯状的信号~如图:



放大--


2、难点分析:这个题目的难点个人认为是产生高斯噪声,主要原因是噪声是随机的,一个离散的系统(计算机,单片机等)无法产生一个真正的随机数,因为srand()里放的种子一般是时间或是与时间相关的值,都是有规律可循的,因此很难产生一个真正的随机数。当然解决办法也是有的,我会在后面提到。但是我又审了一遍题突然又发现原来是周期高斯函数。。。。。。。波形是这样的:



当然,还有就是自定义信号,可能会比较难设计。。。

3、题目分析:产生正弦信号,三角波,锯齿波等等,都可以用公式来实现;信号叠加功能可以直接叠加两个产生信号的函数相加即可;总而言之,主要是实现它们的算法。

4、实现思路分析:配置一个固定频率的dac产生信号,也就是说门函数是固定的,这也带来一个弊端:产生的信号频率越高,越失真(说白了就是越容易变成阶梯状的函数),好处就是容易写~ 请看下图:




显而易见,频率大的信号在一个周期之内所遍历的梳状函数更少。。

二、硬件设计分析

设计框图:



1、说实话,这个题目涉及的硬件设计部分并不多,最多也就是用洞洞板或是画PCB电路图制作一个板卡的转接板,转接板上可以搞一些按键,和OLED显示转接口;按键来控制输出信号的参数,OLED来显示当前输出信号的参数。

2、我选择打板(听说现在打板很便宜??)我居然有个骚气的想法:这个转接板甚至连原理图都不用画,直接。。。

三、软件设计分析

说实话,快半年没有正儿八经的写32的程序了,于是我决定省点事儿,主要是跑思路。。。

软件设计用的keil 5 STM32CubeMX(自动生成初始化代码美滋滋)

总之今天就到这里了,其实今天已经吧功能写的差不多了;明天准备把今天写的代码完善一下。。。主要是晚上刚刚从实验室回来懒得拎示波器,所以也没法往下进行咯,今天先整理下思路,明天见~

更多内容,请点击 查看更多 阅读。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表