carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

WS2812Bのnewタイプがある話

■概要

光り物に欠かせない有名なLEDとなったWS2812Bは、実はチップが2種類あって困ったって話です。
具体的には、WS2812Bという品番なのに、なぜか点灯できない問題が発生するというもの。
そこで、いろいろ試して暫定ですが解決した話になります。

本来なら、WS2812Cとでもして欲しいくらいの修正だと個人的には思います。もし、同等の問題で困っている方の参考になれば幸いです。私た試した解決策は、一番最後にありますので、対策方法だけ知りたい方は、最後をご覧ください。

2018/3/5追加 残念ながらお相手の環境では点灯しなかったとの報告を受けました。もう少し調査が必要そうです。適当な抵抗の決め方が問題かもしれません。ご注意ください。


イメージ 1
写真は、WS2812Bを使ったテープLEDです。良く見かけるタイプですね。

■経緯

何種類かこのNeoPixcel系を制御できるLEDコントローラを作ったことがあり、それをお使いの方から、全然光らないテープLEDがあるんだけど・・・とのことで、調べることになりました。当初は、単なる配線ミスと考えていたのですが、そんな単純なことではありませんでした。

イメージ 2

※今回の主役?(笑)となるWS2812Bが搭載されたテープLEDです。これは防水タイプでシリコンでおおわれているので、写真がぼやけています。

イメージ 3

※購入時のパッケージと思われるもの。ちゃんとWS2812Bと印刷されています。

■見た目の確認

本当に、この制御できないLEDは、WS2812Bなのでしょうか?これだけ有名になるとFake品?も考えられます。

マイクロスコープで、写真撮影し比較してみます。
左から順番に、WS2812B、SK6812、今回のLEDの3種類です。

イメージ 4

違いが分かりますか?
少しマークを付けてみましょう。

イメージ 5

品番内容
WS2812BLEDを制御するICが縦長に見えます。RGBのLED素子は〇の位置
SK6812ICは横長で正方形に近い。少し切り欠きのようなベタ?がある
今回SK6812に似ているが、LED素子が左下に集約されている

こんなLEDチップは、私の手持ちにありません。
軽く、Google先生にたずねてみるも答えは得られず、SNSに頼ることにします。

SNSを活用し情報を集める

ツイッターで情報を募ると、『なんか2種類あるらしい』という話と、『この写真に近いのでは?』という情報が得られました。
あ!まさしく、これじゃねぇ?

イメージ 6
※@La_zlo さんからの情報提供。ありがとうございました!(Twitterからの画面キャプチャー)
https://blog.adafruit.com/2017/05/03/psa-the-ws2812b-rgb-led-has-been-revised-will-require-code-tweak/

■詳細情報を調べる
調べてみると、ワールドセミ(Worldsemi)のレポートを見つけました。
こちらの海外サイトにまとめられています。
Worldsemiのレポート画像も見ることができます。

どうやら、高速化のためにチップを新しくしたとのこと。既存のWS2812Bのデータタイミングと極力互換性を持たせたのだけど、RESETするタイミング(点灯するタイミング)は、いままで、50us以上Loと規定していたのを280us以上にしてくれとのこと。違いはそれぐらいで、そのまま使えるよ的な・・・
※いや、使えてないんですけど・・・

このWS2812B(名前を、"new WS2812B"と勝手に命名します。)のデータシートは、下記からダウンロードできます。
http://www.world-semi.com/DownLoadFile/108

new WS2812Bの通信タイミングを抜粋するとこんな感じです。
イメージ 7

確かに、これを見るとRESETが50usを要求していたのが280us以上になり、通信速度は幅が広くなり、あまり厳密な速度を求められなくなったように見えます。ちなみに下記が、今までのWS2812Bの通信タイミングです。
イメージ 8

■タイミングの差
データシートを見ると、T0HとT1Lが微妙に範囲に収まってないんですよね。

項目WS2812Bnew WS2812B
T0H250ns~550ns220~380ns
T1L300ns~600ns220~420ns

例えば、T0Hであれば、new WS2812Bは、220~380nsを要求していますが、WS2812Bは、400ns±150nsです。
最初、これが原因かとも思ったのですが、結論としてはこれは問題じゃないと思います。

なぜならば、前回の標準値400nsのままで動作していますし、new WS2812Bも明記はされていませんがある程度の許容幅があると思われます。

オシロを引っ張り出して、いろいろ試したのですが、LEDは点灯することなくお手上げか?
って状態になりました。

が!

あるドキュメントの存在を思い出し、試したところあっさり動き出しました。

■解決策

手持ちのドキュメントから抜粋してます。
※WS2811RGB_WS2812_manual.pdfというもの。

イメージ 9

ここに、300とありますが、100Ω以下で十分かと思い、今回は47Ωを使ってます。
これは、推測なのですが、初回起動するときに通信パルス幅を測定してるのかなぁ?なんて思ってます。
そこに、ノイズが入るとタイミングが合わずに、以降のデータが無視されてしまう?(推測です)

もし、マイコン(コントローラ)と、テープLEDを直結して動かないのであれば、騙されたと思って、少し小さい抵抗を入れると幸せになれるかもしれません。

ちょっと、なぜ?ってところまで追えてませんが、ひとまず動いたご報告まで。
もし、追加情報あればコメントお願いします。