【STM32 + HAL库】倒立摆

旋转倒立摆的起摆与稳摆---QYC ** 基于STM32控制的旋转倒立摆 ** 文章目录基于STM32控制的旋转倒立摆前言一、旋转倒立摆的结构1.相对编码器与绝对编码器2.相对编码器与绝对编码器的信号采集3.STM32编码器模式4.使用STM32CubeMx配置过程二、倒立摆模型建立三、实验方案与实验现象1.整体方案2.实验现象与上位机数据反思与总结 前言 近期在学习简易旋转倒立摆装置,倒立摆其实是一个十分经典的自动控制模型,不过开始学习了解结构和原理还是花了很多时间,在思路以及调试过程中遇到了很多困难。 我认为倒立摆有两个难点,一个是自动 阅读详情

一天时间终于做完了这颗倒立摆,能够实现持久站立,但是抗干扰能力很弱。

先上两张未经排版的图(好吧,不能上传GIF)

截止本文写完,该摆最长站立了17分钟。

【硬件部分】

1、倒立摆机械部分由老师提供,由同步轮+同步带带动滑台在光杆上运动;角度反馈部分为安装在倒立摆下端的高精度电位器

2、电机为带编码器的减速直流电机,由TB6612芯片驱动

3、主控板为stm32f103vet6开发板

4、电机使用学生电源提供10V电压驱动,单片机由电脑USB供电。

【使用HAL库构建硬件层代码】

 

1、RCC时钟树配置

在CubeMX中,使用外部晶振提供时钟源,通过锁相环倍频到72MHz提供给外设,ADC模块的时钟不能太高,否则会影响转换精度。详细配置如图

 

2、TIM8编码器模式配置

使用stm32f103高级定时器TIM8的编码器模式,测量电机的转速。

在模式选择窗口,选择通道串联模式,由两个TIM输入通道接入正交编码器的A线和B线。

详细配置窗口中,选择向上计数,不允许自动重装载。编码器模式下,选择在通道1和通道2的上升沿计数。理论上而言,这样会导致计数值是实际值的4倍(但是实际程序中不是)

编码器数值由软件直接读取和重置,不需要重装载,也不需要中断。

注意将GPIO脚设置为上拉输入,部分编码器没有接上拉电阻,需要单片机内部提供。

 

3、ADC1测量电位器阻值

配置ADC1的一通道对电位器阻值进行测量,从而获取倒立摆的倾角。

如图是选择Channel1独立测量、连续测量模式,因为只有一个通道测量,所以扫描测量模式关闭。AD转换同样不需要中断,在软件中直接触发一次转换,之后读取转换值即可。

4、TIM1输出PWM

在模式配置中,选择时钟源为内部时钟源72MHz,选择通道一为PWM输出模式

在配置选项中,我们需要产生频率为1000Hz,占空比可变的PWM。可以选择预分频系数为72-1,预分频之后得到1MHz时钟信号;重装载寄存器为1000-1,得到1000Hz的PWM。选择PWM Mode 1,当计数器值小于某个值时,输出高电平,否则输出低电平(Mode 2)相反。同时配置输出GPIO为推挽输出模式。

【串级PID算法】

部分内容来自个人理解,如果不当,恳请批评指正。

显然这是一个串级PID算法。

第一级PID输入为倒立摆的实际角度和目标角度,输出电机的目标转速。

实际上输入为ADC转化的电位器两端的电压值,目标值为电位器在平衡位置时ADC转换的电压值,输出为目标转速。

第一级PID主要由比例和微分控制,由于下面还有一层PID,所以积分环节要么选择误差过零时将积分项清零,要么选择较小的积分限幅。考虑到倒立摆对平衡性要求较高,误差过零时将积分项清零的方法将使第一级PID的输出在平衡位置发生跳变,所以选择积分限幅,限制幅值较小,但积分参数较大。

第二级PID输入为电机的目标转速和实际转速,输出电机的PWM。

第二级PID主要由PID三项控制构成,原本决定不用I控制,但是在实际调试过程中,由于电机存在一定的死区,在平衡位置附近PWM输出很小,电机不转,严重影响控制品质;可以按固定的PWM值进行死区补偿,但是这样较为死板,考虑到倒立摆的摆动是一个相对慢的过程,所以使用积分项。同样需要积分限幅。

 

【调试过程】

一开始PID调了好久都没有效果,冷静下来才发现方法不对。后来的调试过程如下:

1、先给第一级PID赋较大的P,I和D参数为0

2、利用Arduino的串口绘图器,将目标值与实际值绘图,观察变化趋势,调节第二级参数

