ESP32(MicroPython) 编码器电机PID调参

news/2025/1/12 3:55:50/

ESP32(MicroPython)编码器电机PID调参

之前的闭环控制程序只调节了I参数,这次的程序写了完整的增量式PID算法,电机无负载,实测P=10,I=2时响应快并且无明显抖动。

代码如下

from machine import *
import time
from moto import *
import random
'''
本程序使用增量式PID,公式为
Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
e(k):本次偏差
e(k-1):上一次的偏差
e(k-2):上上次的偏差
Kp:比例项参数
Ki:积分项参数
Kd:微分项参数
Pwm:代表增量输出
'''
# 编码器初始化
pin17 = Pin(17, Pin.IN)
pin5 = Pin(5, Pin.IN)   
encoder = encoder(pin17, pin5, 0)   # 参数(编码器A相引脚,编码器B相引脚,定时器序号)# 电机初始化
motor=PWM(Pin(15),freq=1000,duty=0)
duty=0
target=50
count=0
offset=0 #e(k)
offset1=0 #e(k-1)
offset2=0 #e(k-2)
p=10 #PID参数
i=2
d=0while True:count+=1speed = encoder.read()offset2=offset1 #记录上一次偏差offset1=offsetoffset=target-speedadjustmentP=offset-offset1adjustmentP*=padjustmentI=offsetadjustmentI*=iadjustmentD=offset-offset1-offset1+offset2adjustmentD*=dadjustment=adjustmentP+adjustmentI+adjustmentDduty+=adjustmentif duty<0:duty=0elif duty>1023:duty=1023motor.duty(duty)print(target,speed,offset,duty)time.sleep(0.05)if count==40:count=0target=random.randint(0,70)

外设驱动

moto.py

from machine import *
import timeclass moto:def __init__(self, pwm0, pwm1):self.pwm0 = pwm0self.pwm1 = pwm1def setPwm(self, pwm):pwm = int(pwm)if pwm < 0:self.pwm0.duty(-pwm)self.pwm1.duty(0)else:self.pwm0.duty(0)self.pwm1.duty(pwm)class encoder:def __init__(self, pin0, pin1, i):self.pin0 = pin0self.pin0.irq(trigger=Pin.IRQ_RISING, handler=self.handler0)self.pin1 = pin1self.pin0.irq(trigger=Pin.IRQ_RISING, handler=self.handler1)self.counter = 0self.speed = 0self.tim = Timer(i)self.tim.init(period=50, callback=self.timHandler)def handler0(self, a):if self.pin0.value():self.counter += 1else:self.counter -= 1def handler1(self, a):if not self.pin1.value():self.counter += 1else:self.counter -= 1def timHandler(self, t):self.speed = self.counterself.counter = 0def read(self):return self.speed


http://www.ppmy.cn/news/904534.html

相关文章

electron globalShortcut 快捷键与系统全局快捷键冲突

用 electron 开发自己的接口测试工具&#xff08;Post Tools&#xff09;&#xff0c;在设置了 globalShortcut 快捷键后&#xff0c;发现应用中的快捷键与系统全局快捷键冲突了&#xff0c;导致系统快捷键不可正常使用。 快捷键配置 export function initGlobalShortcut(main…

map和set的模拟实现|利用红黑树封装map和set|STL源码剖析

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

【FPGA】基于C5的第一个SoC工程

文章目录 前言SoC的Linux系统搭建 前言 本文是在毕业实习期间学习FPGA的SoC开发板运行全连接神经网络实例手写体的总结。 声明&#xff1a;本文仅作记录和操作指南&#xff0c;涉及到的操作会尽量细致&#xff0c;但是由于文件过大不会分享文件&#xff0c;具体软件可以自行搜…

喜讯 | 国际智慧城市大会巨杉喜获两项大奖

近日&#xff0c;第六届中国(广东)国际智慧城市大会智慧园区和社区高峰论坛暨2018-2019年度智慧城市建设评优活动颁奖盛典在广州圆满举行。SequoiaDB巨杉数据库荣获“2018-2019年度智慧城市大数据十佳技术创新奖”及“2018-2019年度大数据新锐人物奖”两项奖项。 本次论坛由广东…

香港内推 | 上海千象资产招聘海外CTA量化研究实习生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 上海千象资产 We are Shanghai Qianxiang Asset Management Co., Ltd., a leading China qu…

新锐办公简介

新锐在线办公系统是一个先进的企业信息平台建立及维护软件。它的设计宗旨是功能强大、操作简便、界面友好&#xff0c;软件运行基于Browser/Server模式&#xff0c;符合当今技术发展的趋势&#xff1b;界面如同Windows的资源管理器&#xff0c;用户只要具备支持JavaScript和HTM…

诚聘技术英才

高级芯片设计工程师 岗位描述&#xff1a; 1.与设计团队一起参与AI并行处理器系统的设计及开发&#xff1b; 2. 根据高标准功耗、面积、性能要求下的架构定义和设计规范进行模块的RTL设计&#xff1b; 3.紧密与架构、验证、后端、软件等多个团队协同工作已解决设计问题。…

新锐技术探索

项目管理&#xff1a; Maven 代码管理&#xff1a; Git 数据服务&#xff1a; Vert.x SpringBoot Node.js 苹果开发&#xff1a; Swift 安卓开发&#xff1a; Kotlin 微服务&#xff1a; SpringCloud DubboZookeeper 容器&#xff1a; Docker 桌面开发&#xff1a; Java…