2022年1月6日木曜日

I2Cのプルアップ抵抗値についての考察

I2C通信といえば今では当り前のように使われている通信プロトコルですが
以前から疑問に思っていたことがあります 。

実際プルアップ抵抗の適切な値っていくつなの?って
 私が以前(といっても17~18年前の話ですが)ハマっていたころは確かI2Cの規格を提唱したフィリップスセミコンダクター社(現在NXP社)の マニュアルには2.2KΩと書いてあったような記憶があるのですが

それ以来私の中ではI2Cのプルアップ抵抗は2.2kΩと思っていました。
 しかし最近のI2Cの回路図を見ると大抵の物は10KΩとなっていますし、
最近のNXP社のI2Cマニュアルをみると寄生容量による計算式はありますが 特にこれっていう数値は書いてありません。 

 じゃぁ一体いくつなの?って思って 
I2C  プルアップ抵抗値  と検索しても結論があいまいで、
かつ寄生容量、周波数までは考慮していても 通信距離まで考えて考察しているサイトは中々ありません。 

 適当に1KΩ~10KΩぐらいにしておけばいいよね、と思うんですがこんな記述があったり
すると益々混乱するわけです。
(この場合は結局I2Cの規格から外れてるのでこうなると後でわかるんですが)

そこで私の師匠であるT氏に相談を持ち掛けてみたところ
全ての疑問が解消しましたのでここに私のための備忘録として書いておきます。

プルアップの抵抗値を決めるパラメータとしては、まず通信速度(以前では400kbpsでも高速と言われていましたが現在では1Mbpsが主流です)、寄生容量、あと最後に通信距離になるのですがまずはI2Cの回路ってどうなってるの?というところから始めます。


上記の絵がI2C回路のSCL部分(クロック)をモデル化したものになります、
このようにマイコンなどから出力される信号は途中のFETをON/OFFするだけのスイッチと
考えられますので
何も電流供給源がない(プルアップ)場合はその先に信号がおくれません。
この場合のシュミレートが下記のグラフになります、当たり前ですね。


上記のようなことがあるため電流供給源としてプルアップがあるわけです
これをモデルに追加すると・・・

この回路をシミュレートするとこんな感じに


ここまでわかりましたので、実際の回路をモデル化してみましょう
電源電圧3.3V、通信速度は400kbps,プルアップ抵抗値は10KΩです
本来はSCL,SDAとなりますが今回はSCL(クロック)だけで作ってみます。

I2C回路のFET他は▷マークに省略しています
上記の回路をシミュレートしてみると(寄生容量も考慮しています)

とここまではどのサイトを見ても同じようなことが書いてあります、
ならこのモデル上で周波数とプルアップ抵抗値を変化させてI2Cの規格を
満足できる抵抗値を探せばいいのでは思いますが・・・

(I2Cの規格・・・SCLがLOWの時にデータを変化させ、SCLがHIGHの時はデータを変化させてはいけない、つまりクロックがHIGHの時だけデータが確定してますよってことです)

がしかし・・・

I2Cって元々の発想が基板内通信だったはずです
多分100mm~200mm程度の通信距離を想定していると思いますが
最近では液晶他、温度測定、物体検出などのモジュール品もあり平気で1Mや2M伸ばして
使うことも考えられます。

そう上記の回路では通信間距離を全く考慮に入れていないのです。
考えると100mmの時と1000mmの時が全く同じわけがありませんよね。

それでは通信間距離の代わりとして、伝搬遅延としてモデルに追加してみます
(ここでは伝搬遅延を1インチあたり0.13nsとして計算
ちなみに1nsは10億分の1秒です)

ではこのモデルを使用してSCL,SDA両方共にシミュレートしてみます

電源電圧3.3V,通信速度400kbs,
プルアップ抵抗10KΩ、
通信距離1インチ(25.4mm)

このように通信ライン上の波形が鈍ってくるのがわかりますが、これは通信距離、プルアップ抵抗値によって変化し受信側でI2Cの規格を満足出来なくなるケースが出てくるって言う事がわかります。