3、利用Arduino的串口绘图器,将目标值与实际值绘图,观察变化趋势,调节第一级参数

 

调试过程中的小技巧:

设置当倒立摆角度大于一定角度之后,电机目标速度置0,避免了频繁开关电源。

把倒立摆固定好,如果桌面不平且倒立摆在桌面上移动,那么每次调试时平衡位置对应的电位器的值不同,需要频繁尝试。

 

【主要代码】

pid.h

#ifndef __pid_H_
#define __pid_H_
#includ
现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab) 建立直线一级倒立摆系统的动力学模型,推导该系统的运动方程,求出直线一级倒立摆系统传递函数模型及空间状态方程模型。接着描述了PID控制系统设计原理及PID控制器各校正环节的作用,简要叙述了参数的整定方法。设计了直线一级倒立摆摆杆摆角及小车位置常规单回路控制器,通过Simulink仿真知道常规单回路控制器能控制摆杆摆角,不能控制小车位置。于是设计出了直线一级倒立摆双闭环控制器及基于倒立摆系统的状态空间方程控制器,利用软件进行仿真,仿真结果表明,常规双闭环控制方案和基于状态空间方程加控制方案均能对摆杆摆角及小车位 阅读详情

相关推荐

基于STM32 HAL库的旋转倒立摆实战:从双环PID调参到自动起摆算法详解

本文详细介绍了基于STM32 HAL库的旋转倒立摆实现方法,涵盖双环PID调参和自动起摆算法。通过硬件选型建议、传感器数据采集优化及双环PID控制设计,帮助开发者快速掌握倒立摆控制技术。重点解析了角度环和位置环的实现细节,以及自动起摆的改进型bang-bang控制策略,为电子设计竞赛和控制系统开发提供实用参考。

weixin_29161785的博客 149

STM32平衡车PID控制详解:从原理到代码实现与调试

PID控制是嵌入式系统和自动化领域最经典、应用最广泛的闭环控制算法之一,其核心思想是通过比例、积分、微分三种作用的组合,对系统误差进行实时校正。该算法不依赖精确的数学模型,凭借其结构简单、鲁棒性强、易于工程实现的优势,成为电机控制、温度调节、无人机姿态稳定等场景的首选方案。在嵌入式开发实践中,尤其是在资源受限的微控制器(如STM32)上实现PID,需要将连续算法离散化,并处理好积分饱和、输出限幅等工程细节。本文以双轮自平衡车这一经典嵌入式项目为载体,深入剖析**PID控制器**在**STM32**平台上的具

weixin_30703911的博客 338

基于STM32与MPU6050的倒立摆控制系统设计与实现

将倒立摆视为一个刚性质点连接在无质量杆上绕固定轴旋转的理想单摆,是一种广泛接受的建模方式。设摆杆长度为 $ L $,质心位于杆端,质量为 $ m $,重力加速度为 $ g $,摆杆相对于垂直向上方向的偏转角为 $ \theta $(单位:弧度),则其动力学方程可表示为:其中 $ u(t) $ 表示外部施加的力矩输入(由电机驱动产生)。

weixin_31597759的博客 711

STM32控制下的倒立摆系统开发实战

STM32是STMicroelectronics(意法半导体)生产的一系列32位ARM Cortex-M微控制器产品线。STM32微控制器广泛应用在工业控制、医疗设备、智能仪表等众多领域,其高性能、低功耗、丰富的外设集成和强大的扩展性是工程师们的首选。在应用STM32微控制器时,首先要了解其基本架构,包括核心处理器、存储器、以及各种外设如GPIO、ADC、UART、SPI、I2C等。

weixin_42603332的博客 1215

STM32旋转倒立摆自动起摆源码项目实战

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可定制,适应特定应用的计算机系统。随着物联网、人工智能和5G技术的发展,嵌入式系统正变得越来越智能化和网络化。未来趋势将指向更低功耗、更高性能、更强的网络连接能力和更深层次的智能化。STM32微控制器是STMicroelectronics生产的一系列基于ARM Cortex-M内核的32位微控制器。STM32系列因其高性能、高集成度和低功耗特性,在工业、医疗、消费电子和物联网等领域广泛应用于构建嵌入式系统。

weixin_42573757的博客 801

STM32实现直线倒立摆控制

本文详解基于STM32的直线倒立摆实时控制系统设计,涵盖传感器数据融合、编码器高精度测位、PWM电机驱动优化及双环PID算法实现,突出硬件资源高效利用与闭环控制稳定性提升的关键技术。

tensorflowjs6的博客 393

Pendulum源码提供

Pendulum

从仿真曲线到电路状态:用Cadence Virtuoso深度剖析CS放大器各个工作区(以电流源负载为例)

