@TOC

前言
前期已經介紹過TMC2208/2209模塊的概述,兩者區別,性能參數以及驅動電流的計算,就不再多贅述。
TMC2208/2209模塊除了通過外部硬件控制驅動,還可以通過串口配置寄存器實現轉速,方向,細分等設置來控制驅動,這篇主要介紹如何通過串口(UART)通訊控制TMC2208/2209模塊驅動2相4線步進電機。
一、寄存器說明
用串口控制TMC2208/2209模塊,就必須了解模塊的相關寄存器有哪些,以及寄存器的每一位需要怎么設置。串口控制就是通過配置寄存器來控制驅動,這里以TMC2209為例進行說明。





二、UART的幀指令編寫
寫指令:長度為64位,0-7:8位幀頭,8-15:8位設備地址,16-23:7位寄存器地址+讀寫位,24-55:32位數據寫入,56-63:8位CRC校驗。返回值為寫入什么就回顯什么。注意:寄存器地址需要加上寫入位,即寄存器地址 | 0x80。
往0x00寄存器寫入數據為例:幀頭:0x55,設備地址可根據MS1和MS2引腳選擇,這里使用默認地址:0x00,寫入寄存器地址:0x00|0x80為0x80,寫入數據:0x00000081,最后CRC校驗,即幀指令為55 00 80 00 00 00 81 CRC。得到0x00寄存器配置:設置使用VREF為參考電壓,微步分辨率由MSTEP寄存器選擇。下面的讀指令也是如此,不過寄存器地址不需要加讀寫位,寄存器本身地址就是讀。
讀指令:長度為32位,0-7位為幀頭,8-15位為設備地址,16-23位為寄存器地址,24-31位為CRC校驗。
讀指令返回值:長度為64位,0-7位為幀頭,8-15位為響應地址,16-23位為寄存器地址,24-55位為讀取的數據,56-63位為CRC校驗。
注意:CRC校驗為標準的LSB-first CRC,是LSB到MSB,計算CRC不能用普通的CRC-8計算。CRC計算可以用手冊給的示例進行計算。
void swuart_calcCRC(UCHAR* datagram, UCHAR datagramLength)
{
int i,j;
UCHAR* crc = datagram + (datagramLength-1); // CRC located in last byte of message
UCHAR currentByte;
*crc = 0;
for (i=0; i< (datagramLength-1); i++) {
currentByte = datagram[i];
// Execute for all bytes of a message
// Retrieve a byte to be sent from Array
for (j=0; j< 8; j++) {
if ((*crc > > 7) ^ (currentByte&0x01)) // update CRC based result of XOR operation
{
*crc = (*crc < < 1) ^ 0x07;
}
else
{
*crc = (*crc < < 1);
}
currentByte = currentByte > > 1;
} // for CRC bit
} // for message byte
}
這里整理了一些幀指令,可直接使用。
| 05 00 80 00 00 00 C1 C9 | 設置啟動UART模式和寄存器控制微步,電機正轉 |
|---|---|
| 05 00 80 00 00 00 C9 B9 | 設置電機反轉 |
| 05 00 90 00 00 00 00 50 | 設置IRUN和IHOLD都為0,注意:電流不會降到0 |
| 05 00 91 00 20 10 04 24 | 設置IRUN=16,IHOLD=4,IHOLDDELAY=0.5s |
| 05 00 91 00 00 00 17 51 | 設置TPOWER DOWN=0.5s |
| 05 00 EC 10 00 00 03 AA | 設置1/256微步 |
| 05 00 EC 11 00 00 03 9B | 設置1/128微步 |
| 05 00 EC 12 00 00 03 31 | 設置1/64微步 |
| 05 00 EC 13 00 00 03 00 | 設置1/32微步 |
| 05 00 EC 14 00 00 03 64 | 設置1/16微步 |
| 05 00 EC 15 00 00 03 55 | 設置1/8微步 |
| 05 00 EC 16 00 00 03 FF | 設置1/4微步 |
| 05 00 EC 17 00 00 03 CE | 設置1/2微步 |
| 05 00 EC 18 00 00 03 CD | 設置全步 |
| 05 00 A2 00 00 FF 00 D9 | 以61,440步頻正轉 |
| 05 00 A2 00 00 04 00 A0 | 以1024步頻正轉 |
| 05 00 A2 FF FF FC 00 CE | 以1024步頻反轉 |
| 05 00 06 6F | 讀IOIN |
| 05 00 6C CA | 讀CHOPCONF |
| 05 00 70 62 | 讀PWMCONF |
| 05 00 71 EB | 讀PWM_SCALE |
| 05 00 72 A5 | 讀PWM_AUTO |
注意:TMC2208/2209模塊沒有掉電保存功能,配置完參數后如果掉電就會恢復為默認設置。
三、TMC2209串口連接
TMC2209串口采用單線uart,其連接方式如下:
根據手冊可知,TMC2209可選擇內部時鐘或外部時鐘,模塊的CLK引腳默認下拉到GND,且其內部集成有步進脈沖發生器,可選擇使用內部脈沖發生器提供脈沖信號還是使用外部脈沖發生器提供脈沖信號(0x22設置為0為外部脈沖模式,不為0內部脈沖模式),即如果使用外部發生器提供脈沖信號,STEP引腳就需要連接,反之懸空。而其他引腳懸空即可。
四、相關寄存器參數計算說明
看寄存器表,不是所有寄存器都和0x00寄存器那樣在寄存器表就明確說明要寫入什么數值,寫入的數值指的是什么。沒有明確說明的需要查看手冊找到具體描述來確定需要寫入什么數值,而且有些數值需要進行相應計算得出。這里以0x10和0x11寄存器為例說明。
0x10寄存器:
IRUN:電機運行電流
IHOLD:電機靜止保持電流
根據上面的0x10寄存器描述可知,IRUN,IHOLD是寫入0~31的值來設置電流,即將電流分為32等份。如何計算每等份電流多大,可根據手冊給出的公式計算。
其中CS就是需要寫入寄存器的值(0-31),RSE為0.11歐,Vfs為設置的參考電壓。
IHOLDDELAY:決定電機從運行電流逐步降到靜止電流的過渡時間,當檢測到靜止stst=1且TPOWERDOWN到時后,才開始平滑下降。共有 IRUN - IHOLD個電流步進下降,每一步延遲是2^18 / fclk的IHOLDDELAY倍,TMC2209內部時鐘默認為fclk=12MHz,所以t ≈ 21.85ms x IHOLDDELAY。總下降時間:
最終到IHOLDDELAY的時間 = TPOWERDOWN + tramp,IHOLDDELAY取值 = 0~15,0表示無平滑。
0x11寄存器:
TPOWERDOWN:當驅動芯片檢測到電機停止轉動之后,不會馬上切斷電機保持電流,而是等待一段時間,這段時間就是TPOWERDOWN設置的延遲,時間設置范圍0至5.6s。
TPOWERDOWN取值 = 0~255,0表示無延遲。
通過上面的計算來確定寫入的值對應實際IRUN,IHOLD電流,IHOLDDELAY過渡時間,TPOWERDOWN延遲時間是多少。
五、用TMC220X配置器配置寄存器
除了通過對應幀指令配置寄存器外。還可以用TMC220X配置器配置寄存器,配置器只需要知道對應寄存器的作用,直接寫入數值配置即可。不用知道該寄存器對應每一位需要寫入什么數值,也不需要繁瑣的計算,來編寫幀指令配置寄存器。當然,TMC220X配置器不是所有寄存器都可以配置,只有一部分寄存器可配置。
TMC220X配置器安裝:
- 安裝腳本溝通器(適用于 Windows、Linux、MacOS)
- 下載TMC220X配置器
- 使用 ScriptCommunicator(腳本溝通器) 啟動 TMC220X.scez 文件
- 選擇芯片:TMC2208 或 TMC2209
- 選擇串行端口并單擊連接
- 配置器中的修改直接傳輸,即修改數值直接寫入到寄存器。
如圖所示:左邊為相應寄存器,右邊為需要寫入的數值,設置參數推薦使用配置器來配置。
OTP則是0x05寄存器的配置,具體參數看上面的0x05寄存器配置表。
六、效果展示


審核編輯 黃宇
-
步進電機
+關注
關注
153文章
3222瀏覽量
151633 -
uart
+關注
關注
22文章
1305瀏覽量
106187 -
通訊控制
+關注
關注
0文章
8瀏覽量
5581
發布評論請先 登錄
3D打印機的完美驅動芯片TMC2208,低成本,高性能,真靜音
ADI Trinamic TMC2210大電流步進電機驅動器IC數據手冊

基于UART通訊控制TMC2208/2209模塊驅動兩相四線步進電機
評論