では色々変化させてシミュレーションしてみましょう。

まずは通信距離を100倍の100インチ、つまり2540mmに変化してみます。
他のパラメータは動かしていません

電源電圧3.3V,通信速度400kbs,
プルアップ抵抗10KΩ、
通信距離100インチ(2.54m)

通信距離を2.54mまで伸ばしてみましたが、I2Cの規格を満たす通信はできるようです
ただ安全性を考えるとこの条件でプルアップ抵抗10kΩというのは
かなり限界値に近い気がします。

さらに同じ条件で通信速度を1000kbpsまで上げるとどうなるか・・

まるっきり話になりませんね、
ならプルアップを1kΩまでさげるとどうなるかやってみます

これなら問題ないようです。

結果I2Cのプルアップ抵抗値は通信速度、
通信距離によって最適なプルアップ抵抗値は変化するというのが結論です。

よくあるプルアップ抵抗値が10KΩというのはI2C回路を10台術繋ぎにしても1kΩに
なるわけで、まぁ妥当な選択とも言えそうです。


上記の回路シミュレータはLTSPICEと言ってPC上で回路をシミュレートできる
フリーのソフトウェアです、もっとよく知りたいと思った方は

私の師匠が開設している
伝説のスパイス」をご覧下さい。https://www.youtube.com/channel/UCE7f0TFhyS3EuqPqzGnw0-Q



















2021年5月12日水曜日

レーシングドローンにおけるリポバッテリーの内部抵抗について


ドローンレースを長くやっているとリポバッテリーがどんどん増えていきますよね、いったい一年間で何本買うんだろうかと思うほど買っちゃいます、今回はそんな悩みの種のリポバッテリーの内部抵抗について考えてみたいと思います。

バッテリーのライフってこんな感じの流れじゃないでしょうか

新品状態の内は全開にしても中々Low Battery Alarmにならず飛んでいられる。

しばらく使い込むとアラームが出る時間が短くなり。

最後は飛んですぐアラームが出るようになって使えなくなる。

これって何が原因なんでしょうか?

ずばり内部抵抗が大きくなるから  です。

一番レースで使われているTATUUのRlineバッテリーをISDTなどの充電器で内部抵抗を表示させると、一番いい状態の各セルの内部抵抗って大体1mΩ~3mΩ(かなりいい個体です)

(内部抵抗は常に電圧により変化しています、正確に測るのであれば4.2v付近つまり充電終了前で測定するべきです)

中間ぐらいで4mΩ~7mΩ(大抵のrlineはここに収まります)、

で死んだかなと思われるものは10mΩ以上になります。



この内部抵抗なんてものは普通のアプリケーションでは無視される値です、だって3mΩですよ 

3/1000Ωなんてテスターのリード線だって100mΩ~500mΩぐらいありますので計測すらめんどくさい値です(4点計測法とか使います)

じゃぁなんでドローンレースだと意味があるの?

というのは使う電流のスケールが大きすぎることです、

例えばストレート全開状態で各モータが使う電流はバラバラだと思いますが平均30A使ったとして合計120A、この普通では考えられない大電流が流れた場合微小の内部抵抗の値が大きく影響を与えます。

例えば [おまえは既に死んでいる]レベルのリポの場合だと 

内部抵抗は各セル10mΩで6セルだと合計60mΩ、E=RI(オームの法則ですよ、覚えていますか?E=電圧(V)、R=抵抗(Ω)、I=電流(A)です)

E=0.06(Ω)×120(A) ですのでE=7.2Vになります、これが電圧降下になりますので

最初25Vあった6セルリポがこの場合17.8Vまで下がります。セル単位でいうと2.96V

こうなるともうアラームが出まくるのは仕方ありませんね。


次に[オレいくらでも電流流しちゃうぜ!ヒャッホー]レベルのリポの場合だと

内部抵抗は各セル3mΩで6セルだと合計18mΩ、E=0.018(Ω)×120(A) ですので

E=2.16Vが電圧降下になります,この場合最初6セル25vが22.84vこれだと全然問題ありません。