本文通过Cadence Virtuoso平台,深入剖析电流源负载CS放大器在不同工作区的表现,从仿真曲线解读电路状态。详细介绍了如何通过Vout-Vin直流扫描曲线判断MOS管工作区域(截止区、饱和区、线性区),并验证理论与仿真的一致性,提升模拟IC设计调试效率。

weixin_30940783的博客 442

利用ANSYS随机振动分析功能实现随机疲劳分析

本文介绍了ANSYS随机振动分析功能,以及利用该功能,按照Steinberg提出的基于高斯分布和Miner线性累计损伤定律的三区间法进行ANSYS随机疲劳计算的具体过程。在工程应用中,汽车、飞行器、船舶以及其它各种机械或零部件,大多是在随机载荷作用下工作,当它们承受的应力水平较高,工作达到一定时间后,经常会突然发生随机疲劳破坏,往往造成灾难性的后果。因此,预测结构或零部件的随机疲劳寿命是非常有必要的。在工程界,疲劳计算广泛采用名义应力法,即以S-N曲线为依据进行寿命估算的方法,可以直接得到总寿命。

qq_38220914的博客 7607

快手极速版抓包实战:安卓/iOS双端获取client_salt全流程解析(避坑指南)

本文详细解析了在安卓和iOS平台上获取快手极速版关键参数`client_salt`的全流程,包括环境配置、抓包工具使用、参数识别与转换等实战技巧。特别针对双端差异和反抓包机制提供了避坑指南,帮助开发者高效安全地完成数据获取任务。

weixin_29021195的博客 712

告别VBA!用Python+PyWin32自动化你的SolidWorks建模流程(附完整代码)

本文详细介绍了如何利用Python和PyWin32实现SolidWorks建模流程的自动化,替代传统的VBA宏开发。通过环境配置、宏代码转换、高级开发模式及工程化实践等实战内容,帮助机械设计师构建高效、可维护的自动化工作流,显著提升设计效率。

weixin_30485379的博客 364

DeepSeek 赋能智慧消防:以 AI 之力筑牢城市安全 “防火墙”

在数字化浪潮下,智慧消防系统亟需先进技术提升效能。DeepSeek 凭借 Transformer 架构与混合专家架构等核心技术,具备强大的多模态数据处理与智能决策能力,且支持本地化部署,保障数据安全。其在智慧消防领域的应用成效显著,从实现火灾风险动态感知与早期精准预警,到优化智能接警调度、设备健康管理,再到辅助应急指挥与疏散,有效降低火灾风险与事故损失。未来,DeepSeek 有望在智慧消防领域持续拓展,同时也需应对技术、数据等多方面挑战。

邓邓子的博客 1690

北斗导航 | 基于LSTM-KF融合的北斗卫星定位算法研究框架

针对北斗卫星导航系统在复杂环境下存在的多路径效应、非视距传播等问题,提出一种基于长短期记忆网络(LSTM)与卡尔曼滤波(KF)的组合定位算法。通过LSTM网络建模定位误差的非线性特征,结合卡尔曼滤波实现动态噪声抑制,构建"粗定位-LSTM校正-卡尔曼滤波优化"的三级处理架构。实验表明,融合算法较传统方法定位精度提升42.7%,均方根误差降低至1.2米。

尘世冰封的专栏 920

腾讯滑块验证码防水墙 tdc.js 补环境实录

腾讯滑块验证码破解研究摘要 本文记录了破解腾讯防水墙滑块验证码(tdc.js)的全过程。研究重点包括: 流程分析:通过抓包分析验证码完整链路,识别出关键参数collect和eks需从tdc.js虚拟机获取 环境模拟:采用渐进式补环境方法,针对字节码虚拟机特性构建完整的window对象,包括navigator、screen、canvas等API的精确模拟 核心破解:成功调用TDC.getData()和TDC.getInfo()获取关键参数,解决POW计算和滑块缺口识别问题 优化调整:针对errorCode 5

码王吴彦祖的博客 224

【FPGA教程案例55】深度学习案例2——基于FPGA的CNN卷积神经网络之ReLu激活层verilog实现

在本课程中,我们将对CNN的ReLu函数模块的FPGA实现做详细的介绍和学习。从仿真结果可知,通过Rule激活函数之后,小于的输入数据输出为0,否则输出是输入本身。,我们对CNN的基本原理有了初步认识。ReLu函数具备如下优缺点。按照课程1相似的操作方式。

FPGA/MATLAB学习教程/源码/项目合作开发 2691

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 【Python + Mysql + UI】学生信息管理系统(附代码)
下一篇: Java学习笔记1------基本程序设计结构
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值