google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

PICAXEを使ってみる-その5 USB電流モニターの製作

 「PICAXEを使ってみる」の記事もいよいよ最終回。今回は仕上げとしてUSB電流モニタを製作します。

 ブレッドボードで開発していた回路をユニバーサル基板に実装します。

1.製作したUSB電流モニタ
USB電流モニタ、部品面
 USBコネクタ以外は、PICAXEのCPUとLED2個、抵抗3本、コンデンサ1本だけというシンプルな構成。出来るだけ小さく作ってみました。
 PICAXEのCPUにはプログラムを書き込んでおく必要があります。そのあたりはこの連載の初めの方か、他の方のWebをご覧下さい。

2.回路図(クリックで別窓に拡大)
PICAXE 08M2で作るUSB電流モニタの回路図
 以前の記事の回路からピンアサインを変更して作り易くしました。

 部品の数を減らすために検出部のオペアンプは省略しています。オペンプで増幅しないとADコンバーターのダイナミックレンジの下の方だけ使うことになって分解能が悪くなります。でもそこはソフトで繰り返し測定した平均値を取ることで目立たなくする作戦です。

 ちなみに以前同じような物をArduinoでも作っています。その時の回路と比べると、ハイサイド測定になっていないし万歩計の部分は省略しています。ともかく出来るだけ最低限の部品で作るのが今回の目標です。

3.配線面
USB電流モニタ、はんだ面
 中央を左右に走っているオレンジ/黄色のツイストテッドペア線はUSBの信号線(+D/-D)です。

4.こんなふうに使います
USB電流モニタの使い方

 USBのコネクタの間に入れて使います。流れる電流が大きいと高速、少ないと低速でLEDが点滅します。LEDは二つあって片方は1Hz/A、もう一方は10Hz/Aの速度で点滅するので、広い電流範囲(20mA~2A)で電流の監視が出来ます。正確な電流が知りたい時は、ストップウォッチで点滅間隔を測って計算すればOKです。

5.プログラム
 プログラムはこちら。(拡張子はtxtになっています)
 拡張子をbasに変更すれば、PICAXE Programing Editorで読めます。

 PWMを使い12ms周期でタイマー割り込みを発生させ、電流をADCで読んでLEDを点滅させています。割り込みなど使わなくても、mainのルーチンでポーリングしても同じ機能は作れます。でも今後何かを作る時の踏み台に使えそうなので割り込みでやってみました。

6.まとめ
 ケースを作る必要がありますが、それはそのうちに。100円ショップなどで探しているんですが適当な物が見つからないです。3Dプリンタでもあれば、さくっと作れちゃうんでしょうが、そんなお金も気力ありません。

 それと、とにかくPICAXEで何か作ってみるという目標は達成出来ました。同じことを素のPICでやろうとすると、開発環境の構築やら書き込み機の準備、それにPIC自体の使い方の勉強などが必要で、とてもこんな短期間では出来なかったと思います。PICAXEの実行速度が凄く遅いのが難点ですが、とっつき易さはピカイチだと思いました。

tag : 08M2自作ピカクス

PICAXEを使ってみるーその4 PWMでタイマー割り込み作ってみた

 PICAXEにはタイマー割り込みが無いことを嘆いていたら、その記事にTK-80BSさんからコメント。PWMでI/Oピンから割り込みかければいいのでは?というアドバイスを頂きました。

 何だかいけそうな気がするので早速テストしてみました。

1.原理
 PWMの出力ピンから適当なピンにPWMの信号を再入力し、そのピンを監視して割り込みかければいいんじゃない。ということです。

▼最初にテストした回路
PICAXEでタイマー割り込み。こんな線は不要
 C.2(Pin5)から出力されるPWMの信号をC.3(Pin4)へ入力しています。これで動きました。

 でも割り込みの検出にはC.3を見に行かないでも、いきなりC.2ピン(Pin5)を見ればOKでした。つまりC.2からC.3への配線は無くても大丈夫。それよりも、ピンを一つ余分に消費しないで済むのは助かります。

2.動作確認
 確認のために以下のようなプログラムを書いてタイミングを観察
pwmout pwmdiv64, 2, 249, 128    ;PWM on C.2 2ms/16ms 
setint %00000100, %00000100 ;accept IRQ from C.2(posi)

main:
low c.1 ;Output Low on C.1
goto main