このようにレーシングドローンの場合は普通のドローンに比べ使う電流が大きすぎるので微小な内部抵抗の変化によって大きく電圧降下が変化するのがわかります。


式や文章だけだとわかりずらいかもしれませんのでここでは回路シミュレータ(LTSPICE)でグラフ表示してみます.

[おまえは既に死んでいる]レベルのリポ

6セルリポバッテリー、各セル平均内部抵抗10mΩ合計60mΩ、25Vの時、

負荷0Aから120Aまで変動


[オレいくらでも電流流しちゃうぜ!ヒャッホー]レベルのリポ

6セルリポバッテリー、各セル平均内部抵抗3mΩ合計18mΩ、25Vの時、

負荷0Aから120Aまで変動


ということでリポバッテリーの状態を判断する場合は内部抵抗値を計れば

大体わかるということがわかります。

じゃあ内部抵抗を上げない使い方ってどーするの?と思いますが

現在のJDLで採用されている予選方式(90秒の間に何周回れるか)では

リポに多大な負荷をかけることになりますので、どうしても寿命は短くなる方向になります。

やはりリポを買い続けるのが正解かもしれません。












2021年3月16日火曜日

モーションコントローラ実験

 加速度センサ、ジャイロセンサといえば昔から電子工作が趣味の人間なら一度は手を出した経験があると思いますが、当然のごとく私も以前にハマった記憶があります。

しかし実際に加速度、角速度の生データをみると当然のごとくノイズにまみれていて使い物にならなかった記憶しかありません、以前は今のように簡単に使えるフィルタ等がなく全て自前でフィルタ類を用意しなければなかったからです。

ただ現在はちがいます、センサ自体も進化しフィルタ類もライブラリという形で誰でもマイコン機種を問わず簡単に使える環境が揃っています。(例えばカルマンフィルタ、相補フィルタ、MadGwickフィルタなど数学的知識がないととても扱えるようなフィルタではありませんが現在は関数の形で生センサデータを送ると綺麗にフィルタリングされて戻ってきます)

ただしかし、必ずここで問題になるのはyaw(Z)軸のドリフト問題です。

yaw軸のドリフト問題というのは簡単にいうとpitch(Y軸)、roll(X軸)、yaw(Z軸)のうちyawだけが計算で角度を求めるため計算誤差が蓄積されていき結果ドリフトという現象になることです。(ドローンでいうと、ラダーのセンターが時間と共にズレていくことになります)

この問題を解決するために今までの加速度、角速度の6軸に加え、地磁気の3軸を足した9軸センサというものもありますが、自然界の地磁気というものは人工物である電線、配電盤、鉄塔などの磁力に比べると遥かに小さく特に屋内などでは使い物にならないようです。

このドリフト問題、例えばセンサーを手にもってドローンを目視で飛ばすような場合、最初はいいのですがドリフト量が大きくなりキャリブレーション位置からラダーのセンターが180°ズレた場合は体はドローンと反対方向を向くことになり、とても目視できる状況ではないのは明らかです、

ただしかしFPVだったらどうでしょうか?

この疑問から今回のプロジェクトはスタート致しました。

FPVですとラダーのセンターがズレた場合も映像でズレを認識できるし体がドローンと反対方向を向いていても操縦ができるのではないか?

とりあえず今回はこれを検証にするために実験プラットフォームを作成してみました

センサーは3軸加速度、3軸角速度が取れるMPU6050(I2C接続)を使用し生データをMadGwickフィルタに入れその後各軸角度に変換しDAコンバータ変換後、送信機であるT_LIGHTに送っています。使用マイコンはSTM32F103





ドリフトが発生してもFPVで飛ぶことができるのか?

というかその前にモーションセンサで飛ばすこと自体できるのか?を検証してみます。


2020年11月22日日曜日

 RotorHazard製作のすすめ



2020年私は5回レースを主催いたしました、そのうち2回は実機でのレース、3回はオンラ

イン上でのレースです、オンラインの方はいいのですが実機レースとなると一番必要になる

のがラップ計測システムです。

ドローンレースが単純に早く飛んだ者が勝ちという物なので絶対に必要ですが、

