WS2812Bのnewタイプがある話
■概要 |
光り物に欠かせない有名なLEDとなったWS2812Bは、実はチップが2種類あって困ったって話です。
具体的には、WS2812Bという品番なのに、なぜか点灯できない問題が発生するというもの。
そこで、いろいろ試して暫定ですが解決した話になります。
本来なら、WS2812Cとでもして欲しいくらいの修正だと個人的には思います。もし、同等の問題で困っている方の参考になれば幸いです。私た試した解決策は、一番最後にありますので、対策方法だけ知りたい方は、最後をご覧ください。
2018/3/5追加 残念ながらお相手の環境では点灯しなかったとの報告を受けました。もう少し調査が必要そうです。適当な抵抗の決め方が問題かもしれません。ご注意ください。 |
写真は、WS2812Bを使ったテープLEDです。良く見かけるタイプですね。
■経緯 |
何種類かこのNeoPixcel系を制御できるLEDコントローラを作ったことがあり、それをお使いの方から、全然光らないテープLEDがあるんだけど・・・とのことで、調べることになりました。当初は、単なる配線ミスと考えていたのですが、そんな単純なことではありませんでした。
※今回の主役?(笑)となるWS2812Bが搭載されたテープLEDです。これは防水タイプでシリコンでおおわれているので、写真がぼやけています。
※購入時のパッケージと思われるもの。ちゃんとWS2812Bと印刷されています。
■見た目の確認 |
本当に、この制御できないLEDは、WS2812Bなのでしょうか?これだけ有名になるとFake品?も考えられます。
マイクロスコープで、写真撮影し比較してみます。
左から順番に、WS2812B、SK6812、今回のLEDの3種類です。
左から順番に、WS2812B、SK6812、今回のLEDの3種類です。
違いが分かりますか?
少しマークを付けてみましょう。
少しマークを付けてみましょう。
品番 | 内容 |
WS2812B | LEDを制御するICが縦長に見えます。RGBのLED素子は〇の位置 |
SK6812 | ICは横長で正方形に近い。少し切り欠きのようなベタ?がある |
今回 | SK6812に似ているが、LED素子が左下に集約されている |
こんなLEDチップは、私の手持ちにありません。
軽く、Google先生にたずねてみるも答えは得られず、SNSに頼ることにします。
※@La_zlo さんからの情報提供。ありがとうございました!(Twitterからの画面キャプチャー)
https://blog.adafruit.com/2017/05/03/psa-the-ws2812b-rgb-led-has-been-revised-will-require-code-tweak/
どうやら、高速化のためにチップを新しくしたとのこと。既存のWS2812Bのデータタイミングと極力互換性を持たせたのだけど、RESETするタイミング(点灯するタイミング)は、いままで、50us以上Loと規定していたのを280us以上にしてくれとのこと。違いはそれぐらいで、そのまま使えるよ的な・・・
※いや、使えてないんですけど・・・
※いや、使えてないんですけど・・・
このWS2812B(名前を、"new WS2812B"と勝手に命名します。)のデータシートは、下記からダウンロードできます。
http://www.world-semi.com/DownLoadFile/108
http://www.world-semi.com/DownLoadFile/108
new WS2812Bの通信タイミングを抜粋するとこんな感じです。
確かに、これを見るとRESETが50usを要求していたのが280us以上になり、通信速度は幅が広くなり、あまり厳密な速度を求められなくなったように見えます。ちなみに下記が、今までのWS2812Bの通信タイミングです。
■タイミングの差 |
項目 | WS2812B | new WS2812B |
T0H | 250ns~550ns | 220~380ns |
T1L | 300ns~600ns | 220~420ns |
例えば、T0Hであれば、new WS2812Bは、220~380nsを要求していますが、WS2812Bは、400ns±150nsです。
最初、これが原因かとも思ったのですが、結論としてはこれは問題じゃないと思います。
なぜならば、前回の標準値400nsのままで動作していますし、new WS2812Bも明記はされていませんがある程度の許容幅があると思われます。
が!
あるドキュメントの存在を思い出し、試したところあっさり動き出しました。
■解決策 |
手持ちのドキュメントから抜粋してます。
※WS2811RGB_WS2812_manual.pdfというもの。
ここに、300とありますが、100Ω以下で十分かと思い、今回は47Ωを使ってます。
これは、推測なのですが、初回起動するときに通信パルス幅を測定してるのかなぁ?なんて思ってます。
そこに、ノイズが入るとタイミングが合わずに、以降のデータが無視されてしまう?(推測です)
これは、推測なのですが、初回起動するときに通信パルス幅を測定してるのかなぁ?なんて思ってます。
そこに、ノイズが入るとタイミングが合わずに、以降のデータが無視されてしまう?(推測です)
もし、マイコン(コントローラ)と、テープLEDを直結して動かないのであれば、騙されたと思って、少し小さい抵抗を入れると幸せになれるかもしれません。
ちょっと、なぜ?ってところまで追えてませんが、ひとまず動いたご報告まで。
もし、追加情報あればコメントお願いします。
もし、追加情報あればコメントお願いします。