0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ElectronBot教程之数字舵机

云深之无迹 来源:云深之无迹 作者:云深之无迹 2022-08-04 11:57 次阅读

相信这个东西很多人都见过,大佬做的一个机器人

大部分人都是在关注功能本身,只有我看上了这个改装的小舵机。因为市面上的舵机只能接收PWM信号,进行角度控制。

这就有问题了。

在这种情况下我们只能发送指令,让舵机运动,却不能接收指令,从而知道它的运动状态。同时,想要让舵机进行反驱,就必须能让舵机随时进行输出力矩的切换。小驱动器支持IIC总线通信PID闭环控制,位置回传,还能设置最大的输出力矩,断电储存参数等。

0d3a9d56-130e-11ed-ba43-dac502259ad0.png

更加详细的一些内容在readme里面

魔改后的舵机通过I2C接口和控制板进行通信,STM32F4的控制板为主机,舵机为从机。通信的过程始终是主机发起的,主机首先下发位置、参数等指令,然后即时取回相关数据完成一个通信来回。

每个舵机作为从机接收两个地址的指令:自己的ID号,以及0号广播。广播用于在没有给舵机设置地址的时候作为通配地址使用(比如你刚烧写完舵机固件,此时舵机的Flash是没有储存自己的ID的,只能通过0号地址通信)。

值得注意的是:舵机和主机的上电需要有先后顺序,一定要先让从机初始化完成开始监听数据,再让主机发送指令!

如果主机发送指令的时候从机不响应,或者多个舵机地址相同同时响应,都可能引起通信错误,因此需要保证上述的顺序。

由于硬件上主机和舵机上电都是同时的,所以在主机的固件代码中,有一个延时2S的代码(其实可以不用那么久),就是等待舵机都上电初始化完成再开始通信。

调试的时候,一个舵机一个舵机调试,注释掉其他未连接的舵机的通信代码,不然也会造成轮询等待超时。

0d614ffa-130e-11ed-ba43-dac502259ad0.png

舵机指令的含义

0d89abc6-130e-11ed-ba43-dac502259ad0.png

大概的样子

0dbcc0c4-130e-11ed-ba43-dac502259ad0.png

改装后的样子

0dd37710-130e-11ed-ba43-dac502259ad0.png

在库里面,我画图的地方是舵机库的位置

0de91a8e-130e-11ed-ba43-dac502259ad0.png

一开始的话就看fw这个就行,下面是用较为低级的一个库写的。

0e038b9e-130e-11ed-ba43-dac502259ad0.png

单独的keli工程

终于里面的芯片是这样的,舵机马达的驱动IC

0e5ea768-130e-11ed-ba43-dac502259ad0.png

IC简单的介绍

0e6f9410-130e-11ed-ba43-dac502259ad0.png

DK是右边的,方便调试和下载,量产的时候就用前面的就行。

0ec27644-130e-11ed-ba43-dac502259ad0.png

右边就是我们的驱动IC了

0ee73074-130e-11ed-ba43-dac502259ad0.png

这是两个版本的正反面

0f12cdce-130e-11ed-ba43-dac502259ad0.png

当然AD里面可以拿到两个

0f4b4c58-130e-11ed-ba43-dac502259ad0.png

LP2992

0f6ad672-130e-11ed-ba43-dac502259ad0.png

0fa0f590-130e-11ed-ba43-dac502259ad0.png

两版的原理图

0fd156c2-130e-11ed-ba43-dac502259ad0.png

这个就是LDO,输入的是5V,输出就3V3

0fe02c9c-130e-11ed-ba43-dac502259ad0.png

这个驱动芯片需要5V

0fef84f8-130e-11ed-ba43-dac502259ad0.png

3,4是PWM的脚

1007ba64-130e-11ed-ba43-dac502259ad0.png

内部的框图

10249436-130e-11ed-ba43-dac502259ad0.png

这个是控制的真值表

103a6982-130e-11ed-ba43-dac502259ad0.png

这个是预定的一些参数

10591db4-130e-11ed-ba43-dac502259ad0.png

典型波形图

1078c934-130e-11ed-ba43-dac502259ad0.png

舵机的话,就使用这样的原理图

1092d5f4-130e-11ed-ba43-dac502259ad0.png

这个是main文件

10ea1292-130e-11ed-ba43-dac502259ad0.png

但是具体的实现是在CPP文件里面

1102c846-130e-11ed-ba43-dac502259ad0.png