これが結構曲者です。

現在のところラップ計測システムの種類としては・・・・

1,赤外線ポンダーを積んで受光機で計測するもの(これはほぼ過去の物となっています)

2,無線ポンダーを積んで計測するもの、MyLAPS等

https://www.mylaps.com/jp/rc-drone-racing/

3,RX5808でFPV電波を受信して計測するもの lapRF等

https://www.immersionrc.com/fpv-products/laprf/

4,QRコードをゲートに設置してカメラ映像から計測するもの Tiny View Plus等

https://github.com/t-asano/tinyviewplus

まだ他にもあるかもしれませんがこんなところでしょう。

実機レースの2回はほぼJDL(JapanDroneLeague)のメンバーに協力してもらったため

3番目のMYLAPSでの計測となりましたが、毎回お願いするのも気がひけます。

そこで自分で用意してみようとなるのですが・・・・・

まず一番信頼度の高い3番のMyLAPSに代表される無線ポンダーを積んで計測するものです

がシステム自体の値段が高価です。(とても個人で用意できる金額ではありません)

じゃぁ自作はというと、結構ネット上に色々解析結果が転がっています、ただその全てが車用のRC4トランスポンダーの情報です。がこれでもなんとか改造していけるのではないかとやってみたのですが、やはり道路にループアンテナを埋め込みその上を車が通過させる構造のため、ドローンのゲートのように大きいループアンテナのなかを通過するとういうのは色々やってみましたが、私には無理という判断に落ち着きました。

大きい基板がPSOC5を使用したデコーダー部、中くらいのがループアンテナアンプ、
小さい2つの物がドローンに積むトランスポンダーです

その次にトライしたのが4番のQRコードを利用した計測です、この方法はTINYWHOOPでは
かなり使われており信頼性も高いのでやってみたのですが・・・

TINYのように屋内コースだといいのですが屋外ですと、一日を通して光の当たり方が変化するのでQRコードの置き場所に相当工夫が必要、さらに私のようなエキスパートクラスレベル
ならなんとか計測できるものの、プロクラスレベルになると途端に計測率がわるくなるとい
う結果になりました。ということでこれもだめ。

次に3番のRX5808 のRSSI出力を利用したラップ計測ですがRX5808は
以前から色々トライしていました。このブログでも紹介していますが

http://nonsayadrone.blogspot.com/2017/02/rx5808.html


https://www.pidflight.com/pidflight-lap/

こんなのも色々作ってみていましたが、いかんせんアナログRSSI出力を利用しているので

各ドローンのVTXごとの出力の差、RX5808自身の個別差等のスレッショルドをどこにおくのかというのが大きな問題でした。


そこで今回トライしてみたのがRotorHazardです、以下RHと略します。
このRHのメリットしては・・・

1,まずRSSIのしきい値の自動化(これが一番大きい)

2,ラズベリーパイを使用しているのでWEBサーバーとなる。
(wifi接続できればアプリ等は不要、PC、タブレット、スマホ等でもOK)

4,8台まで計測できる

5,LAP計測だけでなくレースマネジメントもできる機能がある

6 複数のサーバーを用意すればサーバー間通信が可能となり区間タイムの計測他ができる。

等があります。

なんかいいことづくしですので作ってみました。

https://github.com/RotorHazard/RotorHazard


必要な物はgithubに書いてありますが.....

日本から発注するならこれがいいんじゃないか的なもの・・・

https://akizukidenshi.com/catalog/g/gM-14839/

https://www.banggood.com/ja/Boscam-5_8G-Wireless-Audio-Video-FPV-Receiver-Receiving-Module-RX5808-for-RC-Drone-FPV-Racing-p-84775.html?rmmds=myorder&cur_warehouse=CN

https://www.banggood.com/ja/Geekcreit-ATmega328P-Na
no-V3-Controller-Board-Improved-Version-Module-Development-Board-p-940937.html?rmmds=myorder&cur_warehouse=CN

上記の2点ですが、いままで何個も買っていますが大抵不良品が混じってきますので

