天天看點

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

*以下文章資源均來自網際網路,文章内容僅供參考,如果侵犯了您的權益,請留言或通過郵箱與我聯系。

The following article resources are all from the Internet, the content of the article is for reference only. If you violate your rights and interests, please leave a message or contact me through email.

E-mail:[email protected]

MLX90363的指令

本文主要介紹MLX90363的幾個常用的指令。具體的其他指令可以查閱MLX90363的手冊進行查詢。資料格式在前面的部落格中已經說過,這裡隻介紹指令的作用。

1.NOP指令

NOP指令是一個空指令,字面意思上好像沒什麼用,我們先來看一下手冊中給出的格式。

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

還記得之前說過MLX90363在進行SPI通信的時候,指令的發送總是一個指令之後跟一個指令嗎?NOP指令在這裡充當着重要的角色。

NOP指令的前兩個位元組為空,即都是0X00,

第2個和第3個位元組我們可以随意填寫,在MLX90363應用向導的手冊中,這兩個位元組都為0XAA,

第4個和溪5個位元組為空,即0X00。

第6個位元組為0XD0,

第7個位元組用于CRC校驗,關于CRC校驗,其用途在于校驗之前發送的6個位元組是否正确,CRC校驗是根據前面發送的6個位元組依次根據已經設定好的算法進行校驗,最終得出CRC的值,具體的CRC校驗會在随後的部落格中解釋。這裡NOP指令的CRC這個位元組為0XAB。這樣NOP指令的8個位元組就寫完了。

2.NOP指令的傳回值

當然這隻是我們作為SPI的主裝置發送的資料MLX90363作為SPI的從裝置會相應的傳回相應的資料,在MLX90363的手冊中給出了NOP指令的傳回幀,如下圖所示:

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

通過SPI協定傳回的資料也是8個位元組,

第0個位元組和地 1個位元組都是空的,即0X00,

第2個位元組和第3個位元組為之前我們發送NOP指令的那兩個位元組按位取反得到的,像上面我們發送的是0XAA,這裡會傳回0X55,

第4個和第5個位元組,我們可以看下面的第2行注釋,是65535減去KEY的值得到的額,(實際上沒什麼用),

第6個位元組是0XD1,

第7個位元組為CRC校驗得到的。

還有一點是我們需要注意的,我們需要發送兩次NOP指令才會得到相應的資料

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

上面這幅圖說明了,我們發送第一次NOP指令的時候,傳回的資料并不是真正的應該傳回的資料,隻有我們再次發送下一個指令的時候,才會傳回相應的數值。

3.GET1指令

GET1指令在MLX90363的旋轉應用中是最簡單也是最重要的一個指令,用于擷取角度資料,能夠傳回目前磁鐵NS極位置下相對與MLX90363的角度資料,相對位置的示意圖在之前的部落格中介紹過。它的資料格式如下:

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

第0個位元組為空,即0X00;

第1個位元組中,第0為為RST,在下面的注釋中可以看出用于複位計數器,如果不需要就設定為0,即這個位元組也為0X00;

第2個位元組和第3個位元組用于設定超出時間,這個東西是什麼我也不知道,看下面的注釋是說設定目前資料消息的最大存在的時間,我從來沒用過,我都是設定為0XFF;

第4個和第5個位元組為0X00;

第6個位元組,我們先看第0為到第5位,分别為1 1 0 0 1 0這是已經确定的,第6位和第7為這裡叫做Marker,是用來标記這條指令是用于傳回什麼資料的,在下面的注釋中可以看到(把我們設定的這兩位的值換算為十進制的值),當為0的時候傳回的是角度資料,為1的時候傳回的是坐标的資料(平面應用的時候用),為2的時候傳回的是空間坐标(是在3D模式下使用的),當我們應用旋轉應用的時候這兩位為 0 0 ,那麼整個位元組就位0X13。

第7個位元組為CRC校驗,這裡直接為0XEA就可以了。

4.GET1指令的傳回值

GET1指令傳回的是角度資料,傳回的資料格式如下:

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

第0個位元組存放角度資料的第0位到第7位

第1個位元組的第0位到第5位存放角度資料的第8位到第13位,第6位和第7位存放的是診斷資訊。

剩下的那幾個位元組其實沒什麼用,如果我們隻關心角度資料的話,隻要關注前兩個位元組就可以。

先來說一下角度資料,在計算的時候,需要把第1個位元組的第6位和第7位去掉(就是讓他們跟0做與運算),然後剩下的6位跟第0個位元組的8位組成14位的二進制資料,然後換算成十進制的資料,就是角度資料了。

然後是第1個位元組的第6為和第7位,用于表示診斷資訊,其真值表如下圖所示:

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

當然我們還需要注意MLX90363的SPI協定,需要在發送GET1指令之後接着發送指令才可以擷取角度資料,

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

在發送GET1指令之後,按照之前給出的表格(如下圖所示),後面可以發送GET1, MemoryRead,DiagDetails,NOP這幾個中的任何一個,隻有這樣才可以擷取正确的資料。

基于STM32的MLX90363角度霍爾應用(晶片指令篇)MLX90363的指令

繼續閱讀