相信這個(gè)東西很多人都見(jiàn)過(guò),大佬做的一個(gè)機(jī)器人
大部分人都是在關(guān)注功能本身,只有我看上了這個(gè)改裝的小舵機(jī)。因?yàn)槭忻嫔系亩鏅C(jī)只能接收PWM信號(hào),進(jìn)行角度控制。
這就有問(wèn)題了。
在這種情況下我們只能發(fā)送指令,讓舵機(jī)運(yùn)動(dòng),卻不能接收指令,從而知道它的運(yùn)動(dòng)狀態(tài)。同時(shí),想要讓舵機(jī)進(jìn)行反驅(qū),就必須能讓舵機(jī)隨時(shí)進(jìn)行輸出力矩的切換。小驅(qū)動(dòng)器支持IIC總線通信,PID閉環(huán)控制,位置回傳,還能設(shè)置最大的輸出力矩,斷電儲(chǔ)存參數(shù)等。
更加詳細(xì)的一些內(nèi)容在readme里面
魔改后的舵機(jī)通過(guò)I2C接口和控制板進(jìn)行通信,STM32F4的控制板為主機(jī),舵機(jī)為從機(jī)。通信的過(guò)程始終是主機(jī)發(fā)起的,主機(jī)首先下發(fā)位置、參數(shù)等指令,然后即時(shí)取回相關(guān)數(shù)據(jù)完成一個(gè)通信來(lái)回。
每個(gè)舵機(jī)作為從機(jī)接收兩個(gè)地址的指令:自己的ID號(hào),以及0號(hào)廣播。廣播用于在沒(méi)有給舵機(jī)設(shè)置地址的時(shí)候作為通配地址使用(比如你剛燒寫(xiě)完舵機(jī)固件,此時(shí)舵機(jī)的Flash是沒(méi)有儲(chǔ)存自己的ID的,只能通過(guò)0號(hào)地址通信)。
值得注意的是:舵機(jī)和主機(jī)的上電需要有先后順序,一定要先讓從機(jī)初始化完成開(kāi)始監(jiān)聽(tīng)數(shù)據(jù),再讓主機(jī)發(fā)送指令!
如果主機(jī)發(fā)送指令的時(shí)候從機(jī)不響應(yīng),或者多個(gè)舵機(jī)地址相同同時(shí)響應(yīng),都可能引起通信錯(cuò)誤,因此需要保證上述的順序。
由于硬件上主機(jī)和舵機(jī)上電都是同時(shí)的,所以在主機(jī)的固件代碼中,有一個(gè)延時(shí)2S的代碼(其實(shí)可以不用那么久),就是等待舵機(jī)都上電初始化完成再開(kāi)始通信。
調(diào)試的時(shí)候,一個(gè)舵機(jī)一個(gè)舵機(jī)調(diào)試,注釋掉其他未連接的舵機(jī)的通信代碼,不然也會(huì)造成輪詢(xún)等待超時(shí)。
舵機(jī)指令的含義
大概的樣子
改裝后的樣子
在庫(kù)里面,我畫(huà)圖的地方是舵機(jī)庫(kù)的位置
一開(kāi)始的話就看fw這個(gè)就行,下面是用較為低級(jí)的一個(gè)庫(kù)寫(xiě)的。
單獨(dú)的keli工程
終于里面的芯片是這樣的,舵機(jī)馬達(dá)的驅(qū)動(dòng)IC
IC簡(jiǎn)單的介紹
DK是右邊的,方便調(diào)試和下載,量產(chǎn)的時(shí)候就用前面的就行。
右邊就是我們的驅(qū)動(dòng)IC了
這是兩個(gè)版本的正反面
當(dāng)然AD里面可以拿到兩個(gè)
LP2992
兩版的原理圖
這個(gè)就是LDO,輸入的是5V,輸出就3V3
這個(gè)驅(qū)動(dòng)芯片需要5V
3,4是PWM的腳
內(nèi)部的框圖
這個(gè)是控制的真值表
這個(gè)是預(yù)定的一些參數(shù)
典型波形圖
舵機(jī)的話,就使用這樣的原理圖
這個(gè)是main文件
但是具體的實(shí)現(xiàn)是在CPP文件里面
這個(gè)主控文件,就是這么簡(jiǎn)單
在一開(kāi)始會(huì)聲明兩個(gè)對(duì)象,一個(gè)舵機(jī),一個(gè)板子的配置
在這個(gè)類(lèi)里面,他包裝了一下舵機(jī)的信息,包括實(shí)現(xiàn)的PID功能
這些就是共有的接口
私有的變量,命名清晰贊一個(gè)
設(shè)置要轉(zhuǎn)的角度
設(shè)置是否開(kāi)啟舵機(jī)
設(shè)置轉(zhuǎn)矩的設(shè)置
輸入是是位置和值
這個(gè)就是PWM的輸出函數(shù)
放大一點(diǎn)看
這個(gè)庫(kù)函數(shù)的參數(shù)
-
定時(shí)器的句柄,
2.已經(jīng)被配置好的定時(shí)器通道,
3.要對(duì)比的寄存器值
電機(jī)的轉(zhuǎn)速是和PWM的占空比成正比的。
PWM波的生成
生成的原理
這里就是使用了兩個(gè)定時(shí)器
下面是4個(gè)定時(shí)器的通道
還記得板子的斷電信息存儲(chǔ)的功能嗎?這就是儲(chǔ)存數(shù)據(jù)
在每次上電后,都會(huì)取里面的數(shù)據(jù)
判斷目前的配置情況
進(jìn)行數(shù)據(jù)的賦值
把取到的數(shù)據(jù)都放在motor的類(lèi)里面,以便于后面的使用,最后一個(gè)就是裝載完成。
初始化兩個(gè)PWM的通道
然后這才開(kāi)始初始化IIC硬件
就是一段代碼了,應(yīng)該是很簡(jiǎn)單的
IIC的寄存器就是這些了
使用7位模式
最后的三行代碼
在從模式下接收一定量的數(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)
200HZ下獲取數(shù)據(jù)
頻繁的判斷,舵機(jī)要工作的模式
對(duì)電壓的測(cè)量是使用的回調(diào)函數(shù)
接下來(lái)是大段的協(xié)議封裝
也就是我們的中斷回調(diào)函數(shù)
會(huì)先來(lái)判斷一下HAL的狀態(tài)
這是要發(fā)送和接受的I2C數(shù)組
看右邊
自己看這個(gè)數(shù)組的順
使用的是switch的結(jié)構(gòu)來(lái)解讀信息
當(dāng)這個(gè)信息是0x01的話,
會(huì)從這里的進(jìn)行一個(gè)數(shù)據(jù)的組裝
TX萬(wàn)事了RX,安排發(fā)送
最后是一個(gè)控制數(shù)據(jù)的發(fā)送,從ADC讀取,接著是angle角度的計(jì)算,把角度給PID的函數(shù)處理,平滑軌跡,最后設(shè)置PWM。
代碼還是看的有點(diǎn)粗,還有很多的細(xì)節(jié)沒(méi)有寫(xiě),但是學(xué)到的東西已經(jīng)很多了。
不過(guò)多數(shù)是這樣的。。。確實(shí)很強(qiáng)的大佬~
https://github.com/peng-zhihui/ElectronBot
https://www.tech-harry.cn/archives/4511
https://item.szlcsc.com/145106.html
審核編輯:湯梓紅
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28691瀏覽量
208649 -
PWM
+關(guān)注
關(guān)注
114文章
5201瀏覽量
214961 -
數(shù)字舵機(jī)
+關(guān)注
關(guān)注
1文章
11瀏覽量
6364
原文標(biāo)題:ElectronBot-數(shù)字舵機(jī)篇
文章出處:【微信號(hào):TT1827652464,微信公眾號(hào):云深之無(wú)跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【資料推薦】數(shù)字舵機(jī)與模擬舵機(jī)的控制方法與性能比較
舵機(jī)是什么?數(shù)字電機(jī)和模擬電機(jī)有什么不同?
數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別在哪?
HAL庫(kù)是如何控制數(shù)字舵機(jī)的
數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別在哪
數(shù)字舵機(jī)與模擬舵機(jī)有哪些不同之處
數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別在哪
無(wú)刷舵機(jī)與數(shù)字舵機(jī)以及模擬舵機(jī)有哪些區(qū)別
數(shù)字舵機(jī)控制原理是什么_數(shù)字舵機(jī)與模擬舵機(jī)的區(qū)別
dfrobot數(shù)字舵機(jī)Arduino擴(kuò)展板簡(jiǎn)介
![dfrobot<b class='flag-5'>數(shù)字</b><b class='flag-5'>舵機(jī)</b>Arduino擴(kuò)展板簡(jiǎn)介](https://file.elecfans.com/web1/M00/AD/CE/pIYBAF3Odc6AICNkAAA0sIEDMMI114.jpg)
舵機(jī)是什么_數(shù)字舵機(jī)與模擬舵機(jī)有的區(qū)別
Arduino的實(shí)驗(yàn)例程之9克舵機(jī)實(shí)驗(yàn)的詳細(xì)資料說(shuō)明
Arduino的實(shí)驗(yàn)例程之9克舵機(jī)實(shí)驗(yàn)的詳細(xì)資料說(shuō)明
Arduino UNO驅(qū)動(dòng)數(shù)字舵機(jī)
![Arduino UNO驅(qū)動(dòng)<b class='flag-5'>數(shù)字</b><b class='flag-5'>舵機(jī)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論