这个主控文件,就是这么简单

111caa90-130e-11ed-ba43-dac502259ad0.png

在一开始会声明两个对象,一个舵机,一个板子的配置

113853f8-130e-11ed-ba43-dac502259ad0.png

在这个类里面,他包装了一下舵机的信息,包括实现的PID功能

115a4c4c-130e-11ed-ba43-dac502259ad0.png

这些就是共有的接口

11679000-130e-11ed-ba43-dac502259ad0.png

私有的变量,命名清晰赞一个

1177425c-130e-11ed-ba43-dac502259ad0.png

设置要转的角度

11854d16-130e-11ed-ba43-dac502259ad0.png

设置是否开启舵机

119fa756-130e-11ed-ba43-dac502259ad0.png

设置转矩的设置

11c0640a-130e-11ed-ba43-dac502259ad0.png

输入是是位置和值

11e6f8d6-130e-11ed-ba43-dac502259ad0.png

这个就是PWM的输出函数

12109eca-130e-11ed-ba43-dac502259ad0.png

放大一点看

12345cd4-130e-11ed-ba43-dac502259ad0.png

这个库函数的参数

125bae92-130e-11ed-ba43-dac502259ad0.png

  1. 定时器的句柄,

2.已经被配置好的定时器通道,

3.要对比的寄存器

电机的转速是和PWM的占空比成正比的。

126d71cc-130e-11ed-ba43-dac502259ad0.png

PWM波的生成

12962a54-130e-11ed-ba43-dac502259ad0.png

生成的原理

12b1e262-130e-11ed-ba43-dac502259ad0.png

这里就是使用了两个定时器

1309c5fe-130e-11ed-ba43-dac502259ad0.png

下面是4个定时器的通道

1331e0a2-130e-11ed-ba43-dac502259ad0.png

还记得板子的断电信息存储的功能吗?这就是储存数据

1357b480-130e-11ed-ba43-dac502259ad0.png

在每次上电后,都会取里面的数据

13898802-130e-11ed-ba43-dac502259ad0.png

判断目前的配置情况

13a5e27c-130e-11ed-ba43-dac502259ad0.png

进行数据的赋值

13c5a1fc-130e-11ed-ba43-dac502259ad0.png

把取到的数据都放在motor的类里面,以便于后面的使用,最后一个就是装载完成。

13e74a46-130e-11ed-ba43-dac502259ad0.png

初始化两个PWM的通道

14056e54-130e-11ed-ba43-dac502259ad0.png

然后这才开始初始化IIC硬件

142410ac-130e-11ed-ba43-dac502259ad0.png

就是一段代码了,应该是很简单的

145b5558-130e-11ed-ba43-dac502259ad0.png

IIC的寄存器就是这些了

14853562-130e-11ed-ba43-dac502259ad0.png

使用7位模式

14a245b2-130e-11ed-ba43-dac502259ad0.png

最后的三行代码

在从模式下接收一定量的数据,在非阻塞模式下使用中断 。

param hi2c 指向 I2C_HandleTypeDef 结构的指针,该结构包含 * 指定 I2C 的配置信息。

param pData 指向数据缓冲区的指针

param Size 要发送的数据量 * @retval HAL 状态

14bddfc0-130e-11ed-ba43-dac502259ad0.png

200HZ下获取数据

14db16d0-130e-11ed-ba43-dac502259ad0.png

频繁的判断,舵机要工作的模式

14fe8a20-130e-11ed-ba43-dac502259ad0.png

对电压的测量是使用的回调函数

15194072-130e-11ed-ba43-dac502259ad0.png

接下来是大段的协议封装

也就是我们的中断回调函数

153d864e-130e-11ed-ba43-dac502259ad0.png

会先来判断一下HAL的状态

155cdf94-130e-11ed-ba43-dac502259ad0.png

这是要发送和接受的I2C数组

1578fb3e-130e-11ed-ba43-dac502259ad0.png

看右边

15a2fd12-130e-11ed-ba43-dac502259ad0.png

自己看这个数组的顺

15d0c26a-130e-11ed-ba43-dac502259ad0.png

使用的是switch的结构来解读信息

当这个信息是0x01的话,

15f5acd8-130e-11ed-ba43-dac502259ad0.png

会从这里的进行一个数据的组装

160666b8-130e-11ed-ba43-dac502259ad0.png

TX万事了RX,安排发送

16238180-130e-11ed-ba43-dac502259ad0.png

