SmartKnob移植ESP32和STM32——棘轮手感

这篇具有很好参考价值的文章主要介绍了SmartKnob移植ESP32和STM32——棘轮手感。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



SimpleFOC、ODrive和VESC 教程链接汇总:请点击

说明


1、SmartKnob源码使用SimpleFOC驱动电机,移植之前要有一定的SimpleFOC基础。

2、本篇主要移植了电机控制部分,其它如蓝牙、wifi、OLED显示屏没有涉及。

3、官方版本使用的是5V供电,本教程在现有驱动板的基础上移植,使用的是12V供电,smartknob中的参数可以直接用,但想要获得更好的效果还需要调试。

4、灯光色彩的变化可以让SmartKnob显得光彩夺目,本文专注电机控制核心技术,没有灯光的烘托,移植后的表现黯然失色,请理性面对。

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

一、SmartKnob简介

  • SmartKnob 利用电机模拟机械旋钮的效果,且模式灵活多变,自带高级感,据说宝马的车内旋钮就是这样的。
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

  • github网址:https://github.com/scottbez1/smartknob
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

二、SmartKnob移植ESP32

代码主要移植电机运动控制的算法,选择自己习惯的电机即可,本篇教程使用 2804电机 + AS5600编码器。

官方代码中使用MT6701编码器,本人也同时移植了MT6701和AS5047P编码器,只是AS5600的用户更加广泛,所以本篇教程以AS5600为例。

注意,请使用云台电机,航模电机有齿槽效应且功率大容易发热,并不适合当前应用场景。

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

ESP32drive 购买链接:https://item.taobao.com/item.htm?ft=t&id=662591519566,图锐科技
2804电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

2.1、电机部分

  • 移植要先找到一个合适的示例,代码中不需要电流采样,所以简单点的就可以应对,
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
    对这个代码不熟悉的,请阅读这篇教程:SimpleFOC之ESP32(三)—— 闭环控制

  • 电机运动控制全靠算法,PID参数我做了较大修改似乎没有差别,保持官方一致,
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

  • 核心算法如下,都是Arduino环境,移植还是比较简单的,复制粘贴,
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
    移植的代码比较多比较碎,不再一一截图。

  • 电机共有10种控制模式,对应不同的效果,
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

  • 需要测试哪种模式,代码中配置。
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
    每次只能体验一种模式,效率比较低,下面增加按键切换功能。

2.2、增加LED和按键

2.2.1、LED闪烁

  • 上电点亮,进入主循环后闪烁,做为板子正常运行的指示。
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2.2.2、按键

  • 官方代码中提供了10种模式,按下电机时模式切换。
  • 通过查看硬件设计和代码可以看出,按键的实现,原创者做了2种方案:应变片和MT6701。

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2.2.2.1、应变片方案

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

应变片是一个电阻,电机被按压后PCB发生变形,应变片阻值变化,高精度的24位A/D转换器芯片 HX711采样,ESP32通过SPI接口读取HX711的采样值,

  • 通过代码可以看出,震动分为2次,按下时强震,松开时轻震,
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

  • 移植后的震动代码,下图:
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2.2.2.2、MT6701方案
  • 通过应变片检测按压,一致性差量产工艺复杂,而且按压寿命短可靠性估计也不高,
    代码中使用MT6701,做为磁编码器,除了拥有较高的性价比外,还有按钮功能,而这个功能在当前的磁编码器中并不常见。
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

  • 在原理图中可以看到这个引脚并没有使用,我理解为,这是一个 预留方案,
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2.2.2.3、实体按键
  • 本次移植,直接用板载 Boot 按键,可能不够炫,但足够实用,
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2.3、增加氛围灯

底板上使用了8颗SK6812灯珠,按下按键,电机震动的同时色彩变化,效果会更好。
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2.3.1、WS2812

WS2812和SK6812,可以理解为一样的灯珠,只是名字不同。

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2.3.2、FastLED 库

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

  • 代码中设置红色,实际灯珠点亮为绿色,搞了一上午没找到原因。
  • 又找了别的库显示是正确的,“Freenove_WS2812_Lib_for_ESP32-1.0.5”,
  • 不想继续查找原因了,本来这个氛围灯就不是重点。留给大家吧

2.3.3、Freenove_WS2812_Lib_for_ESP32 库

这个库比 FastLED 简单多了,色彩显示也准确,当然功能也少,

1、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
2、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
3、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
4、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
5、

SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
6、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
7、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
8、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
9、
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

ESP32drive 购买链接:https://item.taobao.com/item.htm?ft=t&id=662591519566,图锐科技

  • 添加灯光控制到代码中,只做了简单的红绿色变化。
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

  • 最终效果
    SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
    不得不承认,毫无美感可言。不过技术都到位了,我已经尽力!
    B站视频:https://www.bilibili.com/video/BV1Gm4y187ya/?vd_source=33c70ef3713ea86e5385ac1e62223bcf
    整理后的视频:https://www.bilibili.com/video/BV1Pj411Y7j2/?vd_source=33c70ef3713ea86e5385ac1e62223bcf

