質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

1978閲覧

ステッピングモータドライバL6470のレジスタのパラメータを取り出せない(getParam)

koropeta

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2021/07/03 00:04

##問題と実現したいこと
STMicroのL6470をラズベリーパイからPythonで動かしています。
レジスタに保存されたパラメータを取り出してみようとチャレンジしているのですがうまくいきません。
やり方をご存じの方がいらっしゃれば教えていただけないでしょうか。
下のソースコードを実行すると”None”が出力されます。
よろしくお願いいたします。

##環境
Raspberry Pi: Model3B
Python: 3.7.3
IDE: VSCODE

ステッピングモータドライバ: AE-L6470DRV(秋月電子)
モータ: ST-42BYH1004-5013
電源: 12VDC

##ソースコード

import wiringpi as wp import RPi.GPIO as GPIO import struct SPI_CH = 0 SPI_HZ = 1000000 GPIO_NUM = 25 GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_NUM, GPIO.IN) def L6470_Write(channel, data): for da in data: wp.wiringPiSPIDataRW(channel, struct.pack('B', da)) #初期化 def L6470_Init(channel): L6470_Write(channel, [0x00,0x00,0x00,0xc0]) L6470_Write(channel, [0x05,0x00,0x0e]) L6470_Write(channel, [0x06,0x00,0x0e]) L6470_Write(channel, [0x07,0x00,0x0e]) L6470_Write(channel, [0x08,0x00,0x01]) L6470_Write(channel, [0x15,0x03,0xFF]) L6470_Write(channel, [0x16,0x07]) L6470_Write(channel, [0x09,0x5A]) #KVAL_HOLD L6470_Write(channel, [0x0A,0x6A]) L6470_Write(channel, [0x0B,0x6A]) L6470_Write(channel, [0x0C,0x6A]) print(L6470_Write(channel, [0x29])) #KVAL_HOLDの値(0x5A)を表示させたいが出力は”None”が表示 def L6470_Move(channel, n_step): if (n_step < 0): drc = 0x40 stp = -1 * n_step else: drc = 0x41 stp = n_step stp_h = (0x3F0000 & stp) >> 16 stp_m = (0x00FF00 & stp) >> 8 stp_l = (0x0000FF & stp) L6470_Write(channel, [drc, stp_h, stp_m, stp_l]) if __name__ == '__main__': wp.wiringPiSPISetup(SPI_CH, SPI_HZ) L6470_Init(SPI_CH) L6470_Move(SPI_CH, -800*128)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

↓のリンク先のコードで解決しました。
WiringPiを使わずにRpi.GPIOの制御のみでできました。
リンク

stepMotorSample.py の 24行目と25行目の間に、次のコードを入れると初期値が出てきます。

Python3

1 kval_getdata = MD.getKval(0) 2 print(kval_getdata) 3 4【結果】 5[[41], [41], [41], [41]]

投稿2021/07/04 03:26

koropeta

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

L6470_Write関数は値を返すようにはできていません
wiringPiSPIDataRWの使い方を確認してみてください

投稿2021/07/03 00:26

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koropeta

2021/07/03 01:00

ありがとうございます。wiringPiSPIDataRW以外で取り出す方法があれば教えていただけないでしょうか。
koropeta

2021/07/03 21:37

公式を教えていただきありがとうございました。 公式を見ましたが無理そうですね。 L6470_initの最後に以下のコードを追加してみましたが、0029を意味する"2 b'\x00)'" が表示され、 buf = bytes ([0x09, 0x5A]) でも0009を意味する”2 b'\x00\t'"が表示されました。 ほかの方法を探りたいと思います。 buf = bytes([0x29, 0x00]) retlen, retdata = wp.wiringPiSPIDataRW(0, buf) print(retlen, retdata)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問