ESP32(MicroPython) 编码器电机闭环控制

2023-11-13

本人最近查找资料时,发现ESP32上的使用MicroPython的编码器电机相关程序较少,闭环控制程序都是Pyboard上的,与ESP32不完全兼容。本人通过micropython编程 esp32+drv8833+霍尔编码器_micropython 编码器_青右的博客-CSDN博客

上的程序读取编码器计数,然后另写了控制程序,有两个版本。程序把目标速度与实际速度的差乘以预设的倍数载加到PWM占空比上,相当于PID控制中的P,后续视实际需要做其它功能。

这个程序每隔一段时间取随机目标转速,并且可以从串口输出相关数据,主要用于调参。

from machine import *
import time
from moto import *
import random

# 编码器初始化
pin27 = Pin(27, Pin.IN)
pin14 = Pin(14, Pin.IN)   
encoder = encoder(pin27, pin14, 0)   # 参数(编码器A相引脚,编码器B相引脚,定时器序号)

# 电机初始化
motor=PWM(Pin(15),freq=1000,duty=0)
duty=0
target=50
count=0
  
while True:
    count+=1
    speed = encoder.read()
    offset=target-speed
    adjustment=offset*2
    duty+=offset
    if duty<0:
        duty=0
    elif duty>1023:
        duty=1023
    motor.duty(duty)
    print(target,speed,offset,duty)
    time.sleep(0.05)
    if count==100:
        count=0
        target=random.randint(0,70)

这个程序用于通过串口输入目标速度并调速

from machine import *
import time
from moto import *
import random
import _thread

# 编码器初始化
pin27 = Pin(27, Pin.IN)
pin14 = Pin(14, Pin.IN)   
encoder = encoder(pin27, pin14, 0)   # 参数(编码器A相引脚,编码器B相引脚,定时器序号)

# 电机初始化
motor=PWM(Pin(15),freq=1000,duty=0)
duty=0
target=50
i=0

def set_target(duty,i):
    global target
    while True:
        target=int(input("input target"))
_thread.start_new_thread(set_target, (duty, i))