ESP32drive 购买链接:https://item.taobao.com/item.htm?ft=t&id=662591519566,图锐科技
2804电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

三、SmartKnob移植STM32

相比ESP32,STM32只移植了电机控制部分,没有移植按键,也没有移植氛围灯。
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

驱动板103 购买链接:https://item.taobao.com/item.htm?ft=t&id=656368067494,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

1、本次移植是在第五篇教程的基础上移植,其实也可以在第四篇教程基础上移植,因为smartknob没有使用电流环。主要是考虑到第五篇支持更多的编码器类型,所以就用这个代码做基础了。
https://blog.csdn.net/loop222/article/details/121201638,
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

2、移植的时候修改了I2C的底层代码,I2C读编码器一直用的是片内外设,驱动板复位后经常会读不到AS5600的数据,需要断电重新上电才能恢复正常。修改后模拟I2C似乎好点。

3、keil不支持C++,所以ESP32的代码复制到STM32中,只需改下格式,总体还是比较简单的。
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

4、打勾 C99 Mode,格式变动幅度不用太大,提高移植的准确度。
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

5、模式切换,ESP32中通过按键切换,STM32板子上两个按键都不与GPIO连接,
本例中通过串口发送指令“K”实现模式切换,“K” 后面记得加上 回车换行。
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

6、代码支持以下编码器,
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

7、移植后的效果,B站视频:https://www.bilibili.com/video/BV1Gm4y187ya/?vd_source=33c70ef3713ea86e5385ac1e62223bcf


四、重点说明

4.1、串口下载

  • 在曾经一个烧写器上千元的年代里,串口下载(ISP)做为一项黑科技,可以极大的降低开发成本并为量产提供便利,我一直都认为串口是最稳定最方便的下载方式。只是随着技术发展,有了更多的下载方式,突然发现很多年轻人不会用串口下载了,准确的说不会通过按键进入boot模式。
  • 通过按键进入boot模式,我最先接触是在NXP的芯片上,后来STM32的芯片也用了相同的方法,随着STM32芯片影响的扩大,现在的芯片只要有boot模式,应该都是这个方法。
  • 我不是抱怨年轻人不行,恰恰相反,我觉得我应该向年轻人靠拢,也许以后再设计ESP32的产品我会用USB接口。

1、接线:

USB转串口 驱动板
TX RX
RX TX
GND GND

2、左手按下Boot键不松开,右手按下RST键并松开,然后再松开Boot键,此时单片机进入boot模式。

3、点击Arduino上的上传,等待下载完成。

因为USB转TTL的兼容问题,有些会通信不上,需要重复操作几次,有些是死活都通信不上,需要更换USB转TTL模块。

4.2、零点校准

  • SimpleFOC代码在驱动电机前要先 零点校准,获取电机的偏置角和方向,
  • SmartKnob使用了SimpleFOC的库,所以也要 零点校准。
  • 零点校准大概需要二十秒的时间,如果每次上电都校准比较麻烦且有负载情况下容易出错,
  • 同一个电机,只需零点校准一次,写入参数后可以不用再校准的,
  • 如果调整了电机三相接线,需要重新零点校准一次,

4.2.1、第一次使用,必须要零点校准,下图:
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

4.2.2、获取校准参数,下图:
多测几次,保证数据是准确可用的,
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

4.2.3、写入参数,重新编译上传
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件

4.3、SmartKnob参数说明

  • 官方代码目前给出了十种模式,完全通过调整参数实现,
  • 通过十多天的操作,再对比这些参数,摸索出了一点规律,可能不准确,仅用于帮助大家理解参数。

如下图,定义起点到终点为 “一步”(position_width_radians),假如一步是10°,那么一圈就是36步(max_position - min_position)。
步距越大,电机转起来的颗粒感越大(粗糙);步距越小,电机转起来颗粒感越小(细腻)。
起点到中点阻力(detent_strength_unit)起做用,阻力越大转起来越费劲,手感越紧,
中点到终点推力(endstop_strength_unit)起作用,推力越大吸合感越强,
如果步距60°,只允许转动1步,那么就是开关模式,当然你也可以把步距调大到120°,行程更长,手感更好,
如果步距10°,允许转动36步,那么就是可以转1圈的粗糙的棘轮感。
如果步距1°,允许转动360步,那么就是可以转1圈的细腻的棘轮感。
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件
参数设置要符合以下约束条件,修改时请注意,
SmartKnob移植ESP32和STM32——棘轮手感,simpleFOC,stm32,单片机,嵌入式硬件




