Armadilloフォーラム

PWMでのサーボモータ使用

k-marine

2025年2月20日 15時50分

==========
製品型番: AX2210-U00D0
Debian/ABOSバージョン:3.20.3-at.3
カーネルバージョン:5.10.226-0-at
==========
お世話になります。

PWM0を使用し、サーボモータを動かしています。
サーボモータが、不定期に動く場合があります。
動かない場合もあります。

サーボモータは、ラジコン用サーボモータ(PWMで位置制御)になります。

サーボモータが問題なのか、ソフトの問題か切り分けができておりません。
以下のように、PWMを設定していますが、なにか他に設定が必要もしくは
値が異なるなどありますでしょうか。

なにか情報あればご教示下さい。

コメント

佐藤です。

> サーボモータが問題なのか、ソフトの問題か切り分けができておりません。
> 以下のように、PWMを設定していますが、なにか他に設定が必要もしくは
> 値が異なるなどありますでしょうか。
どのように設定していますでしょうか。
加えて、差し支えない範囲でかまいませんのでソフトからどのように制御しているのか
ソースコード等があると適切なアドバイスができるかと思います。

> ==========
> 製品型番: AX2210-U00D0
> Debian/ABOSバージョン:3.20.3-at.3
> カーネルバージョン:5.10.226-0-at
> ==========
> お世話になります。
>
> PWM0を使用し、サーボモータを動かしています。
> サーボモータが、不定期に動く場合があります。
> 動かない場合もあります。
>
> サーボモータは、ラジコン用サーボモータ(PWMで位置制御)になります。
>
> サーボモータが問題なのか、ソフトの問題か切り分けができておりません。
> 以下のように、PWMを設定していますが、なにか他に設定が必要もしくは
> 値が異なるなどありますでしょうか。
>
> なにか情報あればご教示下さい。
>

■設定内容
こちらが、抜けていました。
ご確認ねがいます。

stPersist.stPWM.period[0] = 20000000 # 20ms
stPersist.stPWM.duty_cycle[0] = 2170000 # 2170μs
stPersist.stPWM.change_unit[0] = 10000 # 10μs
stPersist.stPWM.change_interval[0] = 0.01 # 10ms
stPersist.stPWM.duty_cycle_min[0] = 1594000 # 1594μs
stPersist.stPWM.duty_cycle_max[0] = 2746000 # 2746μs

佐藤です。

すいません。追加で確認させてください。
ご使用になられているサーボモータのメーカ名や型番等はどのようなものでしょうか。
またサーボモータをArmadilloのピンヘッダに直接接続しているのでしょうか。
ピンヘッダは1.8V出力ですがサーボモータの仕様と合っていますでしょうか。

> 佐藤です。
>
> すいません。追加で確認させてください。
> ご使用になられているサーボモータのメーカ名や型番等はどのようなものでしょうか。
> またサーボモータをArmadilloのピンヘッダに直接接続しているのでしょうか。
> ピンヘッダは1.8V出力ですがサーボモータの仕様と合っていますでしょうか。

■ありがとうございます。
サーボモータは、HS-5055MG になります。
レベルは、直接接続ではなく、5Vに変換しております。

先程の設定は、pythonで実施しています。

ご確認よろしくお願い致します。

at_shota.shimoyama

2025年2月20日 18時40分

下山です。

stPersistなどで検索してみても、それらしい情報にヒットしなかったためお聞きしたいのですが、
Pythonでは何のライブラリを使用されているのでしょうか?

よろしくお願いします。

> 下山です。
>
> stPersistなどで検索してみても、それらしい情報にヒットしなかったためお聞きしたいのですが、
> Pythonでは何のライブラリを使用されているのでしょうか?
>
> よろしくお願いします。
■ありがとうございます。
参考は、御社のHOWTOを参考にして、echoで直接PWMドライバを
たたいてます。

https://armadillo.atmark-techno.com/howto/aiotg4-pwm-buzzer

特にライブラリは使っておりません。

下記の4つパラメータ設定し、DUTYを制御しております。
[container /]# echo 0 > /sys/class/pwm/pwmchip0/export
[container /]# echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
[container /]# echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
[container /]# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

設定順序(ENABLEが先など)や、duty_cycle値の設定分解能(10usceごとに制御)など
ありますでしょうか。ご教示願います。

at_shota.shimoyama

2025年2月21日 11時36分

> 設定順序(ENABLEが先など)や、duty_cycle値の設定分解能(10usceごとに制御)など
> ありますでしょうか。ご教示願います。

添付いただいた順序やコマンドで問題ないように思えます。

サーボモータが問題なのか、ソフトの問題か切り分けができていないということでしたので、
まずは問題が発生する最小限のコードを突き止めるというのはいかがでしょうか?

もしPythonを実行せずにパラメータを設定するだけでも発生するのであれば、LinuxのドライバかSoCかサーボモータや周辺の回路に問題がある可能性が高くなります。

ちなみに問題の発生頻度はどのくらいでしょうか?

よろしくお願いします。