2025年07月05日

シフトレジスタを使用した簡易リモートIO

今回はマイコンやFPGAを使用せずにシフトレジスタとロジックIC、タイマICのみで簡易リモートIOを実現する方法について紹介したいと思います。

少し離れた場所にボタン入力やLED出力等のIO信号を複数、届ける場合、そのまま配線すると信号線に応じて多くの配線が必要となります。そこまで信号の速さが求められない場合は信号線をシリアル化して省配線化できれば理想的です。一般的にはマイコンやFPGA等でシフトレジスタを制御しますが、使用前にマイコンへ書き込みが必要だったり、マイコン周辺の回路も必要になってくるため、より多くの部品が必要になります。

今回はシフトレジスタとロジックICを組み合わせて、マイコンを使用せずにIO信号をシリアル化して、省配線化する方法を紹介したいと思います。この方法で片方向の同期で2線(同期クロック、データ)、双方向の同期で3線(同期クロック、データx2)の信号線で実現することができます。例えば8bitシフトレジスタを使用する場合、片方向で8線から2線で済むことになります。双方向でも16線から3線で済みます。本数が多い場合や伝送距離が長い場合は省配線による効果が非常に大きくなります。


主な使用部品としては、入力ICにSN74HC165、出力ICにSN74HC595、クロック生成にLMC555、ラッチ用カウンタに74HC4017、クロックとラッチの論理変換に2bitのインバータSN74LVC2G04の部品で実現できます。



設計のポイントとしては下記の3点です。
@シフトタイミング
Aラッチ/ロードタイミング
Bリセット後のクロック


@シフトタイミング
 SN74HC165、SN74HC595ともに立ち上がりでシフトするため、同じクロックを使用すると信号変化のタイミングと同時に信号を取り込んでしまうため、タイミングによってデータがずれてしまう問題が生じます。そのため、片方のクロックを反転させることで半周期タイミングをずらすことでシフト後の安定したタイミングで信号の取込みを行うようにしています。具体的にはSN74HC165にメインクロック(MCLK)、SN74HC595にメインクロックの反転クロック(/MCLK)を与えています。

Aラッチ/ロードタイミング
 74HC4017でメインクロック(MCLK)をカウントさせて8つ目にサブクロック(SCLK)として同期信号を生成させてます。9つ目の信号をリセット信号に接続することでカウンタリセットさせています。また、SN74HC165はHighでシフト、ローでパラレル信号の取込みなので同期信号の反転信号(/SCLK)を与えています。さらにそのままでは同期信号立ち上がりとメインクロックの立ち上がりがほぼ同じタイミングのため、タイミングによって先にシフトしてしまいます。その対策としてSN74HC165の反転同期信号(/SCLK)をCRフィルタで遅延させた信号(/SCLK_Delay)を使用することでロード後の最初のクロック(MCLK 0番目)を無視させています。

Bリセット後のクロック
 配線数を減らすためにメイン基板とサブ基板でメインクロック(MCLK)の配線をなくしています。その代わりにサブ基板では同期クロック(SCLK)からメインクロック(MCLK)を生成しています。LMC555やNE555にはリセット入力があるため、そのピンに反転同期クロック(/SCLK)を与えることでリセットさせてメインクロック(MCLK)を同期させています。ただし、LMC555やNE555の注意点としてリセット直後と通常の繰り返しでチャージ電圧が異なる仕様のため、リセット直後のみ周期が遅くなる問題があります。この問題に対して、リセット直後も通常の周期と一致させるためにリセット時にトランジスタを介して予めコンデンサをチャージさせることで回避しています。


TimingChart.jpg





実際に基板を起こして作ってみた基板がこちらです。

img1.jpeg
使い方としては下記のように電源を供給して、メイン基板とサブ基板に通信線と電源線を配線することで各IOが同期します。実際に省配線で入力8bit+出力8bitのIOを同期させることができました。

img3.jpeg


マイコンやFPGAを使用せずにシフトレジスタを活用するのは一般的には想定された使い方ではないと思いますが、シフトレジスタとロジックIC、タイマICのみで簡易リモートIOを実現することができました。今回はユーザ入力を想定しているため、メインクロックは8kHz、同期速度は1kHz程度で安定性や伝送距離(数m程度)を重視した設計にしています。今回の回路図やガーバー等はこちらで公開しています。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2025年06月07日

NE555 1stクロック

タイマーIC、NE555はCR発振で簡単にタイマーやクロック出力を実現できるため、1970年代に発売されたICでありながら未だに多く活用されています。

NE555のリセットピンを電源にプルアップさせて連続的なクロックとして使用する場合には大きな問題になりませんが、NE555のリセットピンを活用して、必要なときのみクロックを出力する場合、NE555の回路そのままでは意図した動作を実現できません。具体的にはリセット直後はタイミングキャパシタは0Vからチャージされ、それ以降は1/3VCCからチャージされます。そのため、クロックの周期がリセット直後だけ長くなってしまう問題があります。



