0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# Raspberry Pi 5 + L6480でステッピングモータを動かしてみる

0
Posted at

Raspberry Pi 5 + L6480でステッピングモータが動かなかった原因4つ

Strawberry LinuxのL6480V2キットを57mm大型モータ(ST-57BYG076)でRaspberry Pi 5から動かそうとして、動くまでに4つの壁があった。同じ構成でハマる人向けに、症状→原因→対処だけ書く。

環境

項目 内容
ドライバ Strawberry Linux #12080 L6480V2キット
モータ #12082 ST-57BYG076(3V / 3A/相 / 1Ω / 1.8°)
電源 24V(Mean Well LRS-200N2-24)
制御 Raspberry Pi 5、Python(st-spin + gpiozero)

配線はキット付属のCN1をRPi5のSPI0に接続。~STBYはGPIO25、~BUSYはGPIO23。

前提:st-spinはL6480用ではない

PyPIのst-spinはL6470用。L6480とはレジスタが2つずれている。

レジスタ L6470 L6480
CONFIG 0x18 0x1A
STATUS 0x19 0x1B

L6480では0x18/0x19がGATECFG1/2(ゲート駆動設定)なので、パッチなしで使うとCONFIGを書いたつもりでゲート設定を壊す。import直後にこれを入れる。

from stspin.constants import register as _reg
_reg.Register.Config = 0x1A
_reg.Register.Status = 0x1B
_reg.RegisterSize[0x1A] = 2
_reg.RegisterSize[0x1B] = 2
_reg.RegisterSize[0x18] = 2   # GATECFG1
_reg.RegisterSize[0x19] = 1   # GATECFG2

1. VREGが出ない → ~STBY未接続

症状:24Vを入れてもVREGが0.8V、VDDが3.3Vにならない。SPIも無応答。

原因:~STBY(CN1-10)を何にも繋いでいなかった。基板側でプルダウンされているので、未接続=スタンバイ状態。スタンバイ中は内蔵レギュレータもSPIも止まる。

対処:GPIOでHighに駆動する。起動時にLow→Highすればハードリセットも兼ねる。

stby = DigitalOutputDevice(25, initial_value=False)
time.sleep(0.01); stby.on(); time.sleep(0.05)

2. UVLOが消えない → CONFIGのVCCVAL

症状:STATUS=0xE403。SPIもレジスタR/Wも正常、24Vも端子台まで来ているのにUVLOフラグだけ何度クリアしても再点灯。基板2枚で同じ。

原因:L6480のUVLOはモータ電源ではなく**ゲートドライブ電源(VCC / VBOOT-VS)**を監視する。CONFIGデフォルト(0x2C88)はVCC=7.5V設定で、UVLO解除閾値がVCC 6.9V(max 7.3V)、VBOOT-VS 6V。チャージポンプのダイオード降下を引くとVBOOT-VSが閾値ぎりぎりで、この基板では解除されない。

対処:VCCVALビットを立ててVCC=15Vにする。

dev.setRegister(StRegister.Config, 0x2E88)   # 0x2C88 | 0x0200

これでSTATUS=0xE603(正常アイドル)になった。

3. 動かす瞬間に遮断 → GATECFGデフォルト

症状:Moveを送るとSTATUS=0x0613。OCD(過電流)とSTALL_A/Bが同時に立ってHiZ、ABS_POSも動かない。

原因:GATECFG1のデフォルトはIGATE=4mA、TCC=125ns。ゲート充電量0.5nCでは基板の大型FETが半端にしか導通せず、VDSが上がったままになる。L6480はVDSで過電流とストールを検出するので、動かした瞬間に誤検出して遮断する。

対処:ゲート電流と充電時間を延ばす。以下は同じ基板で実績のある値。

dev.setRegister(0x18, 0x0057)   # GATECFG1: IGATE=8mA, TCC=3000ns
dev.setRegister(0x19, 0x89)     # GATECFG2: TBLANK=625ns, TDT=1250ns

CONFIGもGATECFGもHiZ状態でしか書けない。またSTBYリセットや電源断でデフォルトに戻るので、初期化関数に組み込むこと。

4. 高速で脱調 → BEMF補償の過小

症状:60rpmまで滑らかだが120rpmで脱調。

原因:滑らかさ優先でFN_SLP(BEMF補償の傾き)を理論値の半分にしていた。速度が上がるほど逆起電力で実効電圧が削られ、補償が足りないとトルクが落ちる。

対処:FN_SLPをモータ定数からの計算値(0x34)に戻す。KVAL_RUNも0x20→0x28に上げた。結果、10〜350rpmで脱調なし、400rpmで脱調(24V無負荷の限界)。

最終パラメータ

レジスタ 値 備考
CONFIG 0x2E88 VCC=15V
GATECFG1 0x0057 IGATE=8mA, TCC=3000ns
GATECFG2 0x89 TBLANK=625ns, TDT=1250ns
KVAL_RUN/ACC/DEC 0x28 24Vで約3.9A相当(連続運転なら要温度確認)
KVAL_HOLD 0x10
INT_SPEED 0x0BEC 4R/(2πL) ≒ 182 step/s
ST_SLP / FN_SLP 0x06 / 0x34 AN4144の式で計算
MAX_SPEED 0x41 300rpm(無負荷限界の85%)
ACC / DEC 0x45 約1000 step/s²
FS_SPD 0x427 高速域フルステップ+ブースト
STEP_MODE 0x04 1/16

切り分けで役に立ったこと

  • テスターで電圧を追う。JP1中央(VDD)、JP1のVREG側、CN1-10(~STBY)、端子台の24V。この4点で1は即座に特定できた。
  • STATUSレジスタをビット単位で読む。0x0000は「返事なし」、0xE403は「UVLOだけ」、0x0613は「OCD+STALL」。フラグの組み合わせが原因を直接指している。
  • GetStatus(0xD0)はフラグをクリアする。2回続けて読んで消えなければ「ラッチの残り」ではなく「今起きている」と確定できる。
  • 基板を2枚試して同じ症状なら、故障ではなく設定を疑う。

参考

  • L6480データシート(STマイクロ):STATUSビット定義、UVLO閾値、GATECFG
  • AN4144(STマイクロ):電圧モードのKVAL・BEMF補償の計算式
  • Strawberry Linux L6480V2マニュアル:JP1、配線、回路図
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?