各々必要数プラス1ぐらいがいいかと思います。

あとこれぐらいの配線だと手配線でも十分いけますが綺麗に収めたいなら基板も用意する必


10枚で500~600円程度ですが、送料がDHL等を使うため2500~3000円ぐらいかかります

https://www.seeedstudio.com/RotorHazard-PCB-1.2-g-1301309

https://www.thingiverse.com/search?q=RotorHazard&type=things&sort=relevant

以下私が印刷したもの、これだけで26時間ぐらいかかっています






Linux初心者の方は最初のラズパイの構築で大いにハマると思いますが
(私がそうでした)

テストしてみたところいい感じに計測できています、ただレースマネジメント関連の使い方が特にマニュアルがなく大変複雑です。

ですのでRotorHazard人口を増やして私に教えて欲しいのでブログを書いてみました
私でわかることなら教えますのでよろしく・

スマホ、タブレット、PC等でのログイン画面

このように8台計測できます


仮に全てF1にして電波をだしたところ






























2020年9月18日金曜日

 HOI-LINK-α (ホイリンク アルファ)説明書


販売サイト https://nonsaya.thebase.in/

大変ご好評を頂いているHOI-LINK-HRですが、更に世界で活躍される方々の為にコントローラ入力装置ドングルの最高峰をめざす新製品を発売致します。

今回のポイントはスピードです、つまり1秒間にパソコンに送信されるスティック位置情報の更新回数を極限まで早くすることを念頭に開発致しました。

では1秒間に更新される位置情報が早くなると
どんなメリットがあるのでしょうか?

例)
1、例えばスティックの0%から100%までを1秒間かけて移動するとします。
2、位置情報の更新回数は1秒間に4回とします。

そうするとFCなりPCに送られる位置情報は

0秒後   0%
0.25秒後  25%
0.5秒後  50%
0.75秒後  75%
1秒後     100%
となります。

FCなりPCから見ると突然0%から25%の位置情報が来てその途中はありませんので
コマ送りのような処理をせざるを得ません。
しかしこれが1秒間に更新回数8回だったら、16回だったらどうでしょう
段々とスムーズな処理ができるようになります。

このように位置情報の更新回数は大きければ大きいほど
スムーズに処理ができるようになります。
言い方を変えると秒間15フレームのアニメーションと
秒間30フレームのアニメーション どちらがスムーズに見えるか? 
とでも言えるでしょう。


とここまで理解して頂いて。。。。

では受信機とは何をしてるのか?


これわかってるようで実際信号まで解析して
説明している所はあまりありませんので簡単に解説致します。

受信機は各社の電波信号(S-FHSS,D16など)によって送信機から送られてきた
現在の各軸の位置情報を受信します、
その後受信機に搭載されているマイコンによってSBUS信号に変換され出力され、
その後は実機でしたらフライトコントローラ、
シミュレータドングルだったらUSB信号に変換するマイコンに送られます

で受信機はSBUS信号に変換したあとどのように出力しているのでしょうか?

実際にオシロスコープによって信号を観測すると18ch分の位置情報の
SBUS信号を一回だけ出力している訳ではなく、
繰り返し18ch分の信号を出力していることがわかります。


一部分を拡大してみます。

このように18CH分の位置情報を出力したあと、しばらくの休止時間ののち
再度18ch分の位置情報出力を繰り返し行っている。
ちなみにここでの更新回数は1秒間に約70回、つまり70Hzとなっています。



この更新周波数、調べて見ると結構受信機によって差があることがわかって来ましたので手持ちの受信機を調べてみました
私はFRSKYユーザーですのでFRSKY系がメインとなります









これを見るとFRSKY系は110Hz、FUTABA系は70Hzぐらいということになります、
(現在私の手持ちの受信機を計測しただけですので他はわかりません)

ちなみにTBS(Team BlackSheep)のCROSSFIREという商品がありますが、
なぜ海外のFPV有力選手がこぞって使用するのでしょうか?
ロングレンジだから、ドローンレースでロングレンジ必要ですか?

