Closed ShotaAk closed 3 years ago
10Hz以下で動かすような場合はまずないと思います。5Hz以下の指令値は0とする方針はいいと思います。 一応再現確認をしてみました。
(エビデンスを見つけられていませんが)Rapsberry Piは、PWMパルスを1周期出力し終えるまで、PWM周波数を変えることができないようです。
以下のスクリプトを作成して動作確認をしました。 再現する場合と再現しない場合があるようでした。
#!/usr/bin/env bash
set -ue
echo start 800
echo 1 > /dev/rtmotoren0
echo 800 > /dev/rtmotor_raw_r0
echo sleep 2sec
sleep 2
echo stop
echo 0 > /dev/rtmotor_raw_r0
for i in `seq 10`; do
echo start 1
echo 1 > /dev/rtmotor_raw_r0
echo start 800
echo 800 > /dev/rtmotor_raw_r0
echo sleep 2sec
sleep 2
done
echo stop
echo 0 > /dev/rtmotor_raw_r0
echo 0 > /dev/rtmotoren0
使用したハードウェアの構成はRaspberry Pi 4 + Raspberry Pi Mouse V3です。
# RaspberryPiMouseドライバのバージョン
$ git rev-parse --short HEAD
ea99d87
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
$ uname -a
Linux raspberrypi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
https://user-images.githubusercontent.com/3256629/125750730-63b18019-c02d-4cb1-b64f-a3d81aaca655.mp4
本PRの内容適用後は https://github.com/rt-net/RaspberryPiMouse/pull/72#issuecomment-880479378 にて記載したスクリプトを実行してもモータが止まることはなくなることを確認しました。
What does this implement/fix?
モータのPWM周波数が小さい時(< 5Hz)に、周波数を0にリセットします。
変更の背景
(エビデンスを見つけられていませんが)Rapsberry Piは、PWMパルスを1周期出力し終えるまで、PWM周波数を変えることができないようです。 そのため、1 HzのPWM周波数を設定すると、1秒間はモータを回すことができません。(回そうとしますが、回りません)
この仕様は、ジョイスティックコントローラでラズパイマウスを操作する際に影響します。 スティックを倒してラズパイマウスを走らせる場合、一瞬でも1 Hzの周波数を設定してしまうと、スティックを倒したにもかかわらずラズパイマウスが動かない、という状況が発生します。
Does this close any currently open issues?
いいえ
How has this been tested?
Ubuntu 20.04 で、±5 Hz からモータが回ることを確認しました。
Any other comments?
周波数の下限値が5 Hzで良いかは判断が難しいです。 下限値を大きくしすぎると細かい制御が効かなくなるので、感覚で適度な値を選びました。
Checklists