当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]本项目使用RT-Spark开发板和STM32F407ZGT6微控制器构建,主要通过代码延时来产生频率,实现引脚的开关控制、读取按钮输入、保存状态,并通过被动蜂鸣器发出提示音。

本项目使用RT-Spark开发板和STM32F407ZGT6微控制器构建,主要通过代码延时来产生频率,实现引脚的开关控制、读取按钮输入、保存状态,并通过被动蜂鸣器发出提示音。

系统使用三个按钮进行控制。其中一个按钮用于播放声音,另外两个按钮则用于增加或减小音调频率。通过微秒级延迟函数切换GPIO引脚来生成音调,而非使用硬件定时器。这种方式使学生能够理解时间控制对嵌入式系统中信号生成的影响。

注意:软件生成的频率总是低于硬件(如定时器)生成的频率,因为代码总会引入函数开销。虽然通常延迟可能只有纳秒级微秒,但在精度方面,尤其是在时间受限的应用中,不建议使用此类方式,而应优先选择对CPU负担较小的硬件,以节省CPU资源用于其他任务。

硬件配置

软件配置

音色生成

下图展示了频率生成的核心部分,该函数通过反复改变输出引脚(PA2)的状态,并在状态转换之间添加延迟,来生成或模拟方波。持续时间是可选的,仅用于设置周期重复的次数。

“update_buttons”函数仅检查按钮状态,以防止在按住按钮时逻辑持续执行,简而言之,这是通过软件而非硬件实现的去抖动。

频率——软件与现实

由于方波完全由软件生成,因此容易出现精度误差,通常会因函数开销而产生纳秒级或微秒级的延迟,甚至更严重的情况。特别是当延迟功能本身也主要依赖软件而非硬件实现时,问题更为明显,具体如下所示。

此处显示,由于功能开销,上升沿和下降沿均出现轻微的斜坡变化,预期的100微秒周期变为约115微秒,并且电压状态在两者之间存在轻微不一致。

结论——我们学到了什么,以及本可以做什么

该项目成功展示了软件延迟、按钮输入和GPIO切换如何协同工作以控制一个无源蜂鸣器。虽然使用软件循环是理解信号时序的有效教学工具,但测试表明,软件驱动的频率在实际应用中存在明显不足。由于CPU必须依次处理每一微秒的延迟和按钮检测,函数开销会额外增加15微秒,使目标100微秒周期增加,从而导致波形失真。

为了实现近乎完美的精度,系统应从软件循环切换至STM32F407ZGT6内置的硬件定时器。通过在PWM模式下使用定时器,微控制器利用其内部硬件时钟生成方波,完全消除软件指令延迟,从而精确输出目标频率。更棒的是,一旦初始化完成,硬件定时器便会独立在后台运行,这意味着CPU几乎无需处理信号生成任务。这使处理器免于浪费周期进行倒计时或引脚切换,从而将所有资源完全用于其他任务。

同样地,将按钮去抖功能从软件程序转移到RC电路等硬件滤波器中,可以立即清理输入信号,而无需让CPU暂停等待接触反弹。最终而言,虽然软件延迟有助于演示基本概念,但要确保信号的精确性并完全减轻CPU负担,唯一的方法就是利用专用的硬件外设。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