while True:
    speed = encoder.read()
    offset=target-speed
    adjustment=offset*2
    duty+=offset
    if duty<0:
        duty=0
    elif duty>1023:
        duty=1023
    motor.duty(duty)
    time.sleep(0.05)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32(MicroPython) 编码器电机闭环控制 的相关文章

  • 相当于 java PBKDF2WithHmacSHA1 的 Python

    我的任务是构建一个 API 的使用者 该 API 需要带有 UNIX 时间种子值的加密令牌 我看到的示例是使用我不熟悉的 Java 实现的 在阅读文档和其他堆栈文章后一直无法找到解决方案 使用javax crypto SecretKey j
  • Python 3 中的递归搜索 JSON/DICT

    我在 Python 3 中实现了一些 API 这些 API 允许我根据班级代码接收有关学校的信息 但我想知道如何通过类代码获取信息 例子 我输入代码GF528S我希望程序告诉我班级 3C INF 地址 Address 1 Milan 如果可
  • Python3 http.server:将日志保存到文件中

    我使用Python3 6编写了一个简单的HTTP服务器来重定向所有请求 我写的文件可以找到here https github com kmahyyg learn py3 blob master antiscanhttp py 我可以在 Ub
  • 动态添加jinja模板

    我有一个 jinja 模板 它是一组 div 标签内的唯一内容 div include temppage html div 当我按下按钮时 我想用其他内容替换标签之间的所有内容 我希望用另一个 jinja 模板 include realpa
  • 如何为 apscheduler 指定“记录器”

    我正在尝试学习如何使用 Python 的 apscheduler 包 但它会定期抛出以下错误 No handlers could be found for logger apscheduler scheduler 该消息似乎与计划作业中的错
  • Scrapy 未通过请求回调从项目中的已抓取链接返回附加信息

    基本上 下面的代码会抓取表格的前 5 项 其中一个字段是另一个 href 单击该 href 会提供更多信息 我想收集这些信息并将其添加到原始项目中 所以parse应该将半填充的项目传递给parse next page然后刮掉下一位并返回完成
  • SQLAlchemy+pymysql 错误:sqlalchemy.util.queue.Empty

    尝试使用 Eclispse 在 Ubuntu 上运行 Python 2 SQLAlchemy 0 8 和 MySQL5 2 但我不断收到以下错误 我使用 pymysql 实际上是 pymysql3 引擎 模块监视器 from sqlalch
  • 使用 RGB 数据将输入数据剪切到 imshow 的有效范围(对于浮点数为 [0..1],对于整数为 [0..255])

    我尝试将 MRI 切片转换为 PNG 格式后运行图形切割算法 我不断遇到以下问题 Clipping input data to the valid range for imshow with RGB data 0 1 for floats
  • 在 LINUX 上使用 Python 连接到 OLAP 多维数据集

    我知道如何在 Windows 上使用 Python 连接到 MS OLAP 多维数据集 嗯 至少有一种方法 通常我使用 win32py 包并调用 COM 对象进行连接 import win32com client connection wi
  • Jupyter 笔记本中未显示绘图

    我正在尝试为 Anscombe 数据集创建 2x2 图 加载数据集并分离数据集中的每个类 import seaborn as sns import matplotlib pyplot as plt anscombe sns load dat
  • Tornado:DummyFuture 不支持结果阻塞

    我试图获得一个非常简单的初始服务器 它可以 异步 获取 url 来工作 但它会抛出 Exception DummyFuture does not support blocking for results 有这个SO https stacko
  • 仅获取图像中的外部轮廓

    我有这段代码 可以在图像中绘制轮廓 但我只需要外部轮廓 import cv2 import numpy as np camino C Users Usuario Documents Deteccion de Objetos 123 jpg
  • 在python中打开带有重音符号的文本文件

    我尝试使用 Python 2 7 打开法语文本文件 我使用了命令 f open textfr r 但是当我使用 f read 我失去了重音字符 我明白了u J xc3 xa9tais xc3 xa0巴黎而不是J tais 巴黎等 当在lin
  • Unpivot Pandas 数据

    我目前有一个DataFrame布置为 Jan Feb Mar Apr 2001 1 12 12 19 2002 9 2003 我想将数据 逆透视 使其看起来像 Date Value Jan 2001 1 Feb 2001 1 Mar 200
  • Python Pandas DateOffset 使用另一列中的值

    我以为这会很容易 但下面的内容并不适合我想要的 只是尝试通过使用另一列中的值将天数添加到预先存在的日期时间列来计算新的日期列 我下面的 偏移 列只有 1 位数字 df new date df orig date apply lambda x
  • 使用 MinGW 链接到 Python

    我不想创建一个嵌入Python解释器的跨平台程序 并用MinGW编译它 但是 Python 二进制发行版没有提供 MinGW 链接的库 仅python32 lib对于 Visual C 并且 Python 源包不提供使用 MinGW 编译的
  • 使用 asyncio 时应该如何创建属性?

    在创建使用 asyncio 的类时 我发现自己处于属性 getter 需要进行 io 操作的情况 因此该函数应该是一个协程 然而 等待房产的感觉却很不寻常 这是我的意思的一个最小的例子 该代码有效并且可以运行 import asyncio
  • 类型提示:解决循环依赖

    以下产生NameError name Client is not defined 我该如何解决 class Server def register client self client Client pass class Client de
  • 为什么 Python ggplot 返回名称“aes”未定义?

    当我使用以下命令时 p ggplot aes x DTM y TMP1 data data 我收到以下错误 NameError name aes is not defined 你可以帮帮我吗 你需要导入aes from ggplot imp
  • 重定向到破折号中的 url

    我正在使用 dash 构建一个仪表板 每当单击特定数据点时 我都会创建一个唯一的 url 如何将用户重定向到此创建的 url 我正在使用下面给出的代码 每当有人单击任何数据点时 单击事件就会触发并执行回调函数 app layout html

随机推荐