これは私個人の考えですがこのCROSSFIRE、SBUSの更新周期が150Hzです。
これはFUTABA系の2倍以上のスピード、FRSKY系より40Hzも早い!
だから使われるのではないかと思います


ちなみにFRSKYのタラニスX9DをUSBケーブルでパソコンに繋ぐと
FRSKY系と同じように110Hzで更新されています。
(この場合オシロで確認するわけにはいきませんので、
車のRCシミュレータVRC-PROにて計測しています)


今回の改良点

現行のHOI-LINK-HRの更新周期は70Hzです、
FRSKYの有線接続(110Hz)に比べると約37%遅いことになります。
無線と有線との違いはありますが、シミュレータの世界戦で勝つための道具としては不十分との認識はありました。
(もちろん現行HOI-LINK-HRでも普通に使われる分には何も問題ありません
世界戦レベルの超シビアな話になります)

そこで今回HOI-LINK-αはファームウェアの大幅な変更を行い
現在最強とも言われるFRSKY有線接続(110Hz)より早く、
CROSSFIREと同等な150Hz品の受信機を使用し、SBUS→USB変換の
マイコンはその倍以上の300Hzでサンプリングを行い
PCに送信しています。

これにより信号の取りこぼしを無くし信号に冗長性を持たせました。


これにより大幅なスムーズ感(なめらかさ)を獲得することに成功いたしました、
今のところ国内トップ選手にテストをして頂いていますが、全ての方が
新型の方がスムーズで飛ばしやすいという評価を頂いています。

https://youtu.be/bnc-jtObfK8


HOI-LINK-α (ホイ リンク アルファ)
FUTABA専用品
価格 10,000円(税込み)HRに比べて受信機の差額分値上げになります
企画,製造,販売 
NONSAYA DRONE WORKS
ファームウェア設計,開発 ほいほい堂 http://www.hoihoido.com/blog/

















2020年5月4日月曜日

EBN_Cup オンライン 参加の意思表示のためのアカウント名変更について

EBN_Cupに参加希望の方はVelociDroneのアカウント名の最後に*(アスタリスク)を付けて下さい。

*がついていないアカウント名は自動的に予選順位から外されます。

なおアカウント名は日本語表記等も大丈夫ですが、
今後外国人が参加される場合を想定してできれば英語表記でお願いいたします。

まず Velocidroneのサイト https://www.velocidrone.com/
に行き、右上のLoginをクリックします


Loginから登録時のメールアドレス、パスワードを入力しLoginをクリック



My LicensesからAccount Settingsをクリック



Current player Name/Tagに現在のアカウント名が書いてあるので変更する
アカウント名をNew Unique Player Name/Tagに書き込みます
*を追加するだけです
その後 Save Changesをクリック



 VelociDroneを起動しアカウント名が変わってるのを確認してください



2020年4月26日日曜日

EBN_Cup オンライン コースダウンロード、コース設定について

以下は例として運営者から JDL 2018 R3 Kasumigaura Ver1.0
と言われた場合の方法です。

違うコースが指定された場合は 上記のコースを読み替えて下さい。

オープニング画面からTRACK EDITORを選択


DOWNLOAD TRACKを選択


Track Name に 


JDL と入力して、下にある SEARCH をクリック


検索結果から右側のスクロールバーを下げていくと、
JDL+2018+R3+Kasumigaura+Ver1.0
がみつけられます、この中のDOWNLOADをクリック


ダウンロードが終わったら、再度オープニング画面に戻り、コース選択まで行き
左上のコースを Empty Scene Dayを選択、JDL+2018+R3+Kasumigaura+Ver1.0を選択。

CLASSをSingleに、ArmingをAutoに、FormatをThree Lapsに選択して
SELECT SCENERY をクリックします。

2020/05/10追記
Lapの選択方法がアップデートにより変更されました
GAME TYPE の▽をクリックし出てくるメニューの一番下
Single Class - Three Lap Race を選択してください。




あと、タイムがリーダーボードに自動的にあがらない場合は
オープニング画面より OPTIONSを選択


ここのMAIN SETTINGより、
Auto Leaderboard Time UploadをYesにしてください