2015年2月24日火曜日

ハイサイドスイッチを作ってみた

最近僕のまわりではIOTが流行っているようで、ラズベリーパイなどからいろいろなデバイスの電源をON/OFFする回路を作りたいという質問をよく受けます。
FETかトランジスタを使ってハイサイドスイッチを作れば良いのですが、ネットで調べるとどれも微妙に回路図が違うので、どれが良いのか迷うようです。

Webで実行できる回路図シュミレータCircuitLab(https://www.circuitlab.com)でどの回路が良いのか実験してみました。

また、半導体で電源をコントロールする場合、コントロールするデバイスのプラス側でスイッチするハイサイドスイッチと、デバイスのマイナス側でスイッチするローサイドスイッチというのがあります。ローサイドスイッチの方が部品数が少なく良いのですが、人間の感覚として直感的に解りづらいし、グランドが共通でなくなるのがとてもいやです。
僕もP型半導体とN型半導体で同じ回路を組めるようになるのに何年もかかりましたし、マイナスの電圧がかかったり電流が流れるって本当に解りづらいです。
そこで今回は直感的に解りやすいハイサイドスイッチで実験をしていきたいと思います。


1. トランジスタ編
まず古典的な手法。2SAと2SCのトランジスタを組み合わせる方法です。
きちんとON/OFFできています。問題点としてトランジスタ駆動は電流をたくさん使います。


2. FET編

ドランジスタとPチャネルFETを使うパターンです。
マイコンの電源がOFFの時は電流が流れないようにトランジスタを挟んでいます。
トランジスタを使う回路とくらべ少ない駆動電流で大きな出力を取り出せるのが特長です。もっとも一般的なやり方?
きちんと動いています。
でも低電圧で駆動する場合、個人的にはベースとグランド間の抵抗がいらない気がします。

これでシュミレーションしてみました。
やっぱり、きちんと動きます。

Webの回路図シュミレータ面白いですね。実際に回路を組まなくても
全部パソコンだけで実験できてしまう。すげー。



2015年2月23日月曜日

基板を作ってみた

ここ数年、回路図と基板を作っていたなっかので、暇つぶしに作って見ました。
bschv3の回路図エディターでネットリストを出力して、CadlusXでアートワークしてみました。
LPC1114FN28用のマイコン開発基板。
LPC1114FN28ですが、秋月電子で140円で売っている、ARM32ビットマイコン。
すごい安いです。これでいろんなことできそう。



2015年2月10日火曜日

プラたくに行ってきた

もう一か月以上たってしまいましたが、2015年のよーめー日記は一般のファミリー層の人も楽しめる内容を書いて、広告費を稼ぐと心に決めたのでした。

ということで、ファミリー層でも楽しめる日記第一回。葛飾区立石にある、男の子に大人気のプラレールが楽しめる喫茶店、「プラたく」に行ってきました。
この喫茶店にはたたみ一畳程のスペースにプラレールが展示してありまして、自分のプラレール車両を走らせて遊ぶことができます。たった一畳だけとなめてかかってはいけません。こんな感じになっているんです。
すぐよこのテーブル席からみるとこのすごさに圧巻されます。
食事の方も喫茶店としてはかなり変わっていて、隣のお寿司屋さんで作ってるお寿司などが頼めたりもします。
一番のおすすめはプラレールの形のケーキ。かなりよくできています。
はやぶさ、こまち、ドクターイエローの三種類があります。
テーブルが五つほどしかなく、休日の昼間はとても混んでいるので、平日に行くことをお勧めします。



PIC32MX用の開発ボードを作ってみた

PIC32MXマイコンを使って、いろいろ組み込みのプログラムをしてみようと思い、LEDをチカチカさせられる、通称「Lチカ」開発ボードを作ってみました。


回路図はこんな感じです。すべてのPIC24とPIC32MXのデータシートに目を通して、多くの種類のPICにプログラムを書き込んでLEDを光らせるように設計したつもりです。
あとは、あしながのピンソケットを買って、こんな風に基板にとりつれば、Arduinoのように基板を何枚も重ねられるので、スイッチとかセンサーとかSDカードリーダーを上下の基板に取り付けられます。

プログラム書き込み用のピンヘッダーは縦タイプのものでなくてL字タイプのものをつけるべきでしたね。そうしないと上に基板をつけたと時にプログラムが書き込めない・・・。


2015年2月9日月曜日

SwiftでもC++でもコンパイルできるようにHello Worldを書いてみた。

プログラム言語Swiftを勉強していたら#ifが使えるらしいことが書いてありました。
これは、SwiftでもC++でもコンパイルできるソースコードが書けるのではないかと思い、早速両方のコンパイラでコンパイルできるHello Worldを書いてみました。

Swiftは#ifの中も全て構文解析するので#ifでくくるだけでは両方でコンパイルすることはできません。
従ってSwiftはコメントがネスとできるという機能も使ってC++特有の部分を記述しています。
両方の文法を満たすのって結構難しいです。

想像していた以上に読みづらく、もう全く実用にならないです。


-------------------


#if SWIFT
    /*/**/
#endif
    
#include <stdio.h>

#if SWIFT
    /**/*/
#endif



#if SWIFT
    /*/**/
#endif

static void println(const char* a){
    printf("%s\n",a);
}

#if SWIFT
    /**/*/
#endif

#if SWIFT
    /*/**/
#endif
    
int main(){

#if SWIFT
    /**/*/
#endif



println("Hello, World!");



#if SWIFT
    /*/**/
#endif

}
   
#if SWIFT
    /**/*/
#endif