【 电机课程设计(开源)——基于STM32的PID电机控制系统设计-第三章 系统设计及方案设定】

电机课程设计(开源)——基于STM32的PID电机控制系统设计-第三章 系统设计及方案设定

仅为记录之前学习的电机课程设计所用

第一章 系统设计及方案设定
第二章 系统硬件设计
第三章 系统软件设计


前言

本课程设计基于《电机控制技术》,旨在通过实践课程更深入地掌握电机设计原理。学生将综合运用电机学、电路分析、传感器技术、计算机接口技术、微处理器技术、电力电子学和电机设计等课程知识,以更深层次地了解直流电减速机的结构和工作原理。此外,课程还注重实际应用,特别是针对增量式PID电机调速算法的实际运用,通过理论与实践相结合的方式提供更深入的理解。


提示:以下是本篇文章正文内容

三、系统软件设计

提示:以下是系统整体流程框图
图3-1 系统整体流程框图
软件系统的整体流程框图如上图所示。系统设计遵循分层逻辑的原则,贯穿整个设计周期。首先,进行MCU外设的初始化配置,包括GPIO、I2C、TIM1、TIM2、TIM3、TIM4、systick、NVIC等的设置。其次,编写服务函数以实现控制系统的各种功能,如错误反馈(LED灯显示)、停止、复位、正转、反转、变速等。最后,在定时器中断服务函数的基础上进行各种任务的调度和执行。通过以上设计,我们可以实现对MCU外设的正确配置和初始化,确保系统的稳定运行。服务函数的编写将提供多种功能的支持,使得控制系统具备灵活性和可扩展性。定时器中断服务函数的调度机制将确保各种任务的及时执行。

3.1 PID速度控制算法设计

首先讲解一下PID,PID分为位置式和增量式,位置式是普通的PID,增量式可以理解为式位置式的微分形式。由于编程系统时离散的,所以我们用离散的PID。也就是说,累加代替积分,前后相减代表微分。

3.1 PID速度控制算法设计

首先讲解一下PID,PID分为位置式和增量式,位置式是普通的PID,增量式可以理解为式位置式的微分形式。由于编程系统时离散的,所以我们用离散的PID。也就是说,累加代替积分,前后相减代表微分。

3.1.1位置式

通过直接改变输出来保证被控制量(一般为控制位置)的稳定。
大概意思就是:就拿无人机来说明,当无人机距离所设定高度比较远时,电机转速变大,当无人机接近所设定位置时电机速度逐渐减小。
公式为:
在这里插入图片描述

3.1.2 增量式

通过改变输出的增减来保证被控制量(一般为控制速度)的稳定.
其实就是:我们要控制电机的速度,不是通过直接改变PWM的值,而是改变每次PWM的增减来控制速度的稳定。
公式为:
在这里插入图片描述

3.1.3 PID计算过程

提示:以下是为PID信号图
图3-2 PID信号图
提示:以下是为 PID代码流程图
图3-3 PID代码流程图
根据上面的步骤,我们可以很容易就能得出程序的执行流程,就是在计算误差后逐个进行PID各环节的计算,要注意的是整个采样-计算-输出的流程需要定时执行,可以在每次流程运行完后延时一段固定的时间(一般而言计算频率不高于传感器反馈频率,而若频率过低可能使控制精度下降)。
微积分都是连续的,而我们采样得到的是离散的数据点。离散状态下的积分计算其实就是把过去采样得到的所有误差加在一起,而微分计算其实就是把这一轮计算得到的误差与上一轮的误差相减。最后,我们一般还会对PID的积分和输出进行限幅(规定上下限),积分限幅可以减小积分引起的超调,输出限幅可以保护执行机构或被控对象。

3.2按键状态机控制流程简介