驱动板103 购买链接:https://item.taobao.com/item.htm?ft=t&id=656368067494,图锐科技
ESP32drive 购买链接:https://item.taobao.com/item.htm?ft=t&id=662591519566,图锐科技
2804电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技


(完)

文章来源地址https://www.toymoban.com/news/detail-654192.html

到了这里,关于SmartKnob移植ESP32和STM32——棘轮手感的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机移植Lua(STM32H743移植Lua-5.4.6)

    通常单片机都是使用C/C++来开发的,任何修改都需要重新编译固件然后下载运行。在一些需要灵活性更强的场合中可以内嵌Lua解释器实现动态更新应用程序的功能。这篇文章将对相关内容做个简单说明。 Lua本身就是纯C实现的,不管是移植到上位机程序还是单片机程序中本质上

    2024年02月21日
    浏览(41)
  • 单片机移植freemodbus主机(STM32、GD32、瑞萨、国民技术等)

    从github下载:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 无法下载或者下载太慢可以用资源下载,无需积分。freeModbus主机源码下载 示例代码 参考从机代码创建 将FreeModbus主机源代码拷贝到工程中间件-第三方库-freemodbus源码库:即MiddlewaresThird_PartyFreeModbusMaster文件夹中。

    2024年02月11日
    浏览(42)
  • FreeRTOS_Stm32F103系列单片机标准库移植

    链接:FreeRTOS 下面的教程是基于从github下载压缩包进行的,最好下载这个或者直接看3.1,从我百度网盘下载。如果是别的下载源也问题不大,大同小异。 此时我们需要下载以下两个仓库, 点进去按下面的步骤下载就行了,另一个也是这样下。 链接: FreeRTOS官网 打开链接我们

    2024年01月22日
    浏览(49)
  • POWERLINK协议在stm32单片机+w5500移植成功经验分享

    连续折腾了多个晚上,又趁周末又花了一天时间,终于把powerlink协议移植成功到单片机上啦。本想放弃,但想了下不管我能不能用上,结个尾吧,分享给有需要的人。放弃并不难,但坚持一定很酷。为了移植测试这个协议花了不少血本。stm32开发板就买了两套,其中第一套板

    2024年02月09日
    浏览(57)
  • STM32 -- 实现按键的长按与短按检测(其他单片机可移植)

    目录 资源获取 一 前言 二 思路  三 实现代码 1.主要代码 四 完整代码 Key.h Key.c 该改进版本(1ms太繁琐了,我改成了25ms检测一次)   1.定时器部分 2.按键检测部分  五、参考 欢迎关注微信公众号--星之援工作室 发送(长短按检测) 今天在逛博客的时候,偶然看到了一

    2024年02月12日
    浏览(36)
  • 【HAL库】STM32+ESP8266+Onenet+MQTT,极简工程,hal库移植。

    ESP8266通过MQTT协议连接Onenet。从标准库移到了HAL库,过程有点麻烦,整了一天。做完后整理了一下,这个极简的工程,方便以后开发,也希望能帮助到大家,节约时间。 代码工程: https://github.com/wyfroom/ESP8266-Onenet-MQTT 该份代码硬件配置: 板子:STM32F103C8T6最小系统板。 外设:

    2024年02月03日
    浏览(50)
  • STM32+ESP-01s+EMQX实现单片机MQTT协议传输数据上云(二)STM32F103与ESP-01s的Usart通信,实现STM32连接上网上云

    单片机:STM32F103c8t6 WiFi模块:ESP8266-01s EMQX:自身服务器上搭载emq服务器或者借用emqx window 版本  USB TO TTL模块:CH340 因为CH340不能给ESP-01s供3.3V的电,所以测试时需要外加供电           本章中涉及到的技术原理主要为ESP01S wfi模块的AT指令通信,我在上一篇文章给大家提到了

    2024年02月16日
    浏览(52)
  • STM32+esp8266实现单片机与服务器的WiFi通信

             源码已上传至gitee: stm32: 一些stm32模块使用经验记录 - Gitee.com https://gitee.com/lrf1125962926/stm32/tree/esp8266wifi%E9%80%9A%E4%BF%A1/         本实验采用STM32F1系列+esp8266 01s模块,采用HAL库开发。主控芯片哪个系列和型号都可以,只要有两个串口(UART或者USART,以下统称串口)

    2024年02月07日
    浏览(53)
  • 单片机项目分享 单片机(stm32)远程智能宠物喂养系统 - 物联网 esp8266

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(64)
  • 单片机设计_语音识别分类智能垃圾桶(STM32 ESP8266 LD3320)

    想要更多项目私wo!!!         离线语音识别识别垃圾种类并且垃圾桶自动翻盖: 说出唤醒词“垃圾桶”后,再说一句垃圾名称,语音识别模块端识别到相应,便会将结果通过串口发送到STM32端,STM32端接着会发送打开相应垃圾桶盖的指令,6s后,垃圾桶盖自动关闭。

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包