最近在学习PID算法,在了解了算法的套路以后,就要进行实验。如何用C语言实现呢?在网络搜索发现了一篇很好的博客,不过里面的数据又臭又长。在这里转载过来,重下新整理了一下。(原文链接)整理中发现,原文参考的博文已无法访问
最近两天在考虑一般控制算法的C语言实现问题,发现网络上尚没有一套完整的比较体系的讲解。于是总结了几天,整理一套思路分享给大家。
当今的闭环自动控制技术都是基于反馈的概念以减少不确定性。反馈理论的要素包括三个部分:测量、比较和执行。测量关键的是被控变量的实际值,与期望值相比较,用这个偏差来纠正系统的响应,执行调节控制。在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。
说实话整定口诀对于初学者来说,其实根本就看不懂,只有从实际整定过程中才能慢慢发觉其中的奥秘。
完整文档和源码:https://github.com/Kevincoooool/inverted-pendulum + 2017年成都信息工程大学 第六届“电协杯”电子设计竞赛
PID控制原理图下图1,PID控制系统包括三个模块:P比例控制、I积分控制、D微分控制。P比例控制:基本作用就是控制对象以线性的方式增加,在一个常量比例下,动态输出,缺点是会产生稳态误差;I积分控制:基本作用就是用来消除稳态误差,缺点是会增加超调;D微分控制:基本作用就是减弱超调,加大惯性响应速度。P、I、D根据实际控制对象选择不同组合,如PI控制、PD控制、PID控制。(参考链接:https://blog.csdn.net/weixin_48435215/article/details/125261840)
适用于UNO/2560/DUE/ESP8266/ESP32,2021年之前使用版本。
电动机作为当前最主要的驱动部件,应用范围已遍及国民经济的各个领域,随着微处理器、电力电子、控制等技术的发展,电机控制技术以电力半导体变流器件的应用为基础,以电动机为控制对象,以自动控制理论为指导,以电子技术和微处理器技术以及计算机辅助技术为手段,结合检测技术和数据通信技术相结合,实现数字化回路的电机控制成为可能。直流电动机以其调速性能好、起动转矩大等优点,在相当长的一段时间内,在电动机调速领域占据着很重要的位置。
大家好,又见面了,我是你们的朋友全栈君。 目录 0.背景 1.粒子群算法 1.1.算法简介 1.2.算法步骤 1.3.算法举例 2.PID自整定 2.1.基于M文件编写的PID参数自整定 *2.2.复杂系统的PID自整定(基于simulink仿真) 2.2.1.PSO优化PID的过程详解 2.2.2.在PSO优化过程中修改参数价值权重 阅读前必看: 本代码基于MATLAB2017a版本,如果版本不同可能会报错 请从set_para.m文件开始运行,其他M文件(+下载的资源包里面的slx文件)放在
无刷直流电机在克服了有刷直流电机机械换相缺点的同时,又具有结构简单、运行可靠以及调速性能好等优点,在很多领域中得到了广泛的应用。
在过程控制中,我们经常使用的一种算法就是PID算法了,所谓PID控制算法就是对偏差进行比例、积分、微分控制,来使偏差趋于某一固定的值,PID核心由三个单元组成:比例单元(P)、积分单元(I)、微分单元(D),PID实际上就是误差控制。
这次工程以STM32F103RC为例用CAN驱动控制两路直流无刷电机,带霍尔传感器,TIM1和TIM8用来输出PWM,TIM2和TIM4用来接霍尔,采用6步法控制算法实现电机的换向和控制,电机的转速由霍尔信号计算,每个电机的电流采用单电阻采样,使用DMA,减少CPU处理时间,使用CubeMX快速配置工程,管脚分布,生成初始工程,为了代码可读性,分配管脚时候,命名为代码中要使用的名字如霍尔三个管脚可命名为M1_HALL_H1, M1_HALL_H2, M1_HALL_H3。
也很庆幸最后有机会参与到历时四天三夜的电赛,可能是第一次参加这么大的比赛,很激动,也很紧张,那些天我估计自己总的睡眠时间不足10个小时,是蛮累的,但是现在想起来,很充足,很开心~
顾名思义,四轴飞行器由四个螺旋桨高速旋转产生升力,为其提供飞行动力。 四个电机转向正反各两个,可以相互抵消反扭矩。不同于常规固定翼飞机,多旋翼无人机属于静不稳定系统,因此必须依赖于强大的飞控系统才能飞行。 四轴飞行器可分为“十字型”和“X 型”,其中“十字型”机动性强主要应用在穿越机或特技表演无人机;“X 型”稳定性强,是最常见的四轴飞行器构型。本文中所介绍的飞控系统都是基于“X 型”四轴飞行器
简介: 用单片机控制步进电机正转 反转 加速 减速; 由LCD1602实时显示步进电机的状态;F-正转 B-反转;数字越大,转速越大; 仿真原理图如下: MCU和LCD1602显示模块:
Mindstorms EV3于2013下半年上市,是乐高公司开发的第三代可编程机器人。我们通过一个简短的视频可以简短的看一下乐高EV3机器人到底能做什么?只要发挥想象空间,你就可以组装属于你自己的智能
前言:Linux进程控制包含了进程终止,进程等待,进程程序替换。走到现在我们也只剩下进程程序替换没介绍了,那么让我们来看看进程程序替换到底是什么!
之前的几篇文章(电机控制基础篇),介绍的电机编码器原理、定时器输出PWM、定时器编码器模式测速等。
最近做完了一个直流无刷电机的电机调速项目,查阅了各种大神所写的博客和论文,在这里我只做一下小小的总结:(PS最近有遇到相关课题,发现以前的描述并不完整,因此又补充了一些。) FOC(Filed Oriented Control)是采用数学方法实现三相马达的力矩与励磁的解耦控制。 主要是对电机的控制电流进行矢量分解,变成励磁电流 I d Id Id 和交轴电流 I q Iq Iq ,励磁电流主要是产生励磁,控制的是磁场的强度,而交轴电流是用来控制力矩,所以在实际使用过程中,我们常令 I d = 0 Id=0 Id=0 。之后我将详细介绍一下这个算法的数学原理和一些自己的理解。 #FOC矢量控制总体算法简述 输入:位置信息,两相采样电流值,(3相电流、电机位置或者电机速度) 输出:三相PWM波 所需硬件:两个ADC,一个光电或磁编码器,主控,依据电压等级的不同有mosfet或者IGBT或者SiC功率模块组成的三个半桥 FOC算法在本质上就是一些线性代数中的矩阵变换,我在这里讲述的是有传感器的FOC算法,转子的位置信息是通过绝对式磁编码器反馈的,直接是数字量。
本系统主要由电位器模块、直流减速电机模块、电源模块、电机驱动模块、单片机最小系统班组成。电位器与主控芯片STM32F407ZGT6相连,通过电位的测算实时向MCU发送摆杆的状态,MCU通过控制LM298N电机驱动模块来控制直流减速电机,进而控制摆杆的状态,并使用LCD显示相关参数。
作为主控芯片的实时系统,提供多线程编程.小车的每个重要的需要实时的功能都单独作为一个线程.如小车的mpu9250姿态解算出姿态角(Roll、Pitch、Yaw )的过程就单独使用了一个线程(mpu9250),小车的PID控制速度的代码也单独使用了一个线程(speed).每个功能线程(mpu9250,speed...等)都会处理完各自的数据得出结果,并且这些结果在必要的时候提供给主线程(master)使用.也正是因为rt-thread的优先级全抢占式调度使得重要的线程能及时处理完.另外rt-thread提供的finsh/msh在调试期间起到了很大的作用,同时也可以通过远程蓝牙串口控制小车的行为.
1.电机控制是自动化控制领域重要一环。 2.目前直流无刷电机应用越来越广泛,如无人机、机械臂、云台、仿生机器人等等。 3.电机控制工程师薪水较高。
0 引言 之前介绍的电机PID控制的系列文章: 电机控制基础——定时器编码器模式使用与转速计算 电机控制基础——定时器基础知识与PWM输出原理 电机控制基础——定时器捕获单输入脉冲原理 电机控制基础—
· 选择电动机的类型、容量、电压、转速、绝缘等级、力矩、磁极对、数冷却方式、效率、等。
自从氪金购买了 Car Scanner Pro 安卓应用后,每次出行都打开 Dashboard 放在手机后台,这样 Recorder 就可以自动记录相关的 PID 和值了
在本篇博客中,我们将深入探讨eBPF(Extended Berkeley Packet Filter)的基本框架和开发流程。eBPF是一种在Linux内核上运行的强大网络和性能分析工具,它为开发者提供了在内核运行时动态加载、更新和运行用户定义代码的能力。这使得开发者可以实现高效、安全的内核级别的网络监控、性能分析和故障排查等功能。
但是,复杂问题呢,可能需要多次交互,也可能由于问题的复杂性,提问者本身描述就存在不合理的地方。
MCU是Microcontroller Unit的简称,中文叫微控制器,俗称单片机,是把CPU的频次与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,构成芯片级的计算机,为不同的应用场合做不同组合控制,诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。
姿态解算 姿态解算(attitude algorithm),是指把陀螺仪,加速度计, 罗盘等的数据融合在一起,得出飞行器的空中姿态,飞行器从陀螺仪器的三轴角速度通过四元数法得到俯仰,航偏,滚转角,这是
本文来自最近一个朋友的分享,非原创,里面的内容感觉和我之前写的模糊控制相类似,可以作为补充,前文链接:
从陀螺仪器的三轴角速度通过四元数法得到俯仰,航偏,滚转角,这是快速解算,结合三轴地磁和三轴加速度得到漂移补偿和深度解算。 姿态的数学模型坐标系 姿态解算需要解决的是四轴飞行器和地球的相对姿态问题。地
本次主要和大家分享两个闹钟程序。它们分别是同步版本、多进程版本,之后和大家分享多线程版本。
在单片机开发中,总有一些C语言基础知识是常常用到的而我们又不易掌握的,今天以STM32单片机为例,总结一下那些常用的C语言基础知识,例如逻辑运算符,结构体,宏定义以及按位运算符。
ST公司先后推出了两套主要库:标准外设库(Standard Peripherals Library)和HAL库(Hardware Abstraction Layer)。标准外设库是STM32最早发布的固件库,对STM32芯片进行了完整的封装,包含所有外设的性能特征,每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。因为发布比较早,教程比较多,目前仍有不少开发者使用。标准外设库是针对某一系列STM32芯片而设计的,没有可移植性,目前该库已将停止了更新、研发,最近几年发布的新STM32芯片已经不再支持。
上一篇讲到了C语言的数据类型,从这篇我们开始讲讲与数据类型有这着千丝万缕联系的变量。 所有语言的变量都是存储在计算机存储系统中,C语言的变量当然也不例外。所以我们先从计算机的存储系统讲起,来揭秘这个存储世界的奥秘。 1.什么是计算机的存储系统? 计算机存储系统就好比是人类的大脑,大脑记忆了人们生活中的信息,计算机存储系统则存储了计算机程序的全部信息。当我们在计算机中输入数据时计算机程序就会操作存储系统将这些信息以各种形式进行存储处理。只不过有些信息关机以后仍然存在,有些则随之消失,有些信息处理的很慢,有些
不用碳化纤维或增强碳化纤维桨调整多轴,不使用损坏的桨片。 出于安全考虑,系统默认增益都设置的比较小。请增加增益以便获取更好的控制响应。 本指导方案适用于所有的多轴飞行器。比例,积分,微分控制(PID)是最广泛的控制技术。对于典型的预估性控制而言,PID控制实质上优于执行性控制技术,比如,线性二次型调节器(Linear Quadratic Regulator) 与线性二次高斯(linear quadratic gaussian),因为这些技术都或多或少的需要系统的精确模型,所以得不到广泛的使用。PX4的目的是在个人电脑上实现设备的尽可能快速的控制,因为不是所有的被控对象的系统模型都是可获得的,因此PID调参是非常有意义的,并且PID控制适用于所有情况。 介绍 PX4采用双闭环PID控制,其外环为角度(angle)控制,角度值是由滤波与姿态解算后得到的欧拉角,有延迟且存在误差,所以单纯的单闭环无法实现姿态控制过程。所以需要引入内环,内环选择角速度(rate)控制,角速度由陀螺仪直接测量得到,误差小,响应快,延迟短。所以,综上,整个控制系统外环选择纯比例控制,没有I,D,所以参数只有三个方向的P;内环选择PID控制器,参数有P,I,D三个量;同时方向控制上还引入了前馈控制,所以还有一个参数为MC_YAW_FF file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps4638.tmp.jpg PX4地面站外环执行的飞行器角度控制 ,依靠的参数有: Roll control (MC_ROLL_P) Pitch control (MC_PITCH_P) Yaw control (MC_YAW_P) 内环使用三个独立的PID控制器实现飞行器姿态控制: Roll rate control (MC_ROLLRATE_P, MC_ROLLRATE_I, MC_ROLLRATE_D) Pitch rate control (MC_PITCHRATE_P, MC_PITCHRATE_I, MC_PITCHRATE_D) Yaw rate control (MC_YAWRATE_P, MC_YAWRATE_I, MC_YAWRATE_D) 外环输出以机身期望姿态比例为准(如果机身期望姿态为水平状态但是当前横滚方向有三十度的倾角,那么此时控制器将以每次60度输出)。内环速率控制改变电机转速以便飞行器以期望角速率旋转。 实质上增益具有直观的物理意义,比如,如果参数MC_ROLL_P增益为6,那么飞行器将以3弧度(170度)补偿0.5弧度(30度)的偏差。如果内环MC_ROLLRATE_P增益为0.1,那么内环输出为3乘0.1=0.3(外环输出输入给内环,进过PID控制后输出,若只有P=0.1,输入3,那么输出0.3)这意味着飞行器将降低一侧电机的转速,增加另一侧电机的转速使其恢复水平状态。 同样的,对于MC_YAW_FF参数,用于控制多大的用户输入用于前馈补偿给偏航速率控制器。0意味着非常慢的控制。控制器只能在检测到偏航位置误差时才开始修正。1意味着快速的响应,但是有超调,控制将执行的非常快速,误差总是保持在0附近。 电机幅值限制 正如上面的例子所展示的,在某些情况下会出现某种可能使得电机得到一个比其上限还要大的输入或者一个比0还要小的输入。如果这种情况发生,电机违背控制模型产生的升力可能会使飞行器翻筋斗。为了防止这种情况发生,PX4中加入了油门限幅。如果其中一个电机的转速偏离安全范围,系统总体推力将被变低以便控制器输出的相关比率达到一个期望值。其结果会是电机转速不会增加甚至降低,但是永远不会翻。
本次实验内容:通过CE修改器遍历出控制太阳花吐出阳光的时间变量,太阳花吐出阳光是由一个定时器控制的,首先我们找到第一个太阳花的基址与偏移,然后找出第二个太阳花的动态地址,并通过公式计算得到太阳花结构长度的相对偏移,最后我们通过C语言编程实现,遍历并修改所有图中的太阳花吐出阳光的时间,最终实现全图吐阳光。
之前一个老板说“xxx组的同学是一定要把eBPF用到得心应手”,因为之前是做性能压测相关工作,个人感觉压测其实并不复杂,复杂的是压测后的问题定位,而eBPF则是定位问题的有效工具,我们可以透过eBPF去洞悉内核的运行状态,帮助我们去做故障诊断、网络优化、性能监控、以及安全控制等生产环境中的各种问题。
参考文献 [1] 王爱元. 控制电机及其应用[M]. 第一版. 上海:上海交通大学出版社, 2013.
很多刚接触awk,sed等命令时,看到帮助文档一堆参数,一堆符号感觉有点慌,我刚开始学习时也出现过这样的问题,这篇文章从我们工作遇到的问题出发,由浅入深,重点在于阐述其工作原理和最常用的用法(覆盖我们工作80%的就很满意了),作为通读性强的文章希望能利用上下班的时间就能看懂,树立一个awk能帮我们解决哪些问题的意识。当然高级用法可以基本本篇给的思路去摸索,另外会不定期的更新使用的例子。
共计20个轻量级进程(LWP),即线程. 也可以通过/proc/6617/task查看进程6617下有多少个任务(即线程), 也是20个线程,如下.
原文链接:https://blog.csdn.net/humanking7/article/details/85335364
PID算法可以用Matlab或C语言进行学习;系统接口和输入输出可以通过三维仿真软件或实际系统进行学习。
摘要:Nano是一个小巧可爱的机器人,身高大约10公分,特点是平衡感好,长得很白以及善于卖萌。作为全球最迷你的自平衡机器人,Nano身材虽小,但配置有丰富的传感器—陀螺仪,超声波,Motion sensor,如果喜欢的话你可以让它自主巡线,跟踪,避障…更重要的是,它是完全开源的,从硬件到软件的资料都会在下文中提供下载。
最近在想自己的文章有些是不是写的太难以理解了呢.........竟然好多人看了还是会直接问我很多问题....... 其实PID哈靠自己想像就能自己写出来自己的代码,也许是网上的讲的太过的高深什么积分微
名称:四旋翼飞行器 组件:一个机架,一个陀螺仪,四个无刷直流电机,一个电池,一块单片机(能飞起来的最基本配置) 原理:利用四个电机旋转产生的反作用力托起飞行器上升,利用单片机和飞行控制算法控制电机使飞行器稳定
不需要写main函数,目前知道可以写两种函数,以“kprobe__”开头的函数和自定义函数。bpf函数至少要包含一个参数“ctx”,即使不使用也应该存在,可以声明为“void *ctx”。
上篇文章电机控制进阶——PID速度控制讲解了电机的速度环控制,可以控制电机快速准确地到达指定速度。
本文将探讨嵌入式系统中的GPIO(通用输入输出)控制,着重介绍GPIO的原理和基本用法。我们将使用一个实际的示例项目来演示如何通过编程配置和控制GPIO引脚。将基于ARM Cortex-M微控制器,并使用C语言进行编写。
领取专属 10元无门槛券
手把手带您无忧上云