状态机是一种根据当前状态来执行相应动作,根据输入去改变状态的方法,出处应该在数字电路中。我们利用状态机的思想来实现按键的消抖和一些其他功能的实现。软件采用定时中断的方式进行设计。
以下是按键状态机检测程序流程图
3-4按键状态机检测程序流程图
我们的按键实验,就是以此状态图为基础,实现长短、单击按和双击。
编程思路:
①利用Switch Case多分支语句,通过检测按键引脚的点评来试下按键状态的转换;
②利用定时器产生10ms的定时中断,在定时中断服务程序中调用案件状态转换函数。每次执行的间隔10ms,可以有效的消除按键抖动,并提高CPU的利用率。
以下是按键控制程序流程图
图3-5 按键控制程序流程图
如上图所示,这是我们的按键控制程序流程图。我们一共设计了四个按键,其中KEY1有单击和双击两种工作方式,KEY2与KEY3均具有单击、双击、长按有三种工作方式,KEY4只有单击一种工作方式。当KEY1单击时,目标速度强制置0,当KEY1双击时,系统警报程序强制瘫痪,保护电机;当KEY2单击时,目标速度+30,当KEY2长按时,目标速度持续+,当KEY2双击时,目标速度+90;当KEY3单击时,目标速度-30,当KEY3长按时,目标速度持续-,当KEY3双击时,目标速度-90;当KEY4单击时,电机“run”或者“pause”。通过以上按键控制程序,我们可以方便地对电机进行不同操作。按键的单击、双击和长按功能为您提供了更多灵活的控制选项。同时,通过设置目标速度的增加和减少,您可以实现对电机转速的精确调节。这样的按键控制程序能够提高电机控制的便利性和灵活性,使系统更加智能化和易于操作。

以下为按键功能表

单击长按双击
KEY1目标速度强制置0/系统强制暂停
KEY2目标速度+30目标速度持续+目标速度+90
KEY3目标速度-30目标速度持续-目标速度-90
KEY4run/stop//

3.3 LED控制程序流程图

以下为LED控制程序流程图
图3-6 LED控制程序流程图
如上图所示,以下是对LED控制程序流程的优化描述:
LED控制程序流程如下:
①初始化LED状态和目标速度变量。
②进入主循环,不断检测目标速度和按键状态。
③当未检测到KEY1双击标志时:
判断目标速度的数值:
当目标速度为正时,LED1亮,LED2和LED3灭。
当目标速度为负时,LED2亮,LED1和LED3灭。
当目标速度为0时,LED3亮,LED1和LED2灭。
④当检测到KEY1双击标志时:
利用滴答定时器设置0.5秒为周期,不断改变LED灯的高低电平,实现LED闪烁效果。
⑤返回主循环,继续检测目标速度和按键状态。
通过以上LED控制程序,我们可以根据目标速度的不同状态以及双击标志来控制LED的亮灭和闪烁效果。LED1、LED2和LED3的状态可以反映目标速度的正负和是否为零,提供了直观的速度状态显示。当检测到KEY1的双击标志时,LED通过滴答定时器实现闪烁效果,增加了视觉上的提醒和反馈。
这样的LED控制程序使得您可以清楚地了解电机目标速度的状态,提供了直观的可视化反馈。同时,LED的闪烁效果可以吸引注意力,使重要状态更加显眼。这将为电机控制系统增添一层交互性和用户友好性。

3.4 OLED控制程序流程图

以下为OLED控制程序流程图
图 3-7 OLED控制程序流程图
如上图所示,以下是对OLED页面控制程序流程的优化描述:
OLED页面控制程序流程如下:
①初始化设备和OLED显示参数。
②进入页面1,显示作业名称、队伍信息和电机参数。
③延时5秒后,进入页面2,并显示目标速度值、实际速度值和电机运行状态。
④检测按键状态,根据按键状态更新页面2的目标速度参数。
⑤当检测到KEY1双击标志时,进入页面3,显示出错信号"ERROR"。
⑥程序强制进入死机状态。
通过以上OLED页面控制程序,您可以实现三个不同的页面显示。页面1显示作业名称、队伍信息和电机参数,页面2显示目标速度值、实际速度值和电机运行状态,页面3显示出错信号"ERROR"。
程序初始化后,首先进入页面1进行信息展示,随后延时5秒进入页面2。在页面2中,程序会不断检测按键状态,根据按键状态的改变来更新目标速度参数的显示。当检测到KEY1的双击标志时,程序切换到页面3,显示出错信号"ERROR"。

3.6 本章小结

