pcDuino3 nano のウリの一つに、Arduinoとの互換性というのがあります。
今回はこの、pcDuino3 nanoの基板上に実装されているArduino風ヘッダについて調べてみます。
ヘッダーの見取り図はここに置きましたので、良かったら参考にしてくださいな。
他に見ておいたほうがいい資料として、pcDuino3 nanoの回路図をLinksprite社のHP(←リンク先の下の方、Schematic)で見ることができます。
また、pcDuino3 nanoのCPUである All winner A20のデータシートはメーカーのHPにはなさそうですが、ネット上で検索するといくつか見つかります。
以下、自分なりに「これは大変だ。早く知らせなくては...」と思った点を書き記しておきます。
...ああ、そうでした。
Sparkfunの解説も重要です。というか、ネット上のまともな解説記事はこれしかないです。初代pcDuino V1ですが、貴重な情報です。
***** Arduino-ish ヘッダの仕様 *****
(1)GPIO
まず、電圧は3.3Vです。
データシートを見る限り、5Vトレラントにはなっておらず、入出力ともに3.3Vです。市販のシールドは殆ど使えないと思ったほうが良いでしょう。
IICなど、いくつかの端子は基板上でプルアップされています。
他の端子についてもA20がプルアップ抵抗を内蔵しており、ソフトから有効/無効を設定することができます。
A20はプルダウン抵抗も内蔵しているようですが、設定の仕方がちょっと判りません。あと、抵抗値もデータシートに記載が見当たりませんでした。
どのくらい電流が取り出せるか、GPIO-0(J11-1)に様々な値の抵抗を接続し、電流-電圧特性を測ってみました。結果は下のグラフの通りです。A20のデータシートでは絶対最大定格が+/-40mAとなっており、だいたい+/-20mA程度までは実用範囲のようです。
IOREF端子は3.3Vが出力されています。
(2)ADC
pcDuino3 nano のADC入力はチャンネルによって仕様が異なります。
ヘッダーの見取り図の通りですが、ch0とch1はレンジが2.0Vで分解能 6bit、ch2~5はレンジが3.0V(3.3Vではナイ)で分解能12bitとなっています。
リファレンス電圧は固定となっており、AREF端子はpcDuino3 nanoの場合なぜか0.1uFのコンデンサだけ接続されて事実上N.C.となっています。
サンプリングレートは不明です。LinkspriteのForumのどっかに書いてあったような気がしましたが忘れましたよ。
あと、なぜかch0だけ680kΩでプルアップされています。
(3)PWM
Arudino同様にPWM3/5/6/9/10/11が使用可能です。
周波数もソフトで設定できますが、あんまし使ったことがないので、この辺のことはよくわかりません。
(4)電源入力
ArduinoのヘッダにはVinとかいう名称の電源入力端子があり、Arduino UNOであれば7~12Vを印加することができます。
一方pcDuino3 nanoのVinに相当するのはJ9-8, +5Vinですが、5Vのみ入力可能となっています。
pcDuino3 nanoを組み込み用途で使用する場合、自作のシールドを作ってここから電源を供給することもあり得ると思いますが、要注意です。
下の図はpcDuino3 nanoの電源系統について5Vの部分だけを抜き出したものです。
ArduinoヘッダのVinとマイクロUSB型の電源入力、USB-OTGは単純に並列接続されています。回路図にあるFB23というのはフェライトビーズあるいはリセッタブルヒューズでしょう。逆流防止のダイオードなども入っていないので、同時に複数の電源をつなぐことはできません。
前回の記事で
「USB-OTGを使用する時、PC側に十分な電源供給能力があれば別途電源は不要」
みたいなことを書いたのですが、正確に言い直すと
「USB-OTGを使用する時は別の電源は外さなくてはならない」
です。要するにUSBケーブルを抜き差しする度にOSをシャットダウンしなくてはならない、ってぇことです。
ホント??
***** 何かやってみる、しよう *****
ここまででAruduino風ヘッダの仕様について判ったような気になれたので、実際に入出力を試すための簡単なシールドを作ることにしました。
今回作るシールドではArduino風ヘッダの次の機能を確認することができます。
GPIO入力 ... 押しボタンスイッチ
GPIO出力 ... LED
ADC ... 可変抵抗と温度センサー
IIC ... 8x2文字のLCD
SPIとシリアル入出力については、シールド基板の面積による制約と、あと特に何もアイデアが思い浮かばなかったので割愛しました。
プログラム(Python)については次回の投稿で説明します。
***** 回路の説明 *****
いちおう、簡単に回路の構成を説明しておきます。
下に回路図の画像をあげておきますが、ぼやけてて見づらいので、部品表と一緒にここにpdfを置いておきました。
以下、各機能毎に簡単に説明していきます。
1)押しボタンスイッチ
2個の押しボタンスイッチをGPIO3とGPIO4につなぎました。
前述の通り、A20 CPUはプルアップ抵抗を内蔵しているので、シールド上ではプルアップ抵抗を実装せずに負論理になるよう接続してあります。
直列に入っている330Ωの抵抗は、GPIOが出力に設定された状態でSWを押した時の保護です。
2)LED
LEDは緑、黄、赤のLEDをそれぞれGPIO5、GPIO6、GPIO7に接続しました。
3)LCD(IIC)
秋月電子で扱っている8x2文字のキャラクタ型LCDです。IICインターフェースです。
pcDuino3 nanoは2.2kΩのプルアップ抵抗を基板上に持っているので、液晶モジュール側のプルアップ抵抗は使用しません。
4)アナログ入力
A4に可変抵抗をつなぎました。アナログ入力チャンネルA4の入力レンジは3.0Vなので、1kΩの可変抵抗と100Ωの固定抵抗を直列にし、調整範囲が0~3.0Vになるようにしてあります。
また、温度センサLM35DZを入力チャンネルA3につないであります。3.3V電源との間に入っているダイオードD4は何の目的で入れたのか忘れました。LM35DZが壊れた時にADCを保護しようと思ったのかもしれません。
抵抗R6とコンデンサーC2の存在は単純に私的な習慣です。
***** 部品の説明 ****
部品はほぼ全て秋月電子で購入できます。
LEDに別の品種を使う場合は直列に入っている抵抗の値を変更してください。
LCDは秋月電子で扱っている、LCD本体と変換基板がセットになっているものです。
シールド用の万能基板も何種類かあるようです、好みに応じて選べばよいと思います。
***** 組み立て *****
組み立てにあたって特に難しいところはないと思います。
LCDモジュールの裏面のプルアップ抵抗は使用しないので無効にします。
ピンヘッダーはかさばるし、ピンが華奢で曲がりやすいので最後に取り付けるのがよいでしょう。
配線の仕方は人によってそれぞれだと思いますが、私はAWG32くらいの耐熱ワイヤーを愛用しています(千石電商で買っている)。
私の場合の作例はこんな感じです。
裏面の配線は...
***** 動作確認 *****
...は次回の予定です。Pythonを使います。