追加する回路としてはタイミングキャパシタにPNPトランジスタと1/3VCCとなるように抵抗を追加(下図黄色丸部分)します。

NE555_Reset.png



この回路によって、リセット中(RST 0V)はPNPトランジスタがONして、タイミングキャパシタが抵抗分圧によって1/3VCCにチャージされます。リセット解放後(RST VCC)でPNPトランジスタがOFFし、最初から1/3VCCでチャージを開始するため、リセット直後であっても一定のクロック周期のクロックを出力することが可能となります。


最近のICでは至れり尽くせりな仕様で意図通りに動くことが多いですが...昔からあるICの場合は互換性を重視している等の理由で応用的な回路では意図しない動作をすることが多々あるため、要注意です。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2025年05月03日

UART互換シフトレジスタ

今回は簡単にマイコンの出力ポートを拡張できるシフトレジスタ、SN74LV8153を紹介したいと思います。


一般的にマイコン等のGPIOを拡張する際にはI2C接続のGPIO Expanderを多く使用することが多いと思います。また、出力もしくは入力の片方しか使用しない場合はパラレル入力用のシフトレジスタSN74HC165やパラレル出力のSN74HC595等を活用することが多いと思います。入出力混在の場合はI2C GPIO Expander、入力のみor出力のみといった片方向の場合はシフトレジスタという使い分が多いようです。

I2C接続のGPIO ExpanderやSN74HC165、SN74HC595等は少なくとも2本、現実的にはINTピンやロードピンを含めて3本以上の通信線が必要となります。少しでも占有ピン数を減らして出力を拡張する手段として、シフトレジスタとコンデンサや抵抗を駆使して1wire化する方法もありますが、信号タイミングの依存が強くなります。比較的タイミングに依存せず、容易に拡張可能なICとしてSN74LV8153があります。

SN74LV8153は一言でいえばUARTから8bitの出力ポートを操作できるExpander/シフトレジスタです。UARTのTX通信線、1本のみで8bitの出力操作を実現できます(必要に応じて別途Resetピンを接続してください)。また、3ビットのアドレス設定ピンを備えており、1本の通信ラインで最大8つのSN74LV8153を接続可能です。この場合、最大64bitまで拡張することができます。その他の特徴として、自動的にボーレートを検出するため、ボーレート設定が不要という特徴があります。


SN74LV8153の主な仕様は下記の通りです

・信号電源3V〜5.5V
・出力電源3V~13.2V
・出力電流最大40mA
・UARTフォーマット互換
・ボーレート2kbps~24kbps
 ※UARTであれば9600bpsや19200bps等の設定が汎用的

データシートに記載されていないものの、UARTから送信する際の仕様
・UARTデータ長8bit
・スタートビット 1bit
・ストップビット 1bit
・パリティビット None
・スタートビット後は必ずHighレベルである必要があるため、データは0bXXXXAAA1となる
 ※XXXXは出力のデータ、AAAは出力先ICのアドレス
・8つの出力を制御するため、1byteデータ0bXXXXAAA1を2回連続で送信する


PCにUSB-UARTSerial変換アダプタを接続して、SN74LV8153を操作した際、UARTはLSB Firstであることを失念しており、なかなか思い通りに動作せず、時間を要してしまいました。具体的には「スタートビット後は必ずHighレベルにする」ということは理解していましたが、MSB Firstだと思い込んでしまい、0b1AAAXXXXのデータを送信して、全く動作しないと悩んでしまいました。

UARTからデータを送信する際は下記のように「スタートビット後は必ずHighレベルにする」ため、UARTはLSB Firstなので0x80を加えるのでなく、0x01を加えるプログラムになります。

bytes[0] = 0x01 + (addr<<1) +((io_state&0x0F)<<4);
bytes[1] = 0x01 + (addr<<1) +((io_state&0xF0)<<0);



WebSerialAPIを活用して、ブラウザからUSB-UARTSerialを介してSN74LV8153を操作可能なツール、SN74LV8153 Test Toolを作成してみました。

SN74LV8153TessTool.png


EdgeやChorme等のWebSerialAPIに対応したブラウザからSN74LV8153の出力ポートを簡単に操作できます。


UARTはLSB Firstであることを失念して時間を要してしまいましたが、1本の通信線で出力を拡張できるSN74LV8153は非常に便利で面白いと思いました。出力だけでなく、入力に対応したICも出てくれば更に汎用性が上がって面白いですが、入力の場合はボーレート設定等が必要になるため、そのようなICは開発、販売されていないようです。少し残念です。

SN74LV8153の通信ボーレートが最大24kbpsでそこまで高速ではないため、高速な出力用途には向いていませんが、そこまで速度を要しない7SegやLED等の出力だけを拡張したいという場合には非常に便利だと思いました。今後、更に活用してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2025年04月05日

3D加速度&3D磁気センサ変換基板

今回は先日、設計/作成した3D加速度&3D磁気センサ変換基板について紹介したいと思います。