系统设计遵循分层逻辑的原则,这是确保系统结构设计严谨的关键。通过采用分层逻辑的设计原则,我们将系统的功能和任务划分为不同的层次,使得每个层次都有特定的职责和功能。这种分层的设计方法有助于提高系统的可维护性、可扩展性和可重用性。通过将功能模块划分到不同的层次,我们能够实现模块化的设计和开发。每个层次都有清晰的接口和功能划分,使得不同的团队成员可以并行开发,并且在后续的维护和升级过程中也更加方便。
此外,结构设计的严谨性也是我们设计过程中的重点考虑因素。我们对系统的各个模块进行了仔细的规划和组织,确保了模块之间的协调和衔接。同时,我们注重代码的可读性和可维护性,采用合适的命名规范和代码注释,使得整个系统的结构清晰可见。
在单片机上电后,系统进入准备状态,并等待用户按下按钮来触发相应的程序。根据PA0和PA1引脚的高低电平逻辑,我们确定直流电机的正转或反转方向。通过加减速按钮,可以调整目标速度,利用PID算法实现精准的控速,通过调节PA8引脚输出PWM的占空比,进而控制延时时间以调节电压大小,从而控制直流电机的转速。
在调速过程中,需要特别注意各项参数的稳定性和合理性。软件调试一般分为以下四个阶段:首先是编写程序并进行错误排查,确保代码的正确性;然后使用C语言编译系统对源程序进行编译,生成可执行文件;接着进行编译连接程序,并及时发现潜在错误,对代码进行完整性检查;最后,根据发现的错误进行修正。在本次调试中,我们遇到了一些常见问题,例如一些函数名未定义、在抄录程序时遗漏了符号导致错误、函数名录入时的缺失或顺序颠倒、未正确调用和定义函数以及芯片引脚定义错误导致实验现象缺失等。在软件调试过程中,我们认真分析并修复了出现的错误。通过多次调试,我们最终达到了预期的设计效果。
这一过程中展现了团队的耐心和专注,通过认真分析错误并逐步改进,成功地解决了问题,确保了系统的稳定性和功能完整性。

本系列文章仅为学习记录所用。
上一章:基于STM32的直流减速电机PID控制系统设计(系列文章)——第二章 系统硬件设计
下一章:电机课程设计系列文章——基于STM32的直流减速电机PID控制系统设计-第四章 代码移植与功能测试分析

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开源硬件是一种基于开放的设计原则和共享的思想,将硬件设计的所有源代码和相关文档公开,供其他人学习、使用和改进。基于STM32的自动刹车灯设计是一种利用开源硬件理念和STM32芯片开发的汽车安全装置。 首先,STM32是一款功能强大的微控制器,具有高性能、低功耗和丰富的外设接口。利用STM32的强大处理能力和丰富的资源,我们可以实现自动刹车灯的设计。 自动刹车灯的设计主要包括两个部分:传感器和控制模块。传感器用于检测车辆的加速度和刹车状态,控制模块负责根据传感器数据判断车辆是否需要刹车,并控制刹车灯的亮灭。 传感器可以选择加速度传感器和刹车状态传感器。加速度传感器可以检测车辆的加速度变化,当加速度大于设定阈值时,表示车辆急刹,需要点亮刹车灯;刹车状态传感器可以检测车辆的刹车踏板状态,当踏板处于按下状态时,表示车辆需要刹车,需要点亮刹车灯。 控制模块主要由STM32芯片、输入输出接口和控制逻辑组成。STM32芯片接收传感器的信号,并根据预设的刹车条件判断是否需要点亮刹车灯。如果需要刹车灯亮起,STM32控制输出接口将触发刹车灯的点亮。 此外,为了增加灵活性和可拓展性,我们可以将设计开源化,将设计原理和源代码等相关文档公开,供其他人学习和改进。通过开源硬件的分享和协作,可以促进创新和改进,使得自动刹车灯设计更加优化和安全。 总的来说,基于STM32的自动刹车灯设计利用开源硬件的思想和STM32芯片的优势,结合传感器和控制模块实现了车辆自动刹车灯的功能,提高了驾驶安全性。将设计开源化可以促进技术的分享和创新,为汽车安全领域的发展做出贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值