interrupt:
high c.1 ;Output High on C.1
tp1:
if pinC.2 = 1 then tp1 ;Wait till C.2 = Low
setint %00000100, %00000100 ;Set again for next IRQ
return

 先頭の、pwmout pwmdiv64, 2, 249, 128
 これでPWMから周期16ms、幅2msのパルスを発生させています。これがパルス周期を最大に設定した付近で切りの良い値です。パルス幅はもっと短くても大丈夫でしたが、mainでどんな処理をやっているかで必要なパルス幅は変わるはずで、これが最適かどうかは判らないです。
 二行目のsetintで割り込みの検出条件を指定。もちろんC.2を監視させます。

 プログラムとしては、メイン側ではC.1をOFFに、割り込み処理ルーチンではC.1をONにしています。したがって、C.1をオシロで観察すれば処理のタイミングが判るという仕掛けです。

▼動作波形
PICAXEタイマー割り込み波形
 上がPWM、下がC.1の波形。オシロのトリガはPWMでかけています。

 PWMがHiになってから約2.5ms後にC.1がHiになっています。つまり割り込みの起動には約2.5msかかるということです。ずいぶんかかるもんですが、PICAXEの仕様では仕方ないでしょう。
 割り込みルーチンの中ではほぼ何もさせていませんが、それでもメインに処理が戻るまで2msくらいはかかっているようです。
 C.1の波形にジッタがあるのは、BASICのコマンドの間で割り込みを起動させるというPICAXEの仕様上避けられない現象でしょう。

3.まとめ
 ともかくPWMによるタイマー割り込みは成功です。ピンを一つ犠牲にしないといけませんが、タイマー割込みが使えると何かと便利だと思います。

 割り込み間隔はPWMの仕様の制限から最大で16ms。もっと長い間隔が必要な場合は、プログラムの中にカウンタを持つなりして細工すれば良いでしょう。
 最小の割り込み間隔はPICAXEのBASICの処理速度を考えると5msあたりが限界と思います。

 実は現在開発中のUSB電流チェッカーではこのタイマー割り込みの方法を使って10ms周期の動作が出来ています。そこいらあたりの話は、製作編の記事ででも紹介予定です。

 ということで、TK-80BSさんの提案はうまくいきました。ナイスアイディアありがとうございます。

tag : 08M2

PICAXEを使ってみる-その3 タイマー割り込みが無い?

 引き続きPICAXEの話。

 LEDをピコピコさせるUSB電流チェッカーを製作中です。前の記事でタイマー割込みが使えなくて困ったのですが、その後マニュアルを読み込んでみてもタイマー割り込みの話は出てきません。どうも08M2にはこの機能はサポートされていないみたいです。

 でも現在製作中のUSB電流チェッカーのような簡単なプログラムなら対策方法があります。

▼対策前のプログラムの実行時間
対策前の実行時間
 この波形は c.0 Pinの波形で、プログラムが実行中にHiになります。最短だと2.8msで処理出来るのに、if文で分岐があると7.4msまで処理時間が伸びています。この処理時間の違いを吸収するためにタイマー割り込みを使いたかった訳です。

 でもタイマー割込みが使えないなら、ソフトでiF文の分岐の有無にかかわらず同じ処理時間になるようなプログラムにしてしまえば隠蔽する必要も無くなります。

つまり、
if aaa = bbb then
  let aaa = ccc
endif

と書く代わりに

if aaa = bbb then
  let aaa = ccc
else
  pauseus x    ; wait same time
endif

と書いて、pauseus x でif文が成立したのと同じ時間を else 側で消費させれば分岐の有無にかかわらず処理時間は同じになります。
 (pauseus命令は 指定値 × 10μs 待つ関数です)

こういう対策を行った結果,

▼対策後の実行時間
対策後
 どんな条件でも処理時間は約7.4msになりました。これならタイマー割り込みは不要で、10ms周期にしたいのなら、残りの2.6msをpauseus命令で待たせればOKです。

 この方法はアセンブラで書くプログラムの実行時間を調節するテクニックの一つです。ただBASICのような高級言語では、環境やバージョンによって実行時間が変わってくる可能性が大きいのでいつも同じ結果が得られるとは限らないのが難点です。また処理する内容によって実行時間が複雑に変わる関数などの場合はお手上げです。

 でも、PICAXEは石の中にインタープリターが入っているみたいなので案外大丈夫な場合が多いかもしれません。ただ、PICAXEがターゲットとするユーザーの多くはオシロとか持って無さそうなので、だれでも出来る対策方法では無いのが最大の難点かもしれません。

 参考に、USB電流チェッカーの対策後のプログラムはこちら

tag : 処理時間08M2

カレンダー
05 | 2023/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード