
オートメーションプロジェクトの1つでは、1-Wireスレーブデバイスであるデバイスを作成し、マスターからコマンドを受信し、その出力のアナログ信号の値を0〜10Vの範囲で設定する必要がありました。
マキシムの標準1-Wire超小型回路のラインを分析した後、そのような機能を実装できる超小型回路がないことが明らかになりました。
そのため、マイクロコントローラに1-Wireスレーブを実装することが決定されました。 この資料が、自分の手で「スマートホーム」を作る人々にとって興味深く、役に立つことを願っています。 1-Wireはそのようなプロジェクトでかなり人気のあるバスです。 Atmelは、Atmelの石MK Cortex M0 +
ATSAMD20G16として選ばれましたが、第2部ではコードでの実装について説明します。 シリーズの第3部では、
OWFS (One Wire File System)Linuxライブラリ用の独自のデバイスファミリの実装について説明します。 今日は、開発プロセス中に出会ったハードウェアソリューションのいくつかについてお話します。
それは主に、健康へのダメージを最小限に抑えながら、マイクロコントローラの脚を1-Wireバスに接続する方法についてのものです。 単純から複雑に移行します。
何もしない
Cortexコアを備えたマイクロコントローラで1-Wireデバイスを組み立てようとするときに最初に遭遇する問題は、3.3Vマイクロコントローラの電力レベルであり、1-Wireバスでは5Vです。 マイクロコントローラーの足の許容差を5Vに使用して、そのままバスに直接接続できます。 残念ながら、SAM D20のレッグは5ボルトに耐えられません。したがって、このオプションは私たちには適していませんでしたが、公平に注意する価値があります。 ただし、3.3Vの石の足に直接外部バスを配置することはお勧めできません。 第一に、寄生電力を持つバス上の他のデバイスの不安定な動作の可能性があり、第二に、長いワイヤでは、チップを「キャッチ」できます。
レベル変換

最も単純なオプションは、トランジスタ上の双方向レベルコンバーターです。 そのためには、1-Wireバスの側面から5Vのどこかを取る必要があります。
最初のオプションは、デバイスに5V(3.3Vに加えて)を加えてバスに「給電」することです。 結果として、回路の複雑さ。
2番目のオプションは、1-Wireバスを
3本のワイヤに配置することです。 3番目の線は+ 5V電力線です。 問題-余分なワイヤ、長いワイヤの電圧降下。
レベルマッチング
本当に+ 5Vを使用したくない場合は、信号線を2つのコンポーネント(入力と出力)に分割できます。

このスキームでは、コントローラー側のラインが逆になっていることに注意することが重要です。
ボーナスとして、データ行を2つの部分に分割すると、ソフトウェアをさらにデバッグしやすくなります。 バス上の他のデバイスの信号と混合することなく、オシロスコープから信号(
1-Wire Txライン )を個別に受信することができます。
安定性を高める
1-Wireデータの受信をより確実にするために、マイクロコントローラの側面から急峻なパルスエッジを作成する必要があります。 これを行うには、TI
LMV331のコンパレータを使用します。これにより、論理「0」と「1」の間のより正確で鋭い遷移と160mVのヒステリシスが得られます。 また、出力バイポーラトランジスタBC547をフィールドIRLML6346に置き換え、保護TVSダイオードESD5Z6を6Vにします。

この回路では、コンパレータに5Vから給電する必要があります。 どこで入手できますか?
アンタイド1-Wire
1-Wireバスとデバイスの内部電子回路の電気的絶縁を確保するために、絶縁型
ADuM1201レベル
トランスレーター 、および
TES 1-1211絶縁型DC / DCコンバーターを使用します。 前の場合と同様に、1-Wireデータラインを2ラインに分割します:1W_Rxと1W_Tx。

12〜5ボルトのDC / DCコンバーターを例にとりますが、同様の3.3 / 5を使用できます。
残りの回路
完全を期すために、マイクロコントローラを接続するための回路と、出力アナログチャネル0〜10Vを示します。


なぜなら 1-Wireプロトコルでは、バス上の各デバイスに一意のアドレスが必要です。ボードには、Maxim
DS2411から1-Wire UIDを
配置します。 彼女のバスマスターとして、私たちは彼女のUIDを読み取り、それを自分のアドレスとして使用します。 DS2411には0x01ファミリコードがあります(ファミリコードはUIDの上位バイトです)。 OWFS Webサイトで、新しいデバイスに使用されていないファミリコードを選択し、最初のバイトを置き換えます。
すでに述べたように、第2部では、1-Wireスレーブプロトコルのソフトウェア実装に進みます。