2023年12月31日日曜日

2023年の活動 まとめ

2023年の製作物およびイベント参加のsummaryです。

1月〜 超音波浮揚の実験と製品化。スイッチサイエンスMaker Faire TokyoBOOTH(12V電源版)で総計50台以上を販売。

3月 「こっしぇる!」出展。

5月 NT京都出展。クワッドコプター「銀雲雀」の自動制御システム。

6月 知能ロボットコンテスト参加。「銀雲雀」。チャレンジ技術賞受賞

https://www.youtube.com/live/rb7TOAqGzIQ?si=odGls4-7qg82keT9&t=12035

8月 インタラクティブ・ペンプロッタ。3目並べを実現。

10月 Maker Faire Tokyo出展。プレゼンテーションにも登壇

11月 新ROBO-剣参加。ハードウェアを一通り完成、ソフトウェアは来年へ

11月 NT東京出展(小型クローラロボットと自動制御システム)

12月 マイコン時計の製作開始。進捗50%。来年へ。

2023年12月17日日曜日

マイコン時計(仮称)製作開始

前の記事と順番が前後しますが、マイコンを使った時計の製作を開始しました。詳細は未だ伏せておきますが、実用になるものを目指しています。

まずは、回転駆動部分を試作しました。240~1800rpm程度の回転速度で、できるだけ小さくしたいので自作しました。左は比較用のタミヤのミニモーター標準ギヤボックスです。

ATtiny204 フォトインタラプタの長周期パルス信号の周期計測

現在製作中のマイコン時計(仮)ではATtiny204を使用し、フォトインタラプタで駆動部の回転周期を計測する部分があります。この機能の実現のためにマイコンの周辺機能をいくつか組み合わせた事例として記録しておきます。

以下、21.のような数字および太字はATtiny204データシートの章番号と周辺機能の名前を指します。

概略


タイマー・カウンタBにインプットキャプチャ機能があるのでこれを使います。--> 21. 16-bit Timer/Counter Type B (TCB)

H8などではタイマーユニットへの外部入力は専用に割り当てられている端子がありますが、最近のAVRではイベントシステム( → 14. Event System (EVSYS))を介しての入力となります。 Figure 21-1. Timer/Counter Type B Block Diagramにも、入力がEvent Systemとあります。

更にフォトインタラプタのアナログ出力を直接つなげるように、アナログコンパレータを使います。 → 28. Analog Comparator (AC)

VREFとAnalog Comparatorの設定

  • 非反転(positive)入力: 入力ピン
  • 反転(negative)入力: 内部VREF
  • ヒステリシス: 50mV

アナログコンパレータは2つのアナログ信号の電圧を比較するものですが、今回は1本の入力を閾値で2値化したいだけなので、一方の入力に内部リファレンス電圧を使います。

18. Voltage Reference (VREF) CTRLAの「Bits 2:0 – DAC0REFSEL[2:0] AC0 Reference Select」について、「DAC」ですがこれは単独に使うD/Aではなくアナログコンパレータに接続されているD/Aということのようで、ここでNegative入力に使う電圧を選択できます。

  VREF.CTRLA = VREF_ADC0REFSEL_1V1_gc;

  // Positive input = AINP0, Negative input = voltage reference
  AC0.MUXCTRLA = AC_MUXNEG_1_bm;

  AC0.CTRLA = AC_HYSMODE_50mV_gc | AC_ENABLE_bm;

イベントシステムによるACとタイマーの接続

event channelにイベントソースを割り当て、userに提供するevent channelを選択するという2段階になっています。 参照: Figure 14-1. Block Diagram

アナログコンパレータの出力はasynchronous generatorになることができ、TCB0はasync userの0番として固定されています。

event channelとしてasynchronous channel の0番を使って接続するとこのようになります。

async channel 0 ← AC output
TCB0 ← async channel 0

EVSYS.ASYNCCH0 = EVSYS_ASYNCCH0_AC0_OUT_gc;
EVSYS.ASYNCUSER0 = EVSYS_ASYNCUSER0_ASYNCCH0_gc;  // TCB0

タイマーの設定

Figure 21-5. Input Capture Frequency Measurement

まずクロックソースを設定します。ここで時間分解能と計測可能な周期の最長が決まります。1秒間に10回程度の周期を想定しているので、最大で1秒程度の時間が計れれば良いでしょう。

TCB自体のプリスケーラでは2分周までしか設定できませんが、TCAと同じクロックソースを使うモードがあります。今回は周期の長い信号を計測したいので、これを使います。TCAのクロック分周器であれば、最大1024分周までがサポートされています。64分周とすると、0.0192ms分解能で約1.3秒まで計測できます。(periperal clock 3.33MHzの場合)

TCAの設定について(20. 16-bit Timer/Counter Type A (TCA))、16ビットタイマーを2個8ビットに分けて使うsplit modeと区別する意味で、「シングルモード」という指定になります。

TCA0.SINGLE.CTRLA = TCB_CLKSEL_DIV64_gc | TCA_ENABLE_bm;

TCAは他の機能はまだ使わず、カウンタを回すだけなのでこれだけです。

TCBの設定

TCB0.CTRLA = TCB_CLKSEL_CLKTCA_gc;
TCB0.CTRLB = TCB_CNTMODE_FRQ_gc;

以上で、TCB0.CCMPに周期が取得されるようになります。

電源分配基板

電源分配用基板を作り直しました。 電源をON/OFFするためのパワーMOSFETと、基板にネジが落ちるなど不慮の事故に備えての安全のための電流ヒューズを載せました。ロボットの操作パネルに付く電源スイッチ(定格5A)は駆動用電流を直接流すためではなく、このMOSFETのゲート電圧を...