Project lime #02

Project lime #02

UinProducts 0

Project lime 回路編

こんにちは、UinProductsです。
前回の記事Project lime #01では自己紹介とlimeというプロダクトについて少しだけお話しましたが、今回は技術的なことに関して、limeの回路製作でぶつかった壁を取り上げてお話させて頂きます。

できるだけ秘密にしておきたいところは特別出演のニシキアナゴくんに隠してもらってます…!

Broadcom BCM20737Sを使った割り込み制御

僕たちUinProductsのプロダクトlimeでは、
フルカラーLEDを10個制御する必要があります。

基本的な制御はBroadcom社製BCM20737SというSiPのCortex-M3を利用しています。
https://store.macnica.co.jp/products/broadcom_bcm20737s

このSiPはPWMが出力可能です。
ただ、3本は16mAの吸い込めるのですが、
1本は2mAしか吸い込めないので注意が必要です。
(他のGPIOも基本的に2mAしか吸い込めない)
limeには3個のPWMしか使わないのであまり関係ないのですが(^_^;)

今回、フルカラーで6mAのLEDを使用しており、
単純に10個同時に光らせると60mAとなります。
これはもちろんマイコン的にNGですし、消費電力も大きくなってしまいます。

そこで、シフトレジスタを使ってダイナミック点灯をすることにしました。

ダイナミック点灯の落とし穴

ArduinoならdelayMicrosecondsがあるので
全く問題なく10個くらい制御できると思うのですが、
BCM20737Sは1.25ms以下で割り込みを入れることができないみたいです(SDK2.2.0)
しかも、あらかじめ用意されている
Fine timerという割り込み関数は12.5ms以下には設定できなく、
特別な割り込み関数を用意する必要があります。
BroadcomのcommunityのTimersカテゴリの中に詳細があります。
(ユーザ登録が必要:http://community.broadcom.com/thread/2175
※実際には3.75ms未満で割り込みを入れようとすると正しく動かなくなりました。

つまり、10個のLEDをダイナミック点灯するとちらついてしまうのです…!
BCM20737Sを使って高速な割り込み制御をしようとしている方は要注意です。
(そもそもBLEのSiPに高速制御をさせるのはどうなんだという話は置いておいて...)

https://www.youtube.com/watch?v=2vBDmVeXogY&feature=youtu.be

ご覧の通り、同時に光っているように見せたいLEDたちが
とても目にやさしくない感じで点滅しています…

したがって、回路に工夫をする必要がでてきてしまいました。
マイコンとLEDの間にコントローラを入れようかと考え中です。


ところで皆さんはチンアナゴとニシキアナゴ、どちらが好きですか?

参考にしてくれた記事

記事が登録されていません。
この記事を参考にして、新しく記事を投稿しよう!

違反について