最后是一个控制数据的发送,从ADC读取,接着是angle角度的计算,把角度给PID的函数处理,平滑轨迹,最后设置PWM。

代码还是看的有点粗,还有很多的细节没有写,但是学到的东西已经很多了。

不过多数是这样的。。。确实很强的大佬~

https://github.com/peng-zhihui/ElectronBot
https://www.tech-harry.cn/archives/4511
https://item.szlcsc.com/145106.html

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    28191

    浏览量

    206494
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5141

    浏览量

    213382
  • 数字舵机
    +关注

    关注

    1

    文章

    11

    浏览量

    6302

原文标题:ElectronBot-数字舵机篇

文章出处:【微信号:TT1827652464,微信公众号:云深之无迹】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【资料推荐】数字舵机与模拟舵机的控制方法与性能比较

    数码舵机常见问题原理分析及解决:一、数码舵机与模拟舵机的区别 传统模拟舵机数字比例舵机(或称之
    发表于 06-30 06:34

    数字舵机与模拟舵机的区别在哪?

    舵机是什么?数字舵机的工作原理是什么?数字舵机与模拟舵机区别在哪?
    发表于 07-13 06:16

    HAL库是如何控制数字舵机

    HAL库方式控制数字舵机介绍数字舵机一般比较贵,数字舵机与模拟
    发表于 08-05 07:30

    数字舵机与模拟舵机的区别在哪

    无刷舵机是由哪些部分组成的?数字舵机有何优势?数字舵机与模拟舵机的区别在哪?
    发表于 08-10 06:00

    数字舵机与模拟舵机有哪些不同之处

    什么是舵机舵机是由哪些部分组成的?舵机分为哪几种?什么是无刷舵机?无刷舵机有何特点?数字
    发表于 08-23 06:04

    数字舵机与模拟舵机的区别在哪

    无刷舵机的结构是由哪些部分组成的?有哪些优缺点?普通舵机的结构是由哪些部分组成的?有哪些优缺点?数字舵机的结构是由哪些部分组成的?有哪些优缺点?
    发表于 09-02 06:08

    无刷舵机数字舵机以及模拟舵机有哪些区别

    无刷舵机有哪些优缺点?其控制原理是什么?数字舵机有哪些优缺点?其控制原理是什么?模拟舵机有哪些优缺点?其控制原理是什么?
    发表于 09-06 07:57

    JAVA教程之数字时钟

    JAVA教程之数字时钟,很好的学习资料。
    发表于 03-31 11:13 8次下载

    数字舵机激励信号加载方法的研究与实现魏博

    数字舵机激励信号加载方法的研究与实现_魏博
    发表于 03-14 08:00 0次下载

    数字舵机控制原理是什么_数字舵机与模拟舵机的区别

    数字舵机(Digital Servo)和模拟舵机(Analog Servo)在基本的机械结构方面是完全一样的,主要由马达、减速齿轮、控制电路等组成,而数字
    的头像 发表于 05-30 16:29 6.3w次阅读

    dfrobot数字舵机Arduino扩展板简介

    DRI0027是DFRobot研发的世界首款Arduino兼容的数字化总线式伺服舵机驱动板,能够为您解决机器人舵机控制领域的许多难题。该驱动板是DFRobot针对博创CDS5516数字
    的头像 发表于 11-20 17:26 3792次阅读
    dfrobot<b class='flag-5'>数字</b><b class='flag-5'>舵机</b>Arduino扩展板简介

    舵机是什么_数字舵机与模拟舵机有的区别

    本文首先介绍了舵机的概念,其次介绍了舵机的类型,最后阐述了数字舵机与模拟舵机有的区别。
    的头像 发表于 03-21 09:59 2.7w次阅读

    Arduino的实验例程之9克舵机实验的详细资料说明

    本文档的主要内容详细介绍的是Arduino的实验例程之9克舵机实验的详细资料说明。
    发表于 02-25 16:36 14次下载

    Arduino的实验例程之9克舵机实验的详细资料说明

    本文档的主要内容详细介绍的是Arduino的实验例程之9克舵机实验的详细资料说明。
    发表于 02-25 16:36 30次下载

    Arduino UNO驱动数字舵机

    Arduino UNO驱动数字舵机舵机数字舵机工作原理数字
    发表于 11-30 12:06 15次下载
    Arduino UNO驱动<b class='flag-5'>数字</b><b class='flag-5'>舵机</b>