加速度センサとジャイロセンサを統合したICは多くありますが、加速度センサと磁界センサを統合したICは少し市場がニッチなようで種類もあまり多くなく、世に変換基板として出回っているもののの、IC自体は既にディスコン(生産完了品)になっている製品も残念ながら多くあります。

加速度センサ、ジャイロセンサ、磁界センサ等、すべて統合したICも世の中にはありますが、主な用途に応じて2つのセンサを組み合わせて使用することが多いです。例えば下記のような用途があります。


・加速度センサとジャイロセンサの組み合わせの用途例
 ドローンやロボットの制御: 姿勢安定化、動作補正目的。
 スマートフォン・ゲーム機: ジェスチャー操作や画面の自動回転検知。
 車両の安全システム: 横滑り防止装置、衝突検知。

・加速度センサと磁界センサの組み合わせの用途例
 コンパスアプリ・カーナビ: 方向と移動速度を同時に取得。
 ウェアラブルデバイス: ランニングや歩数計測目的。
 拡張現実(AR)アプリ: 方向感覚や位置情報の強化目的。

方向検知を目的とする場合に加速度センサと磁界センサの組み合わせを採用することが多いようです。加速度センサと磁界センサの組み合わせたICを可能な限り長期供給できるよう、既に発売から7年程度経過していますが、少なくとも2027年9月まで10年間の供給安定をSTが宣言しているIC、ISM303DACを選定し、変換基板を作成してみました。本音としてはここ数年発売のICで10年間の供給安定を謳っている後継品があれば良いですが、現状は販売されていないため、仕方なくISM303DACを選定しました。

ISM303DACは電源レンジが1.71Vから1.98Vです。3.3V系や5V系ではなく、電子工作レベルでは扱い辛いため、レベル変換を介して容易に3.3Vや5V系のマイコンに直結できるようにしてみました。 
ISM303DAC.jpg
3D加速度&3D磁気センサ変換基板の主な特徴は下記の通りです。
  • 磁界センサ 最大±50ガウス磁気感度
  • 加速度センサレンジ±2/±4/±8/±16g
  • 16bit分解能、256個のFIFOメモリを搭載
  • SPI/I2Cシリアルインターフェイス
  • I2CはGrove互換コネクタ搭載
  • 全IOにレベル変換ICを介してアクセス可能(3.3V/5Vの電源/IOに直結可能)


3D加速度&3D磁気センサ変換基板のガーバーやサンプルコード、回路図はこちらで公開しています。また、スイッチサイエンスのマーケットプレイスにて販売しております。今後は磁界センサをより精度高く使用するためのキャリブレーション等を紹介したいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2025年03月08日

Altium Designer Tips

今回は基板設計ソフトウェア、Altium Designerの設計で便利なショートカットやKiCadとの大きな差について少し紹介したいと思います。普段、KiCadを使用しているとAltiumとの考え方の差から使い方に戸惑う点が多々あります。それらを覚書として紹介したいと思います。

■便利なショートカット
・回路設計

右回転 → スペース キー

左回転 → Shift + スペース キー

X/Y軸反転 → X/Y キー

部品検索→J-Cキー


・基板設計

基板外形 → Mechanicalレイヤーで配置→ライン、四角形のオブジェクトで作図

基板外形設定 → デザイン→基板外形→セレクトしたオブジェクトから設定

回路図から読込 → デザイン→Import Changes From *.PrjPcb

平面表示 → 2

3D表示 → 3

3D回転 → Shift+右クリック

部品検索 → J-Cキー

部品反転 → Lキー

表示モード切換 → Shift+S

ベタGND → ツール→ポリゴン→ポリゴンマネージャ

ティアドロップ → Tools→Teardrops を選択

2点間計測の結果クリア→shift+C

3D部品の非表示→shift+Z

配線幅の変更→shift+W

■その他
・プロパティ表示
 画面右下のPanelsからPropertiesをクリック

・BOM生成
 回路図設計画面のレポート→Bill of Materials

・BOM修正
 BOMのパラメータ修正は直接、BOMを変更できない
 回路図設計画面のツール→パラメータマネージャからパーツを選択して、項目を修正する

フットプリントや3Dモデル更新
 基板設計画面でツール→PCBライブラリから更新
 もしくは部品を選択、右クリックでコンポーネントに対する操作→Update Selected Components From PCB Libraries

・画面外のオブジェクトを選択
 基板設計画面で意図せずに画面外にオブジェクトが配置されて選択できないことがあります。
 この場合は画面右下のPanelsからPCB Listをクリックし、座標でソートして画面外のオブジェクトをリストから選択します。



先日、24年8月にルネサスがAltium社を買収したことで、今後、Altium Designerの日本ユーザーがより多くなってくると思いました。Altium Designerの日本語の情報は少なく、見つかっても古いバージョンの情報だったりして、検索だけでは解決策が見つからないことが多々あります。今回、紹介しきれなかった項目については別の機会に紹介したいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする