0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ElectronBot教程之?dāng)?shù)字舵機(jī)

云深之無跡 ? 來源:云深之無跡 ? 作者:云深之無跡 ? 2022-08-04 11:57 ? 次閱讀

相信這個東西很多人都見過,大佬做的一個機(jī)器人

大部分人都是在關(guān)注功能本身,只有我看上了這個改裝的小舵機(jī)。因為市面上的舵機(jī)只能接收PWM信號,進(jìn)行角度控制。

這就有問題了。

在這種情況下我們只能發(fā)送指令,讓舵機(jī)運動,卻不能接收指令,從而知道它的運動狀態(tài)。同時,想要讓舵機(jī)進(jìn)行反驅(qū),就必須能讓舵機(jī)隨時進(jìn)行輸出力矩的切換。小驅(qū)動器支持IIC總線通信,PID閉環(huán)控制,位置回傳,還能設(shè)置最大的輸出力矩,斷電儲存參數(shù)等。

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

更加詳細(xì)的一些內(nèi)容在readme里面

魔改后的舵機(jī)通過I2C接口和控制板進(jìn)行通信,STM32F4的控制板為主機(jī),舵機(jī)為從機(jī)。通信的過程始終是主機(jī)發(fā)起的,主機(jī)首先下發(fā)位置、參數(shù)等指令,然后即時取回相關(guān)數(shù)據(jù)完成一個通信來回。

每個舵機(jī)作為從機(jī)接收兩個地址的指令:自己的ID號,以及0號廣播。廣播用于在沒有給舵機(jī)設(shè)置地址的時候作為通配地址使用(比如你剛燒寫完舵機(jī)固件,此時舵機(jī)的Flash是沒有儲存自己的ID的,只能通過0號地址通信)。

值得注意的是:舵機(jī)和主機(jī)的上電需要有先后順序,一定要先讓從機(jī)初始化完成開始監(jiān)聽數(shù)據(jù),再讓主機(jī)發(fā)送指令!

如果主機(jī)發(fā)送指令的時候從機(jī)不響應(yīng),或者多個舵機(jī)地址相同同時響應(yīng),都可能引起通信錯誤,因此需要保證上述的順序。

由于硬件上主機(jī)和舵機(jī)上電都是同時的,所以在主機(jī)的固件代碼中,有一個延時2S的代碼(其實可以不用那么久),就是等待舵機(jī)都上電初始化完成再開始通信。

調(diào)試的時候,一個舵機(jī)一個舵機(jī)調(diào)試,注釋掉其他未連接的舵機(jī)的通信代碼,不然也會造成輪詢等待超時。

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

舵機(jī)指令的含義

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

大概的樣子

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

改裝后的樣子

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

在庫里面,我畫圖的地方是舵機(jī)庫的位置

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

一開始的話就看fw這個就行,下面是用較為低級的一個庫寫的。

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

單獨的keli工程

終于里面的芯片是這樣的,舵機(jī)馬達(dá)的驅(qū)動IC

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

IC簡單的介紹

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

DK是右邊的,方便調(diào)試和下載,量產(chǎn)的時候就用前面的就行。

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

右邊就是我們的驅(qū)動IC了

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

這是兩個版本的正反面

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

當(dāng)然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

這個驅(qū)動芯片需要5V

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

3,4是PWM的腳

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

內(nèi)部的框圖

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

這個是控制的真值表

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

這個是預(yù)定的一些參數(shù)

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

典型波形圖

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

舵機(jī)的話,就使用這樣的原理圖

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

這個是main文件

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

但是具體的實現(xiàn)是在CPP文件里面

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

這個主控文件,就是這么簡單

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

在一開始會聲明兩個對象,一個舵機(jī),一個板子的配置

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

在這個類里面,他包裝了一下舵機(jī)的信息,包括實現(xiàn)的PID功能

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

這些就是共有的接口

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

私有的變量,命名清晰贊一個

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

設(shè)置要轉(zhuǎn)的角度

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

設(shè)置是否開啟舵機(jī)

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

設(shè)置轉(zhuǎn)矩的設(shè)置

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

輸入是是位置和值

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

這個就是PWM的輸出函數(shù)

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

放大一點看

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

這個庫函數(shù)的參數(shù)

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

  1. 定時器的句柄,

2.已經(jīng)被配置好的定時器通道,

3.要對比的寄存器

電機(jī)的轉(zhuǎn)速是和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

還記得板子的斷電信息存儲的功能嗎?這就是儲存數(shù)據(jù)

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

在每次上電后,都會取里面的數(shù)據(jù)

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

判斷目前的配置情況

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

進(jìn)行數(shù)據(jù)的賦值

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

把取到的數(shù)據(jù)都放在motor的類里面,以便于后面的使用,最后一個就是裝載完成。

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

初始化兩個PWM的通道

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

然后這才開始初始化IIC硬件

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

就是一段代碼了,應(yīng)該是很簡單的

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

IIC的寄存器就是這些了

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

使用7位模式

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

最后的三行代碼

在從模式下接收一定量的數(shù)據(jù),在非阻塞模式下使用中斷 。

param hi2c 指向 I2C_HandleTypeDef 結(jié)構(gòu)的指針,該結(jié)構(gòu)包含 * 指定 I2C 的配置信息。

param pData 指向數(shù)據(jù)緩沖區(qū)的指針

param Size 要發(fā)送的數(shù)據(jù)量 * @retval HAL 狀態(tài)

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

200HZ下獲取數(shù)據(jù)

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

頻繁的判斷,舵機(jī)要工作的模式

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

對電壓的測量是使用的回調(diào)函數(shù)

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

接下來是大段的協(xié)議封裝

也就是我們的中斷回調(diào)函數(shù)

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

會先來判斷一下HAL的狀態(tài)

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

這是要發(fā)送和接受的I2C數(shù)組

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

看右邊

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

自己看這個數(shù)組的順

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

使用的是switch的結(jié)構(gòu)來解讀信息

當(dāng)這個信息是0x01的話,

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

會從這里的進(jìn)行一個數(shù)據(jù)的組裝

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

TX萬事了RX,安排發(fā)送

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

最后是一個控制數(shù)據(jù)的發(fā)送,從ADC讀取,接著是angle角度的計算,把角度給PID的函數(shù)處理,平滑軌跡,最后設(shè)置PWM。

代碼還是看的有點粗,還有很多的細(xì)節(jié)沒有寫,但是學(xué)到的東西已經(jīng)很多了。

不過多數(shù)是這樣的。。。確實很強(qiáng)的大佬~

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

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    210

    文章

    28109

    瀏覽量

    205861
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    114

    文章

    5119

    瀏覽量

    213183
  • 數(shù)字舵機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    11

    瀏覽量

    6297

原文標(biāo)題:ElectronBot-數(shù)字舵機(jī)篇

文章出處:【微信號:TT1827652464,微信公眾號:云深之無跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【資料推薦】數(shù)字舵機(jī)與模擬舵機(jī)的控制方法與性能比較

    數(shù)碼舵機(jī)常見問題原理分析及解決:一、數(shù)碼舵機(jī)與模擬舵機(jī)的區(qū)別 傳統(tǒng)模擬舵機(jī)數(shù)字比例舵機(jī)(或稱之
    發(fā)表于 06-30 06:34

    數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別在哪?

    舵機(jī)是什么?數(shù)字舵機(jī)的工作原理是什么?數(shù)字舵機(jī)與模擬舵機(jī)區(qū)別在哪?
    發(fā)表于 07-13 06:16

    HAL庫是如何控制數(shù)字舵機(jī)

    HAL庫方式控制數(shù)字舵機(jī)介紹數(shù)字舵機(jī)一般比較貴,數(shù)字舵機(jī)與模擬
    發(fā)表于 08-05 07:30

    數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別在哪

    無刷舵機(jī)是由哪些部分組成的?數(shù)字舵機(jī)有何優(yōu)勢?數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別在哪?
    發(fā)表于 08-10 06:00

    數(shù)字舵機(jī)與模擬舵機(jī)有哪些不同之處

    什么是舵機(jī)?舵機(jī)是由哪些部分組成的?舵機(jī)分為哪幾種?什么是無刷舵機(jī)?無刷舵機(jī)有何特點?數(shù)字
    發(fā)表于 08-23 06:04

    數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別在哪

    無刷舵機(jī)的結(jié)構(gòu)是由哪些部分組成的?有哪些優(yōu)缺點?普通舵機(jī)的結(jié)構(gòu)是由哪些部分組成的?有哪些優(yōu)缺點?數(shù)字舵機(jī)的結(jié)構(gòu)是由哪些部分組成的?有哪些優(yōu)缺點?
    發(fā)表于 09-02 06:08

    無刷舵機(jī)數(shù)字舵機(jī)以及模擬舵機(jī)有哪些區(qū)別

    無刷舵機(jī)有哪些優(yōu)缺點?其控制原理是什么?數(shù)字舵機(jī)有哪些優(yōu)缺點?其控制原理是什么?模擬舵機(jī)有哪些優(yōu)缺點?其控制原理是什么?
    發(fā)表于 09-06 07:57

    JAVA教程之數(shù)字時鐘

    JAVA教程之數(shù)字時鐘,很好的學(xué)習(xí)資料。
    發(fā)表于 03-31 11:13 ?8次下載

    數(shù)字舵機(jī)激勵信號加載方法的研究與實現(xiàn)魏博

    數(shù)字舵機(jī)激勵信號加載方法的研究與實現(xiàn)_魏博
    發(fā)表于 03-14 08:00 ?0次下載

    數(shù)字舵機(jī)控制原理是什么_數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別

    數(shù)字舵機(jī)(Digital Servo)和模擬舵機(jī)(Analog Servo)在基本的機(jī)械結(jié)構(gòu)方面是完全一樣的,主要由馬達(dá)、減速齒輪、控制電路等組成,而數(shù)字
    的頭像 發(fā)表于 05-30 16:29 ?6.3w次閱讀

    dfrobot數(shù)字舵機(jī)Arduino擴(kuò)展板簡介

    DRI0027是DFRobot研發(fā)的世界首款A(yù)rduino兼容的數(shù)字化總線式伺服舵機(jī)驅(qū)動板,能夠為您解決機(jī)器人舵機(jī)控制領(lǐng)域的許多難題。該驅(qū)動板是DFRobot針對博創(chuàng)CDS5516數(shù)字
    的頭像 發(fā)表于 11-20 17:26 ?3772次閱讀
    dfrobot<b class='flag-5'>數(shù)字</b><b class='flag-5'>舵機(jī)</b>Arduino擴(kuò)展板簡介

    舵機(jī)是什么_數(shù)字舵機(jī)與模擬舵機(jī)有的區(qū)別

    本文首先介紹了舵機(jī)的概念,其次介紹了舵機(jī)的類型,最后闡述了數(shù)字舵機(jī)與模擬舵機(jī)有的區(qū)別。
    的頭像 發(fā)表于 03-21 09:59 ?2.7w次閱讀

    Arduino的實驗例程之9克舵機(jī)實驗的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Arduino的實驗例程之9克舵機(jī)實驗的詳細(xì)資料說明。
    發(fā)表于 02-25 16:36 ?14次下載

    Arduino的實驗例程之9克舵機(jī)實驗的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Arduino的實驗例程之9克舵機(jī)實驗的詳細(xì)資料說明。
    發(fā)表于 02-25 16:36 ?30次下載

    Arduino UNO驅(qū)動數(shù)字舵機(jī)

    Arduino UNO驅(qū)動數(shù)字舵機(jī)舵機(jī)數(shù)字舵機(jī)工作原理數(shù)字
    發(fā)表于 11-30 12:06 ?15次下載
    Arduino UNO驅(qū)動<b class='flag-5'>數(shù)字</b><b class='flag-5'>舵機(jī)</b>