软件考核作品制作指南

铁人战队 发表于 2023/09/20 ‐ 阅读这篇文章大约需要 1 分钟

软件考核作品制作指南

前言

软件考核作品项目早已发布,不过没有太多的详细说明,也没有提供一些实现的思路,在这篇文章里,我们将会提供一些实现的思路,以及一些细节上的注意事项,方便大家更好的设计自己的作品。

基本要求

软件考核作品的基本要求如下:

  • 作品的核心逻辑实现必须是自己编写
  • 编程语言必须使用 C 语言

此外,还有一些额外的要求:

  • 作品应该运行在 51 单片机或者类 STM32 单片机上,且不能使用 Arduino 框架

作品:电机速度闭环控制

电机速度闭环控制通俗来说就是通过编程控制电机的转速,使得电机的转速在不同情况下都能保持在一个规定的值,而不会出现空载速度和负载速度不一致的情况。

电机速度闭环控制的实现思路如下:

传感器

既然我们需要控制转速,那么测量转速的传感器就是必不可少的。通常我们会用编码器来测量电机的转速。

有关编码器的详细介绍可以看这里:https://zhuanlan.zhihu.com/p/592671918

电机驱动

如果你事先学习过单片机,那么你应该知道单片机的 IO 口输出的电流是非常小的,所以不能像点灯一样直接将电机接到单片机的 IO 口上,这样会导致单片机 IO 口损坏。

那么,替代方案是什么呢?答案是电机驱动模块。

电机驱动模块的作用相当于一个可以被单片机控制的开关,它可以将单片机输出的电流放大,从而驱动电机。

我们可以用这一款电机驱动模块:https://detail.tmall.com/item.htm?id=717996181216&skuId=5007479424763

驱动模块的资料,在商品详情页已经给出了,这里不多做介绍。

电机和编码器的购买

目前市面上独立的编码器比较昂贵,所以我们可以选择带有编码器的电机,这种电机加编码器的价格比较便宜,而且使用起来也比较方便。

可以购买类似这样的电机:https://item.taobao.com/item.htm?id=601605175305#

电源

由于我们的电机功率比较打,因此普通的电源可能无法满足电机的工作,所以我们需要使用电池来为电机供电。如果只是为了学习,可以用 4 节1.5V 的干电池串联起来,对于个人来说,这样的电池成本比较低,而且方便携带。

为此,我们需要一个电池盒,可以在这个链接购买https://detail.tmall.com/item.htm?id=18671310668&skuId=3420483933226

单片机的供电可以使用 USB 线供电,大部分单片机的系统板都提供电源接口。如果没有,可以考虑购买一个稳压模块,将电池的电压降到 5V,然后接到单片机的 5V 供电口。

速度测量

编码器的原理是旋转一周,就会产生固定数量的脉冲,我们通过单片机可以计算出固定时间内(比如 100ms)产生的脉冲数量,从而计算出电机的转速。

控制算法

有了上面的准备,我们就可以开始实现速度闭环控制了。有两种方案可以供参考。

方案一:固定增量控制

这种方案的思路是,我们通过编码器测速电机速度,然后将测得的速度与我们期望的速度进行比较,如果测得的速度小于期望的速度,那么我们就固定增加电机的转速,如果测得的速度大于期望的速度,那么我们就固定减小电机的转速。

这个方案简单粗暴,当然也要很多缺点:

  • 响应能力差,如果实际速度和预期速度相差很大,那么调整速度的时间就会很长
  • 速度不稳定,因为我们只是固定增加或者固定减小电机的转速,所以电机的转速会在一个范围内波动

方案二:PID 控制

PID 控制是一种比较常见的控制算法,有关算法的详细介绍可以参考这里:https://blog.csdn.net/m0_38106923/article/details/109545445

通过将实际速度与期望速度作为 PID 控制器的输入,我们可以得到一个控制量,这个控制量就是我们对电机的输出控制( PWM )。

作品的基本要求

  • 能实现电机的速度闭环控制

作品:基于旋转编码器的数字舵机控制

旋转编码器

旋转编码器是一种可以测量旋转角度增量的传感器,它可以测量旋转的方向和旋转的角度。他们大致如下图所示:

旋转比那目前

旋转编码器在旋转其轴时会产生两个数字脉冲信号,这些信号称为 A 相和 B 相。A 相和 B 相的波形如下图所示:

AB相波形

通过单片机可以测量 A 相和 B 相的脉冲信号个数,从而计算出旋转过的角度以及旋转的方向。

数字舵机

舵机是一种常见是伺服电机,它可以通过控制信号来控制舵机的转动角度。数字舵机是一种可以通过数字信号来控制的舵机,它的控制信号是一种 PWM 信号,通过改变 PWM 信号的占空比,我们可以控制舵机的转动角度。

舵机

作为学习目的,购买一个比较便宜的舵机即可,例如这一款: https://detail.tmall.com/item.htm?id=678498890304&skuId=4891585889747

舵机的控制信号是一种 PWM 信号,不过与电机控制不同,舵机的控制信号周期为 20ms,占空比为 0.5ms~2.5ms,其中 0.5ms 对应 0 度,1.5ms 对应 90 度,2.5ms 对应 180 度。

控制方案

我们可以在程序中设置一个变量,用来记录当前的舵机输出角度。然后定期读取旋转编码器的脉冲信号,根据脉冲信号的个数,计算出应该调整的角度(可以自行设定),然后更新记录舵机输出角度的变量,最后将变量的值转换为 PWM 信号,输出到舵机。

作品的基本要求

  • 能够根据旋转编码器的脉冲信号,调整舵机的角度
  • 能够正确处理角度越界的情况(如在一个方向上角度调整到舵机上限后,继续调整角度,应该阻止角度更新,而不是出现异常)

作品:基于旋转编码器的LED调光

有关编码器部分请参考上一节内容。这个作品与上面的作品的区别在于,我们不需要控制舵机,而是控制 LED 的亮度。亮度的控制基于 PWM 技术。

作品的基本要求

  • 能够根据旋转编码器的脉冲信号,调整 LED 的亮度
  • 当亮度调整到最大或者最小时,能够正确处理极限的情况,内部记录值不应该继续增加或者减小。

作品:单按键控制多功能系统设计

在一些按键数量受限而功能又比较多的情况下,我们可以通过单按键不同的操作来实现多种功能。

功能需求

我们需要实现的功能如下:

通过程序逻辑实现一个按键的短按,长按,双击等操作,然后通过控制 LED 点亮方式,来表示切换不同的功能,例如单击一次点亮 LED,双击闪烁 LED,长按关闭 LED。

按键与 LED 模块均可从淘宝购买,也可使用开发板上的按键和 LED 模块(如果有)。

功能的实现可以参考这篇文章: https://blog.csdn.net/pillarpeng/article/details/50999782

作品的基本要求

  • 能够实现按键的短按,长按,双击等操作
  • 要有 LED 灯等指示类元件,来表示不同功能。
  • 按键逻辑的实现不得有辅助类IC,必须是算法实现。
Top