ラベル M5Stack の投稿を表示しています。 すべての投稿を表示
ラベル M5Stack の投稿を表示しています。 すべての投稿を表示

2023/12/09

MAK127用フォーカサー Ver.4

MAK127に EAF などのフォーカサーを取り付けている猛者もいるようですが作るの好きなんで作ってみました。そもそも MAK127 は素直に電動フォーカサー付けるところ無いんだよなぁ。ぶつぶつ。

ところで我が MAK127用フォーカサーもついに Ver.4。ハード的には最終版。。だと思ってます。Ver.3 に比べ小型軽量化に成功です(当社比)!PC との接続はUSB-C ケーブルにて接続してください。




今回の Ver.4 はだいぶコンパクトに載ってるでしょ?(最終盤はこれより厚みがあるモーターに交換しました)。

これまではアリガタにアリミゾクランプをつかってモータを取り付けてたのですが、今回は 3D プリンターでモータを載せる土台を作って接眼部にはめ込む作りにしました。

これがベース
リングは単なる薄い輪です

スペーサー(追加になりました)



3D プリンターの部品は3つ。

です。スペーサーはサポーター有りでプリントせざるを得ない形状ですのでご注意を。
そのほかに必要なものは以下。
バイポーラステッピングモーターは当初小型のものを使ってみましたがトルクが足りないので、リンク先のものを使うことにしました。12V のモータで、これ以上のトルクならOKだと思います。ステップ角とかも同じである必要はないです。ただ、3Dプリンターで作る部品の形状を考えると、モータのネジ穴の間隔が同じである必要はあるかなと。
電源も 12V で 1A 程度かそれ以上あれば十分です。
あとちょっと日本での入手性が怪しくなりそうなのが ATOM STEPMOTOR Kit でしょうか。スイッチサイエンスさんでは在庫限りの扱いのようです。海外発送でよければ製造元の M5Stack のオンラインストアから入手できると思います。
タイミングベルトはプーリーや取り付け位置の兼ね合いで他の長さを選んでも良いかもしれません。

組み立て

MAK127 のフォーカスノブのプーリーへの交換は、Ver.3 の投稿を参考にしてください。

また一部古い写真つかっていて、最終盤とは違うところがあるのはご勘弁ください。

1. モータをベースに取り付ける
モータにある穴に六角スペーサーをねじこんでおきます(多分完全にねじ込めないで少し浮いた感じになる)。また小さいプーリーをモータに六角レンチでとりつけておきます(後で取り付け位置は修正する)。ネジで取り付ける前にタイミングベルトを挟んでおきます。それからモータをベースに M3 のネジ3本で取り付けます。


2. ATOM STEPMOTOR Kit の準備
モータに付属してるケーブルを適当な長さで切り、ATOM STEPMOTOR Kit にねじ止めします。あとでモータ電流を調整するので、蓋はまだ閉めなくてよい。また ATOM lite (写真右上の四角いやつ)は外れないよう付属のネジでモータドライバの載ってるケースとねじ止めしておいた方が良いかも。



3. ATOM STEPMOTOR Kit をベースに取り付ける
M3 のネジ2本で取り付ける。

4. DC ジャックケーブルを接続
ベースの穴を通して、ATOM STEPMOTOR Kit にねじ止めする。ケーブルの太さと穴のサイズが合わなかったら適当にグリグリしてください。


5. ノブにスペーサーを入れる(新)
プーリーを取り付ける前にスペーサーを入れておく
M3 35mm のネジをねじ込んでおく

ノブにプーリーを入れる前にスペーサーを入れておく


6. ベースを MAK127 に取り付ける
タイミングベルトは結構タイトです。プーリーに引っ掛けながら穴を取り外した接眼部に通します。そして薄いリングを重ねます。接眼部を戻し、ねじ込みます。この時きちんと真ん中でねじ込めるように。そしてしっかりねじこんだときに接眼部が回転せず固定されていること。奥までねじ込んでも接眼部が回ってしまう場合は、ベースの穴の位置と接眼部がちょうど真ん中になっていないか、3Dプリンターの違いで出力されたベースやリングの厚みが大きくて回るようになるケースが考えられます。薄いリングの厚みを変えてみてください。




7. ベルトの位置の調整
まずプーリーの高さを揃える。その後にベルトの張りをプーリーの下に入れたスペーサーのネジで調整します。この機構でようやくベルトの調整幅が広がりました。ベルトの長さが多少異なってもこれで吸収できるかと。ちなみにベルトは張りすぎるとモータの軸が回転しなくなります(脱調という)。硬すぎずゆるすぎずで調整してみてください。




以上で組み立てはおしまいです。

ソフトウェア

動作させるには ATOM STEPMOTOR Kit のためのファームと、それを動かす UI が必要になります。Git にて配布してます。以下のリンクより入手してください。ソースコードはあんまり整理してませんが、、、興味がある方すいません。余計なコードとか転がってたらすいません。
本当は ASCOM 対応にしたいところなのですが、今のところそんなスキルはありません。以前は ASCOM に対応している myFP2ESP を手直しして使ってたのですが、シリアルに対応しなくなってしまったのでやめました。myFP2 の方はまだシリアル対応してるっぽいので、気が向いたら myFP2 を移植し直そうかな。

ATOM STEPMOTOR Kit のファーム

Arduino 形式で書いてます。M5 Stack の ATOM lite の Arduino のビルド環境が必要です。Git に置いてある atom_stepper_ctrl.ino をビルドしてください。

ユーザーインターフェース

用意したファームはシリアルポートにテキストでアクセスできるようにしてます。なので、TeraTerm などのターミナルエミュレータで直接制御することができます。でも使いづらいですよね。そこで Python で GUI を用意しました (atom_focuser4.py)。実行するには customtkinter, pyserial といったライブラリをインストールする必要があります。Windows 向けにはバイナリを用意したので(atom_focuser4.exe)、Python をインストールせずにバイナリを実行することも可能です。ATOM STEPMOTOR Kit の接続されているポートを選択し、Connect のスライドボタンをクリックすれば接続です。-100~+100 のボタンをクリックすればそのステップだけ移動します。マウスが接続されているならホイールのスクロールで Position を増減できます(Shift キーを押しながらスクロールするとステップが変わります)。またカーソルの上下(+Shift)でも Position の増減が可能です。M1, M2 はマークで、スペースキーで M1, スペース+Shift で M2 に現在の Position を保存できます。M1 と M2 の中間に移動したい場合は (M1+M2)/2 のボタンをクリックしてください。また Position の値は直接書き換えて Return キーを押すと指定した値に移動します。
Python 版の方はマウスのスクロールステップを変更できるボタンが用意されています(おまけ)。



興味をもっていただけた酔狂な方のご質問は X の @ttrsato まで。こちらでもいいんですが、気づくのが結構遅いです。



2023/02/05

MacBook Air M2 で Windows11 ARM 環境は使い物になるのか?

一週間ほど Parallels に Windows11 を入れて触った感触としては、周辺機器とは関係ない、単にソフトウェアを動かしたいだけなのなら結構違和感なく使えるのではないんでしょうか。macOS と Win11 の切り替えは全画面にしている Win11 とは指3本でスワイプでスカスカ切り替えられて、とてもスムーズ。とても別な OS が同居してる感はないです。CPU 半分 (4個)貸してるけど、macOS 側も特にストレスなしです。何年前か忘れたけど出始めのころの Palallels を触った感覚ではもっさり感はあったなぁ。隔世の感があります。

また動かなくて困ってる組み込み系のソフトはあるのですが、想定内でやはりなぁと。困ったらいままでの Intel Mac でどうにかしつつ、M2 で出来ることが増やせればな感じです。

比較対象にしてるマシンは、それまで使っていた MacBook Pro 2015 15" Retina。Core-i7 2.5GHzで、Memory 16GB 搭載してて macOS でも Bootcamp の Windows10 でもまだ十分使えるなというマシンです(個人的な感想)。

購入マシン構成とその経緯

MacBook Air M2 2022 8CPU, 8GPU (Mac14,2)
Memory: 24GB
SSD: 1TB

購入を決めたのは M2 Pro/Max が発表になってから一週間後ぐらい。M2 Pro が高すぎるのであきらめて、Parallels を使う前提で構成を決めました。候補としては M1 Air もあったのですが、仮想環境がまともに走ってほしいので、最大メモリ搭載量が大きく、MagSafe があってポートに余裕のある M2 Air にすることにしました。OS も二つ以上入れることと、天体撮影で必要な一時的なデータセーブサイズを考えて SSD も多めに。ちょっと高いんだけど。あと MagSafe 好きなんです。本体のコネクタに負担かからないので。今回の MagSafe のケーブルは前と見た目と違うんだけど、耐久性に改良がされているんでしょうか?期待しちゃいますね。GPU については GPU をガンガンに使ってくれるソフトはあんまり縁がなさそうだなと思ったので 8GPU にしておきました。 
キーボードはポクポクしたクリックを感じるタッチです。嫌いではないです。HHKB の方が好きですが。

アミアミ?ケーブル


速度と体感

速度

Geekbench 5 で CPU 性能を比較してみます。

macOS
MachineCPUOSSingle-coreMulti-core
MacBook Pro 2015Core-i7Monterey7443294
MacBook Air M2M2Ventura19098923

Windows
MachineVMOSSingle-coreMulti-core
MacBook Pro 2015(Bootcamp)Windows107313173
MacBook Air M2Parallels18Windows1116625560

macOS だと Intel Mac (Monteley) のスコアが 744/3294 のところ、M2 Air (Ventrura) が 1909/8923 程度。Windows だと Bootcamp (Win10) が 731/3173 で、Parallels 仮想環境 (Win11) が 1662/5560 という結果になりました (それぞれ single core/multi core の値)。macOS 同士の比較で 2.6/2.7 倍で Windows 同士だと 2.27/1.75倍と仮想環境はやや遅めとはいえど、2倍程度の速度の違いがあり、十分体感できる差になります。あれ、こんなもんかとは思いましたが。ただしバッテリーの持ちは抜群で、丸一日使ってもまだ余裕ある感じです。倍の性能で何倍電池持つんだよって感じで。macOS の方も、積極的に輝度下げたりとか低消費電力対策をしてるようには感じましたが。

体感

いままで古い Intel Mac で普段使いのソフトでは特に不満がなかったので、多少キビキビしててもその差ははっきり言って分かりにくいのですが、コンパイルなどでは流石にその差を体感できました。うぉー速いとまでは思わないけど、あ、速くなったって感じです。M5Stack のコンパイルは Arduino IDE でとても遅くてイライラしてたのが耐えられるぐらいの速度になりました。macOS ネイティブ環境しか比べていませんが。また、天文系の画処理ソフトはそこまで速くなった感は無いのですが。と思って、Windows で Autostakkert によるスタッキングの速度を比較したら、えーという結果が。。 Parallels の Edition 選択のところにその顛末を。

Parallels vs UTM

どうしようか迷ったが、とりあえず安定しているだろう Parallels にしとこう。

Parallels Standard Edition vs Pro Edition

てんこ盛りにしても CPU 数 8、メモリ最大 24GB とあまりリソースの多くない M2 Air に Standard だと CPU 4, メモリ 8GB までしか割り当てられなくて十分に感じられる。したがって多くの CPU やメモリを割り当てられる Pro にするメリットはない。ほんと?ということで、CPU の数を 4 と 6 動画撮影して PiPP で前処理した木星 2400フレームを Autostakkert! 3でスタックしてみた。
スタック時間が 84秒と 70秒。メモリ使用量も 1.4GB 程度なので 8GB もあればとりあえず十分。かな?使用した画像はだいぶトリムしてるので、ちょっと大き目な画像を処理したら 8GB では足りないかもしれない。そんなの滅多にないと思うので、Standard でいいかもしれないし、24GB ではなく、16GB で十分だったかもという気になってる。Standard Edition と Pro Edition の価格差は 1,000円ほど。macOS の更新が毎年あったとして、それに合わせて Parallels もアップデートした方が良いかもと考えると微妙だなぁ。この差。どうしよ。年に +1,000円して少しおまけな機能と OS のアップデートに合わせた更新をしていくのかとか。
結局。。一年間はプロにして様子見。ということにした。


4 core

6 core

ここで衝撃の事実。
実は今まで使ってた Intel Mac 爆速でした。


Stacking という項目をみるとわかるのですが、倍速です。えぇ、涙目です。なんで古い Intel Mac が勝つんだ〜と。

ちなみになんでこういう差になるかというと、真ん中の上の方に Thread という項目があるのですが、Intel Mac 8 なんですよね。それと比べて 4 コアだと 4, 6 コアだと 6 スレッドというようにコアの数しかスレッド流せないみたいです。M2。それとも OS がサポートしていないだけなのか。。Intel Mac は Core i7-4770HQ というプロセッサーで、4 コアなのですが、8スレッドあるので、スレッド数で優ってるんですね。M2 ネイティブなソフトならコア数で同じ数のスレッド走らせるとするとどうなるんだろう?というのは気になりますね。

VM

Windows 11

は DSP版でお安くした分、無駄に Pro にしておいた。
Windows11 は今までの MacBook Pro の Bootcamp で走る Windows 10 は残すので、別途 DSP版を購入したのだけど、アクティベーションに苦労した。DSP版だからというわけではなさそうなのだけど。多分。終わりよければ全てよし。アクティベーションを何度も試すときはVM捨てるので、インストールしたソフトはすべて空に。。

Ubuntu

Windows に WSL ではなく、Parallels に Ubuntu を導入。こちらのほうが素直ですよね。とりあえず iverilog + gtkwave が走る環境を準備。iverilog は apt で最新版を入れられたのだけど、fst フォーマットが扱えなかったので、ビルドからやりなおし。RISC-V チップの Verilog simulation の実行は結構速く、、いや今までの環境に比べると体感爆速。

M2 Air で出来たこと出来ていないこと

(2023/2/5 時点)
天文関係のソフトと組み込み系のソフトを試しています。Win11 は Parallels18 上で走らせています。Parallels には Ubuntu も入れています。

動かせたもの一覧。

天文関係

macOS

  • Firecapture 2.7.10 + ASI462MC
  • ASIStudio v1.7 + ASI462MC
  • SynScan Pro v2.1.12 + AZ-GTi
Firecapture と ASIStudio はどちらもカメラを認識してカメラをオン、画像を表示できました。SynsScan Pro の Mac 版なんてあったんですね。撮影は Mac で、画処理は Windows でいけそうです。いままで Sharpcap だったんで、Firecapture 覚えないと。

Win11

  • PiPP  x64 v2.5.9
  • Autostakkert 3.1.4
  • RegiStax6 Version6.1.0.8
  • WinJUPOS 12.2.4
ファイルの Open, Save に関しては Mac と共有のフォルダではダメなケースがありましたが、処理自体は特に問題ない感じです。どのツールも速くなった感じはあるものの、もともとそれなりに時間がかかる処理なので、めっちゃ速くなったという感じはしませんでした。

組み込み系

macOS

  • Arduino IDE + M5Stack Basic, Gray, Stick, Stick+, Atom-Matrix,Atom-Lite,M5 Core2,M5Paper,CoreInk
Basic, Gray, Stick は認識させるのに苦労しました。M5Stack のサイトにあるドライバを入れたりなんなりごちゃごちゃしてたらいつの間にか認識するように。他は特になにもしなくてもあっさり認識しました。Arduino IDE のコンパイル時間は速くなりました。ちょっとは待たされるのですが個人的に許容範囲です。PlatformIO や VSCode の Arduino 環境ではまだ動作確認できていません。
  • MakeCode + micro:bit 
初代 micro:bit です。最初すぐに認識してくれなかったのですが、接続できて MakeCode からダウンロードボタンで書き込みができました。

Win11

  • Gowin V1.9.8.09 Education + TangNano4K, TangNano9K
この手のツールは全然ダメだろうと諦めていたのですが、ビットストリーム吐き出して、書き込みも OK でした。ただ表示が崩れていてシリアルの設定か何かは全く内容を確認することも設定することもできない感じです。また無印 TangNano に関しては認識してくれなかったので、書き込みテストできていません。

上手くできなかったもの ToDo

上記はうまく動いてそうな組み合わせ。動かなかった・または一部動いていないものは以下です。
  • SynScan Pro (望遠鏡の架台 AZ-GTi の制御)
    Windows からだとツールは立ち上がります。シリアル接続がうまくいかないです。なぜかこの環境だとシリアルデータに偶数パリティが追加されるようで、それが原因のようです。Mac 版があることがわかってそれが動作するのでいいのですが、他のソフトとの連帯はどうなんだろ。
  • SyarpCap
    起動はします。カメラ認識してくれないんですよ。ZWO で ARM 向けのドライバを用意してくれていないからだと思います。ただ、ZWO としてはなんかしてくれそうな雰囲気
  • Vivado 2015 (旧Xilinx の FPGA 向けツール)
    入れたけど起動せず。困ったことにアンインストールもできずに無駄なディスクを食ってます。OS 入れなおそうか。。新しいバージョンは動いているらしい事例ありです。
  • Tang Dynasty (TangPrimer 搭載 Anlogic の FPGA 向けツール)
    Win は Bitstream まで出せるが、ダウンロードできない, Ubuntu では起動しないが、シリアルは認識してるので、どっちもどっちな感じ。惜しい。Win 11 ARM 向けドライバ作ってー。もしくは Linux 版リビルドしてー。
  • Quatus (旧Altera の FPGA 向けツール)
    Win, Ubuntu ともにインストールすらままならず。Win 版 Quatus は WSL が必要らしいので、入れてみようと思ったけど WSL そのものが入らず。そもそも仮想マシンの仮想マシンってどうよという。しかも WSL で Ubuntu が走ったとしても ARM 系 Ubuntu だと結局だめじゃんとなりそう。

というわけで、なにか代替え手段があるかもしれませんが、上記はまだまだなツールです。ハードに依存しない Windows のソフトは結構動いている感じです。組み込み系も FTDI の USB シリアル系搭載デバイスであれば案外いける雰囲気があります。他にも ARM 版ドライバさえあれば、、という惜しいツールもあったりします。また Visual C++ 再配布可能なパッケージが必要なソフトウェアもあるので入れなければならないかもしれません。が、これはこの環境とはまた別でよくある話かも。他には XX.DLL がありませんのようなメッセージが出て起動できないツールがあるのですが、DLL のみを入手できるサイトから入手して適切なフォルダに置くと OK とかいう場合もあるそうです(自分では上手く行ったものは無いのですが)。
Ubuntu や Windows 上の WSL (インストールできてない)は、軒並み既存バイナリは動かなそうな雰囲気です。ARM アーキテクチャ向けに再ビルドが必要なのかなという感じ。

USB のドライバ

ちなみに Windows 向けの FTDI のドライバは ARM 版をインストールできます。.zip をダウンロードして C: ドライブに展開。デバイスマネージャーから黄色三角の出ている FTDI 系デバイスに対してドライバを展開したフォルダを指定してインストールすれば OK です。注意点はドライバーを Windows の C: ドライブのどこかに置くことです。Mac 側と共有されているダウンロードフォルダーに置かれていたりすると認識してくれません。
M5Stack は USBのドライバを 配布してます。

AE-F234X も使えてますよ〜。
TX と RX をワニでショートな荒技ループバック



Parallels での Windows で注意すること

あれおかしいと思ったらデータを保存、起動する場所を調べてみるといいかも。上記で書いた通り、Mac との共有フォルダに置いたファイルの読み書きは Windows のソフト次第でできたりできなかったりなので、基本 C: ドライブにおいた方が問題なさそうです。


とりあえず進捗あったら更新します。気が向いたら。



2021/12/04

Tang Primer (EG4S20) の ADC を使ってみる

はじめに

RISC-V に興味があって Tang Primer を買ったのが 2020年5月頃。ADC をいじろうとするも、やりかけてお蔵入りに。記憶あいまいだけどある程度のところまで進んでました。安価な Tang Primer の ADC も使えるようになれればいいなということで、とりあえず今回は実際に動かすところまでやってみました (2021年11月末)。
そういえば当初は家にある激安電子ドラムのカスタマイズに使おうと思ったんだっけ。なんもしてない。。

Tang Primer

Anlogic の EG4S20 を搭載した Sipeed の FPGA 開発ボードです。
国内だと、スイッチサイエンスさんや、Shigezoneさんで入手できます。

使い方は Tang Primer の上記 URL の Getting Started を見ていただければ。あとはググれば試されている方の情報見つかります。本もあるようですね。

EG4S20  の ADC


EG4S20 の ADC は 8-channel 12-bit 1MSPS ですが、詳細はデータシートをみてみます。
データシートは以下からダウンロードできます。
以下、Eagle_DataSheet_V2.8_english.pdf から抜粋しました。

電気的特性


ADCモジュールの端子機能


タイミングチャート


以上です。

VREF は Tang Primer では 3.3V 固定です。従って 0-3.3V が 0-4095 に対応します。またADC のクロックは最大 16MHz。16 cycle で変換終了するので、ちょうど 1MSPSになります。

動作は SOC に 1パルス与えると動作開始で、EOC 1パルスでれば終了です。チャネルの選択は SOC より前に選択して EOC が立つまで保持ということかな。アナログのマルチプレクサの切り替えになると思うので早めに切り替えておくに越したことはないと思います。

Sampling Pulse と書かれている部分は多分、Sample/Hold 回路が開いている時間だと思うのですが、ここの長さは制御できないようです。まぁ、中の回路はクロック同期なんでしょうから、例えばこの期間のクロックを伸ばせば多分時間延ばせるのではないかと思います。なのでちょっとしたクロックゲーティング回路を足せば実現できるのでは?でもEG4S20に CG (Clock Gating)セルなんてあるんでしょうかね。Latch と AND または OR で作れなくはないけどタイミング合うかな。。

ADC IP Core の生成

RTL を書く前に IP core を生成します。とはいっても ADC のモジュール EG_PHY_ADC の有効にしたいチャネルを入れたラッパーをインスタンスするだけのようです。手置きしても大丈夫っぽいですが、Generator を使います。EG_PHY_ADC はパラメータで各チャネルのEnable, Disable を切り替えるようです。

EG4S20 _DataSheet_V1.5_english.pdf の 4.1 Special IP use にごく簡単に生成方法が書かれています。有効にしたいチャネルを選択するぐらいです。途中 File (ファイル名)と Component name (module 名)を指定するところがあります。adc など何でもいいとは思いますが、同じ名前にしておいてもいいでしょう。好みですが。あと Add to project ウィンドウでプロジェクトに入れる?と確認するところはチェックを入れてOKしておけばプロジェクトに取り込まれます。ファイルはデフォルトでプロジェクトのフォルダの下の al_ip フォルダ以下に置かれます。

選択したチャネルのピンアサインは固定で、IO Constraint で与えることはできません。また選択したチャネルにアサインされたピンは、IO Constraint から他の機能にアサインできなくなります。TD (Tang Dynasty) の HDLBit Flow で Optimize RTL まで実行すると IO Constraint で選択できるピンから消えます。

Tang Primer の端子アサインについては、sipeed-tang-primer-pins.pdf で確認できます。

SPI + ADC の仕様

ADCの動作を確認するため、SPI client?(今どきはなんとよべば) I/F をくっつけてみます。SPI は CPOL=0, CPHA=0 のモード0 で。ビット幅は 16bit とします。お手軽に SS が下がったら ADC を起動して、5bit 目から ADC 12bit の結果を MISO(いやこのネーミングもどうすれば。。)に出力します。ADC の結果は符号なしなので、とりあえず最初の上位 4bit は 0 出力で埋めておきます。ちなみに ADC 終了の eoc は見てません。SPI のクロックが早すぎると間に合いません。


タイミングチャートは Google のスプレッドシートでw

クロックは Tang Primer のボードには 24MHz の Xtal が載ってます。これから 16MHz 以下の ADC clock を作ればいいので 1/2 分周して 12MHz のクロックを ADC に与えることにします。この条件で SPI は 2MHz 程度で動作します。

端子アサインは以下の通りにしました。
N11: ADC0 (ADC 入力)
K14: CLK_IN (24MHz Xtal)
C15: MISO
C16: MOSI (使いません)
B16: SCLK
B15: SS
K16: XRES_IN (Tang Primer の USER スイッチ。プルアップされてます)

Simulation

回路が出来たので検証します。ADC モジュールのビヘイビアがあるのでそれを利用します。
ビヘイビアは以下の場所にあります(Windows の場合)。

C:\Anlogic\TD4.6.4\sim

TD でテストベンチのトップとか、Model Sim 用の do ファイルとか作ってくれるのですが、自前でテストベンチ用意して、Icarus verilog (iverilog) で検証してみました。

ところで ADC モジュールのビヘイビア、eg_phy_adc.v の中身を見ると、Channel select signal s に与えた値を dout に出す仕様のようです。s のチェックにはなるのですが、SPI 含めてデータがちゃんと通るかどうかを見るために、テストベンチでは ADC の出力データを決めている sample_B を外からフォースしてシミュレーションしてみます。1bit だけ立てて SPI で読み込み、を 12bit 繰り返します。

GtkWave

うまくいってるようです。よしよし。

論理合成と書き込み

端子アサインは FPGA Flow の User Constraints -> IO Constraint から指定して、適当な名前で保存しておきます。



タイミング制約は FPGA Flow の User Constraints -> SDC Constraint で作成。途中経過出すと長くなるので、作成した制約の中身は以下のような感じ。create_clock だけやっときました。


合成は緑の丸に三角のボタンで。あっという間です。特にバイオレーションとかもないので、下矢印のアイコンをクリックして書き込みです。イレースして、Flash に書き込みます。

動かしてみる

合成結果を書き込んだ Tang Primer を実際に動かしてみます。
ADC の入力はパルジェネとか安定化電源持っていないので、M5Stack の DAC を使って生成しました。12bit の ADC に対して 8bit の DAC では役不足だし、正確な出力も作れず、校正された計測機器は持ち合わせていないので、ファンクション確認程度になります。
また Tang Primer に実装した ADC は SPI I/F を持っているのでもう一つ用意した M5Stack で SPI をポーリングで動かして ADC のデータを取り込んでみました。
DAC の出力は Faces に付けたエンコーダーパネルでグリグリすると変わるのがわかると思います。だいたい。。同じ値ということで。

 

今回お試ししたデータ

Git に上げておきます。


RTL 検証・合成環境


RTL

src, al_ip フォルダに入っています。
adc_top.v
トップレベル階層です。adc_core と spi がインスタンスされています。
spi.v
SPI I/F 部分です。
adc_core.v
EG_PHY_ADC をインスタンスしています。

テストベンチ

simulation フォルダに入っています。
tb_spi_test.v
テストベンチのトップです。adc_top.v をインスタンスしています。
run_spi.bat
テストベンチ実行用バッチファイルです。実行すると iverilog でシミュレーションを走らせて検証を行います。tb_spi_test.vcd が生成されますので、GtkWave などで波形を確認できます。

実行環境

Windows10 で実行しました。
TD 4.6.4 64-Bit
Verilog simulation iverilog 11.0 (devel)
VCD 波形表示 v3.3.100

M5Stack プログラミング環境


m5stack フォルダに入っています。
ADC_SPI_IF.ino
Tang Primer と SPI 接続する側です。ポーリングした結果をディスプレイに表示します。
SCLK(G5), MISO(G17), MOSI(G16), SS(G22)
MOSI は使っていません。
DAC_Controller.ino
Tang Primer の ADC の入力信号を DAC で作ります。Faces のエンコーダーパネルを使う前提のコードです。出力中のデータを画面に表示します。
DAC1(G26)

Arduino IDE 1.8.13 で確認しています (なぜかこちらは Mac で。Windows でもきっと問題ないです)。M5Stack ディレクトリに .ino ファイルを置いています。
SPI master (MOSI はいらない) と DAC がそれぞれひとつずつ使えればいいので、M5Stack シリーズならほぼなんでもいいと思います。多少書き換えは必要とは思いますが。エンコーダーパネルを使いましたが、ボタンで値の上下でもいいですね。

2021/09/12

MAK127 focuser ver.3 (電子工作編)

機械工作編に続いて電子工作編。

モータとコントローラの配線及びソフトウェアについて紹介します。

ここで用意するものは、

です。DCジャック付きケーブル以外は機械工作編で紹介したかと思います。

念の為、ステッピングモータはバイポーラ型、12Vのものを。

ステップ数は 200ステップ(1.8°)もあれば十分だと思います。

電源は12V。電流容量は1Aもあれば十分。大きい分にはかまいません。

ちなみにATOMICステッピングモータードライバーキットはM5Stackという中国の会社の製品。こちらのサイトから直接購入できます。日本にも発送してくれます。遅いけど安かったりするようです。日本での入手先は機械工作編みてください。あまり高くはないので、まず ATOMIC ステッピングモータードライバーキットを入手して、ソフトウェアの準備ができそうだったら電子工作や機械工作を進めてみるといいかもしれません。


電子工作を少しでもやったことがある方だと簡単な部類に入ると思います。


ハードウェア

工作はいたって簡単。

  1. モータのケーブル、DCジャック付きケーブルを適度な長さにカット
  2. ビニールの被覆を5mmぐらいカッター、ニッパーなどで剥く
    (ブルジョワな方はワイヤーストリッパーを買いましょう。とても楽です)
  3. 配線をATOMICステッピングモータードライバーキットにネジで繋ぐ
  4. ATOMICステッピングモータードライバーキットの設定をする

以上です。

出来上がりはこんな感じ
シンプルです。

ビニールの被覆を剥くのが苦手な方はいるかもしれませんが、たいていモータのケーブルなどは余計に長いので何度も練習するチャンスはあります。銅線を切らないよう注意してください。

3. のネジで配線を繋ぐところと調整だけ説明しましょう。

配線を繋ぐ

まずモータとDCジャックケーブルのそれぞれの配線が何を意味しているかを調べます。


バイポーラ型のステッピングモータには配線が4本ついています。とりあえずデータシート(仕様書)を探して、どの色がどのように繋がっているか調べます。

上記モータのリンク先、秋月電子にあるデータシートをみると、以下のような絵が見つかります。

コイル(くるくるした線)が二組あるのがわかります。それぞれの線の先に色と記号(ここではA,C,B,D)が書かれています。記号は各社まちまちで、A+, A-, B+, B- とかかれている場合もあるし、他の書き方もありますがここでは一旦無視します。ここで重要なのは、二組のコイルがあるのでとりあえずどっちでもいいので、A, B と名前をつけておきます。そして A, B のそれぞれの両端を+,-とどっちでもいいので決めておきます。

上記の例ではとりあえず左側を A、右側を Bとしておきます。黒を A+, 緑を A-, 赤を B+, 青を B- としましょう。

また、DCジャックですが、ACアダプターを繋ぐものです。大抵真ん中が+、外側が-です。AC アダプターに合わせてどちらが+か-かを調べておきます。秋月の説明をみるとテスターで自分で調べろ的なことが書いてあります。

これらがわかってしまえば、あとは ATOMIC ステッピングモータードライバーキットに付いているラベルの指示通りに配線を精密ドライバー(ねじ小さいです)でねじ止めすれば完了です。


電源はそうはいきませんが、モータは配線間違ってもこわれずに回らないか、反対に回る程度です。仮に反対に回ってしまってもツールの方から反転設定ができるので回らなかったら、配線を見直す程度でいいと思います。

注意点

被覆を剥きすぎて、隣同士がショートしないようにしてください。あとお好みですが、配線がちらばるのが嫌であれば、100均などでスパイラルチューブを購入してまとめるといいです。
あとねじ止めした部分ですが、切れやすいので引っ張って力を入れないように。

調整(と設定)

ディップスイッチ

ディップスイッチの設定をしておきます。
まずはキットの ATOM Lite(下側の四角の小さい箱、ESP32が入ってます) を上に引っ張って外し、モータコネクタ側のカバーを横から押しながら外します(爪を折らないように)。

外したところ

ディップスイッチは4つあります。左から1,2,3,4。下下下上(OFF, OFF, OFF, ON)です。左三つはマイクロステップの設定。右端はディケイの設定。詳しくは DRV8825 のデータシートを見てください。このモジュールの設定情報はこちら。Full step というモードにしてます。

ステップモードについて

ステッピングモータの軸を指で回してみるとわかるのですが、クリック感があってカチカチ止まる場所があります。このクリック感がある場所で止まるのが Full step モードです。モータのステップ数はFull step で止まる箇所の数になり、それが一周200だったり400だったりするわけです。マイクロステップはこれより細かいステップで動かすことができるのですが、そこまで細かくなくてもいいと思っているので、Full step の設定にしました。ディケイモードもとりあえずFastにしておきました。ソフト的には Full step 以外には Half step (1/2)〜1/32までのステップモードを選ぶことができます。そのカチカチの 1/2 の位置とかいうことです。DRV8825 はそういうモードを持っています。さらに細かく動かしたい場合はこれら設定を選ぶようにします。ただ、励磁を止める(電流を切る)と、中間的な位置にいたモータの軸は Full step の位置に移動してしまうので、電源を切るとズレてしまうので Full step の方がいいかもしれません。

myFP2ESP のファームではマイクロステップの設定をソフトウェアで変更できるようになっています(これらスイッチがESP32のGPIOに割り振られている)。ただしこのキットはソフトウェアでは変えられず、ディップスイッチで設定を変えることはできます。

電流設定

ATOMICステッピングモータードライバーキットは、モータを動かす電流の調整をすることができます。実際に動かそうとして動かないとか、動かしている時の消費電流を下げておきたい(バッテリー駆動の時に)とかいう場合に調整するといいです(ステッピングモーターのドライバーはモータの軸が止まっていてもずーっと電流を流し続けます)。また Full step 以外のマイクロステップモードにした時も電流をちゃんと設定しないと脱調(回らず滑る)する場合もあります。安全のためにわざと脱調しやすくしておくのもいいとは思います。

キットの基盤の上にプラスネジで回せる電流調整用ボリュームがあるので、これをドライバーで回しながら調整します。時計回りに回すと電流大、反時計回りで電流小です(ケースのラベルに説明ある)。脱調しない程度に左に回して電流絞ると消費電力は下がります。

あれ、回らないな?と思ったらここを調整してみてください。

ちなみにステッピングモータは流す電流次第で結構熱くなります。びっくりしないように。そういうもんです。ただ電流抑えればそれほどは熱くはなりません。

以上で電子工作のハード的な準備はおしまいです。

ソフトウェア

マイコン使った電子工作の経験がないと、ここが一番の難関だと思います。

M5Stack と ATOM Lite

今回使った ATOMIC ステッピングモータードライバーキットは、M5Stack 社の ESP32(WiFi, Bluetooth と接続できる機能を持ったマイコン) を使った製品で、他にも色々製品があります。
M5Stack Basic (製品名)は、ESP32 に、ディスプレイ、3つのボタンを付けた小型の機器で、これだけで大分遊べるのですが、ここからディスプレイをLEDに、ボタンは1つに省略し、更に小型に価格も安く抑えたのが ATOM Lite という製品で、その拡張製品が ATOMIC ステッピングモータードライバーキット (ATOM Lite + DRV8825) になります。

入手は、秋葉原だと千石電商マルツ秋月などで購入が可能です。
オンラインでは取り扱いが一番大きいのはスイッチサイエンスだろうと思います。

ネットで情報も色々ありますし、本も出てたりするので電子工作(組み込み)初めてみようという方には丁度いいガジェットだと思います。プログラミング環境もC、Python、UIFlow など様々な環境が用意されていますので、プログラミングの勉強にもいいと思います。

開発環境

開発環境を整える必要があります。多分ここが一番ヤマ。

開発環境として利用できるのは、Windows と Macと Linux。私は Mac 時々 Windows な感じです。Arduino と呼ばれる元々は Arduino のために開発された環境に、M5Stack の開発環境を追加することになります。

さて、どうしたものか。。。
公式のインストール手順はコチラになります。英語ですが。
今回使う ATOMIC ステッピングモータードライバーキットは ATOM Lite を使っているので、

For Atom Matrix/Atom Lite

の部分に書かれているライブラリのインストールをしてください。

英語よくわからん。という人は、上記リンクを Google の翻訳窓に貼り付けて、日本語にしてしまいましょう。日本語のリンク先をクリックすれば日本語になります。

また、M5Stack Arduino 開発環境 などのキーワードでググれば色々情報出てきますのでそちらを参考にお願いします。

うまくインストールできたかどうかは、M5Atom のスケッチ例 LEDSet を試してみるといいと思います。ATOM Lite のボタンを押すと LED の色が変わります。


myFP2ESP(クイックハックの紹介)


ソフトウェアのラスボスです(笑)

可能であれば本家に取り入れてもらってそれを公開するのが良いとは思いますが、それが可能なのかも分かりませんし、その準備もしていないのでクイックハックの方法を最初に公開します。なので、本家にとりいられることがあったり、誰かが ATOMIC ステッパーモーターキットに対応するよう修正されたものを公開したらそちらに切り替えると思います。

myFP2ESPとは

とにかく作者の Robert Brown さんには大感謝!!!
やりたいことがすぐできました。

本家のサイトから、

A DIY remote ASCOM focuser based on ESP32/ESP8266 WiFi (based on myFocuserPro2). DRV8825, ULN2003, L298N, L293DMINI , L9110S, TMC2225, TMC2209, ESP8266 L293D Motor Shield. Support for Webserver, Bluetooth, LocalSerial and ASCOM REMOTE ALPACA, mDNS as well as TCP/IP.

です。DIY 向けの ESP32 か ESP8266(ESP32と似たようなマイコン)+様々なモータドライバに対応した ASCOM フォーカサーです。コントロールや接続方法も色々用意されてます。

ESP32 と DRV8825 に対応してますよね?なので、ATOMIC ステッピングモータードライバーキットには最小限の手順で移植できると推測されます。


本家のサイトにあるダウンロードから、PDF のドキュメントがダウンロードできるのですが、とても詳細に書かれていますので興味があれば読んでみるといいです。あと、このサイトの Files のタブの下の、Documentation の下に、Focuser Basics.pdf が置いてあるのでこれは英語ですが読んだ方がいいと思います。ステッピングモーターの1ステップで移動する距離が妥当かどうかを判断するのに。転記していいかどうかわからないので書きませんが。

ちなみにライセンスについては独自のライセンスのようで、改変、公開は構わないけど、オリジナルのファイルを全部つけること、ライセンスの明記、無償公開が条件のようです。詳しくは上記 PDF を読んでください。

ちなみにドキュメント類は必要な(興味ある)ところだけつまみ食いしただけなので、理解してないところも多々あります。

クイックハック(という名の移植)

ようやく本命です!
ここでは最小限の手順で移植する方法を紹介します。

もう少しちゃんとやる方法を確認しましたので、近々修正します。
ただ少々修正部分増えます(2021/9/13)。

変更内容 

  • 色々あるボードの組み合わせから ESP32 + DRV8825 対応を選ぶ
  • モータのモードなどを設定する
  • 接続方法を選ぶ WiFi
  • 接続の設定を選ぶ SSID など
  • GPIOの接続を修正する(ターゲットとしているボードと配線が違うので)
    Enable, STEP, DIR 端子が割り当てられれば良い。
ぐらいです。
最後の GPIO の設定は JSON ファイルを修正すれば良いみたいなのですが、取り急ぎ変更を公開したかったのでクイックハック版です。あとで JSON を修正する方法に変更します。

接続方法について(シリアルについては最後に追記)

接続する方法はいくつかあるのですが、ベランダで観測する人なので、家庭内の無線LANに ATOMIC ステッピングモータードライバーキットを接続し、同じネットワークに接続した PC から操作する方法をとっていますのでそれを紹介します。この他 PC から無線でダイレクトに繋ぐ、シリアルで繋ぐなどいくつかの手段がありますが、えー、と思ったみなさん、ドキュメントを読んでお試しください。シリアルはうまくいきました。最後の方に書いてます。
えーと、実はうちのベランダ、Wi-Fi つながりにくいので、ずっとシリアルで接続していましたが、先日 Windows10 をクリーンインストールして、myFP2ESP アプリを最新版に入れなおしたらシリアルのサポートがなくなっていました (1.0.0.21 より) 。過去のバージョンは公開していないようなのであきらめて PC に Windows10 のモバイルホットスポット機能でアクセスポイントを立ち上げて、そこにぶら下げるようにしました。望遠鏡の近所に置いている PC で立てたアクセスポイントなら電波強いので接続が落ちるようなことがないといいなと。ちなみにモバイルホットの画面にぶら下げた ESP32 の IP アドレスが出るので、myFP2ESP で接続するときはこの IP アドレスを使います。
ちなみに Windows マシン自身が有線/無線 LAN などでネットワークにつながっている必要があります。


モバイルホットスポット

ソースコードの入手

GitHub というネットワーク上でソースコードが管理されてますので、ここからダウンロードします。https://github.com/brownrb/myFP2ESPFirmware/releases

Source code (.zip) というリンクがあるので、クリックするとデータ一式がダウンロードできます。これを書いている時点で試したのは Release 230-1 です。

ライブラリーのインストール

ダウンロードした Source code (.zip) には myFP2ESP をコンパイルするために必要なライブラリが含まれています。展開すると以下の部分。


ここにある .zip ファイルを Arduino の開発環境にインストールする必要があります。
Arduino のスケッチ→ライブラリーをインクルード→. ZIP形式のライブラリをインクルードからこれら .zip ファイルを選んでインストールします。

ここでインストールができているかコンパイルして確かめてみます。
myFP2ESP のソースを Arduino 環境で立ち上げてみます。Arduino 環境がインストールできていれば以下の myFP2ESP.ino ファイルをダブルクリックすれば Arduino が起動します。


立ち上がったら、ボードを選択します。


ATOM ステッピングモータードライバーキット(ATOM Lite)が PC に接続されていたら、ついでにシリアルの設定もしておきます。これは上記でお試しした時に設定されているかもしれませんが。


ではコンパイルしてみます。左上の✅ボタンをクリックします。
この時点では ATOM Lite にプログラムは書き込まれません。設定がめちゃめちゃなので、まだ書き込まない方がいいです。

特に問題がなければこんなメッセージが出て終わります。エラーが出た場合はメッセージ(ログ)をみて対処してください。だいたい最初の方のエラーを潰す(多分ライブラリの不足なのでインストールする)とエラーは解消されると思います。そうじゃなかったらゴメンなさい。


ここまでがヤマでした。あと一息です!

ファイルの修正

修正する箇所が多いとイヤになるし間違いますよね?最小でいきましょう!
細かいところは目を瞑って。

修正するファイルは3つです。

まずは簡単なところから。

generalDefinitions.h
以下の行の #define の前にある // コメントアウト(行のそれ以降を無効)を消します。
 #define SETUP_DEBUG       1
これだけです。あとで確認する ATOMIC ステッピングモータードライバーキットに割り当てられた IP アドレスを確認するためです。保存しましょう。

focuserconfig.h
3箇所あります。

まずは ESP32+DRV8825 を有効にします。DRV8825 の行の先頭の // を消して、ULN2003 の行の先頭に // をつけます。
 #define DRVBRD 	PRO2ESP32DRV8825
//#define DRVBRD 	PRO2ESP32ULN2003
続いてモータの設定。一周するのに何ステップかかるかを書いておくようです。私の場合は、60 / 20 x 200step = 600step です。有効になっている 2048 の行頭に // を入れて、新たに 600 の行を付け加えます。
 #define STEPSPERREVOLUTION 		600
//#define STEPSPERREVOLUTION 		2048           // 28BYJ-48 stepper motor unipolar with ULN2003 board
続いて接続方法を選択します。私は無線LANにぶら下げたいので、ACCESSPOINT の先頭に // を入れて、STATIONMODE の先頭の // を消します。ここでは LOCALSERIAL と BLUETOOTHMODE が選べるようですが、STATIONMODE 以外試していません。
// to work as an access point, define accesspoint - cannot use DUCKDNS
//#define CONTROLLERMODE  ACCESSPOINT

// to work as a station accessing a AP, define stationmode
#define CONTROLLERMODE  STATIONMODE
このファイルは以上です。保存しましょう。

myFP2ESP.ino
最後です。2箇所あります。

まずは無線LANのアクセスポイントの設定です。SSIDとパスワードを設定します。your_ssid と your_ssid_password の文字をあなたの環境に合わせて書き換えます。
 char mySSID[64]     = "your_ssid";
char myPASSWORD[64] = "your_ssid_password";
最後です!DRV8825の接続に合わせて GPIO の設定を行います。実はここが無理矢理書き換えているところで、本来は .jsn ファイルで該当する設定を書き換えればいいだけです。あとでここらへん訂正します。

さて、cachepresets() と #if defined(TIMESETUP)の間に新しい行を複数加えます。mySetupData から digitalWrite までですね。Enable ピンを GPIO22、STEP ピンを GPIO22、DIR ピンを GPIO23 に割り当てているだけです。このアサインについては ATOMIC ステッピングモータードライバーキットに貼られているシールに書かれています。
   cachepresets();
  
  mySetupData->set_brdenablepin(22);
  mySetupData->set_brdsteppin(19);
  mySetupData->set_brddirpin(23);
  pinMode(mySetupData->get_brdenablepin(), OUTPUT);
  pinMode(mySetupData->get_brddirpin(), OUTPUT);
  pinMode(mySetupData->get_brdsteppin(), OUTPUT);
  digitalWrite(mySetupData->get_brdenablepin(), 1);
  digitalWrite(mySetupData->get_brdsteppin(), 0);
  
#if defined(TIMESETUP)
  Setup_DebugPrint("setup(): ");
  Setup_DebugPrintln(millis());
#endif
お疲れ様でした!保存すれば修正は以上となります。
あとはキットを繋いで、→ボタンを押すとコンパイルして書き込みです。


うまくいくと100%の後に、Board resetting via RTS pin.. が出れば成功!だと思います。さて動作確認といきたいところですが、その前にキットにアサインされた IP アドレスを確認します。キットは接続したままで、Arduino のシリアルモニタを立ち上げて、右下の速度が115200bpsになっていることを確認します。以下シリアルモニタを立ち上げるところ。



なにか表示されているかもしれないので、出力をクリアしておきます。その後、ATOM Lite の左側横にあるボタン(リセットボタン)を押して離してみてください。
画面になにか出てくるはずです。無線LANに接続できると IPアドレスが以下のように表示されるはずです。このアドレスをメモっておきましょう。あとで使います。


これが現れないということは、SSID, Passowrd の間違いか、接続方法の指定が間違っているか、無線LANの設定の問題、そもそもデバッグしている場所から無線LANが離れているなどが考えられます。一つずつ確認してみてください。

ちなみにプログラムを書き込むときはモータの電源は不要です。PC に繋いだケーブルから電源が供給されますので。両方いれても問題はないです。

アプリとドライバのインストール

Windows 環境で試しました。
から、アプリとドライバをダウンロード、インストールします。

Windows Application と ASCOM Drivers の下にあるツールをインストールします。

ASCOM driver はよくわからないのですが(ちゃんと調べてない)、myFP2ESPASCOMv208.exe の方をインストールしました。

ここは説明端折ります。

動作確認と設定

待ちに待った動作確認です。
ASCOM ステッピングモータードライバーキットは PC から外してかまいません。電源 12V だけ入れて無線LANに接続された状態にしてください。

myFP2ESP アプリを起動してください。


こんな画面が出てくると思います。
Interface を TCP/IP にして、TCP/IP の IP を先ほどメモした IP アドレスに変更してください(多分当面は同じ IP を割り当ててくれると。。思いたい。違ったらまた同様に確認です)。それから Connect ボタンを押すと、接続を開始します。


上記画面はとりあえず無視。OKでいいです。
成功すると以下の画面に遷移します。


これが立ち上がったらほぼほぼ成功です!MAK127に繋ぐまえなら好きに動かせばいいのですが、すでに接続している場合は必ず動かす前にフォーカスノブの軸の中のネジの位置を確認してください。
あまり端にいると少し動かしただけで端に到達するのですが、モータが回せる力の限り移動させようとします。電流をうまいこと制限すれば少しでも余計な力がかかると脱調状態にできたりするので、安全にはなりますが。

では動かしてみましょう。

数値はステップ数です。既に値がアサインされているボタン、-500, -100, -10... をクリックするとそのステップ数回転します。動いている最中に止めたければ HALT ボタンをクリックしてください。左側の数値(Forcus position)、上記では 5600 が現在の位置(ステップ数)。0がホーム(だったと思います)。Max steps はその名の通り最大で、自分の環境に合わせて書き換えてください。私の場合、21mm / 1.25um = 16800 ステップです。右側のウィンドウに値を入力して、Set ボタンを押せば書き換えられます。

自分の好きな位置に動かしたい場合は、Focus position の値を書き換えて GOTO すると、相対的に移動します。例えば 5600 の時に 5000 と書き換えて GOTO すると今の位置を 5600 として、-600 ステップ回転します。

MAK127 のフォーカスノブとの関係を合わせたければ、例えば 0 の位置に移動して、Focus position 0 に Set position すればいいと思います。


あとは、IN, OUT の関係が逆だったら、配線を入れ替えてもいいのですが、Motor settings の Reverse Direction にチェックを入れて、Set すると +/- の挙動が反転します。

Preset には複数の設定を保存できるので、アイピースごとだったり、バローレンズの組み合わせだったり、有効に使えるかと思います。まだいじってないけど。えーと、そこらへんはみなさんの方が詳しそうですね。

ASCOM ドライバーもインストールしていれば、他の ASCOM focuser 対応のアプリからも Step の変更が可能になります。FireCapture で動作確認してみました。

とりあえず以上です。

myFP2ESP のその他の機能

myFP2ESP には他にも機能があって、まだチェックや移植をしていない部分があります。

Temperature 

温度補償です。鏡筒の温度に合わせてピントを変えます(でいいんですよね?)。DS18B20をサポートしてて、これは ATOM Lite に手間なく実装できそうです。

OLED

OLED ディスプレイ。M5Stack なら移植する価値はあるとは思いますが、ATOM Lite ベースのキットで LED(多色)一つしかないので工夫が必要。少なくとも文字は出せません。

プッシュボタン

ステッパーの IN/OUT を手動で行えます。これは実装できると思います。ATOM Lite で使える色々なユニットというのがあって、プッシュボタンもあったと思います。

リモコン

なんと IR のリモコンにも対応。これもユニットがあるので実装できると思います。

ジョイスティック

ジョイスティックも対応です。これもユニットあるので実装できると思います。


 IN/OUT LED

モータが動いている時にどちらの方向か LED で表示する。
LED 内蔵なので移植可能。

ホームポジションスイッチ

これも実装可能ですね。

ちなみに ATOM Lite には Grove と呼ばれる端子があって、5V, GND, GPIOが二つ出ています(一つアナログ)。これを使えば上記を実装できます。ただし複数の機能を一緒に入れることは難しいと思います。

移植の本家へのフィードバックについて

気が向いたらリクエストしてみようかな。

ちょい変

LEDをつけてみます。

FocuserSetupData.h を include している後で M5Atom.h インクルードします。
#include "FocuserSetupData.h"

#include "M5Atom.h"
M5Atom の初期化コードを入れます。M5.begin()。void setup() の先頭で、Serial.begin() の前。
  void setup()
{
  M5.begin(false, false, true);
  Serial.begin(115200);
最後に以下のコードを myFP2ESP.ino の最後の方に挿入します。#endif の次の行から、} // end Loop() の行の前まで。ボタンのチェックと、LEDの点灯です。M5Atom のライブラリを使ってこれらを簡単に使うことができます。
#if defined(TIMELOOP)
  Setup_DebugPrint("loop(): ");
  Setup_DebugPrintln(millis());
#endif
  if (M5.Btn.wasPressed())
  {
    if (digitalRead(mySetupData->get_brdenablepin()))
    {
      digitalWrite(mySetupData->get_brdenablepin(), 0);
    }
    else
    {
      digitalWrite(mySetupData->get_brdenablepin(), 1);
    }
  }
  if (digitalRead(mySetupData->get_brdenablepin()))
  {
    M5.dis.drawpix(0, 0xf00000);
  }
  else
  {
    M5.dis.drawpix(0, 0x00f000);
  }

  M5.update();
} // end Loop()
上記修正をすると、起動するとLEDが緑に光り、モータが動き始めると赤色に変化します。LEDのところがボタンになってるのですが、それを押すと励磁、非励磁状態をトグルします。つまりモータに電流が流れたり切れたり。流れているとモータの軸は指で回すのが大変なほどに固定されます。切れると指で回せるようになります。

もっといじってみたいなーと思ったら、以下のサイトを紹介しておきます。
https://lang-ship.com/blog/
色々な機能試されています。もともとM5StickC中心でしたが、他も色々触ってますし、情報も書かれています。

これで本当におしまい。
お試しする方々、うまくいくといいですね!

追記(シリアルモードについて)

ノーサポートになったので、なかったことに。

まだ安定して動作できてません。複数の M5ATOM Liteを持っているので他ので試したらうまくいったり、いかなかったり。原因調査中。とりあえず成功したことのある手順書いておきます。

2021/9/25時点で、ダメなケースがなんとなく。
ATOM Lite を PC に刺したとき、デバイスマネージャーで、USB Serial Port のプロパティを見た時に、詳細でハードウェアIDが二つ見えるデバイスはダメっぽいです。一つしか見えないのは問題なさそうに見えます。ちなみにデバイスドライバを入れ直してもこの関係は変わらずでした。ATOM Lite 単品だとそんなに高くはないので買い足して試してみる手もあるとは思いますが、手持ちのM5ATOMシリーズでの勝率は2/6でした。


一応以下に手順を書いておきます。

シリアルモードにするには(WiFiと共存できません)、focuserconfig.h と myFP2ESP.ino を以下のように書き換える必要があります。

focuserconfig.h

myFP2ESP.ino


focuserconfig.h は CONTROLLERMODE を LOCALSERIAL にします。あと、MANAGEMENT を消します。// でコメントアウトします。

myFP2ESP.ino は、setup() 冒頭の Serial.begin() を消します。// でコメントアウトします。

generalDefinitions.h

SETUP_DEBUG もコメントアウトしておく必要あるかも。

アプリからの接続は、Interface で Serial を選択。ケーブルを接続しておいて、Port で接続している COMx を選択します。見つからないときは Refresh ボタンを押してみてください。あと Speed は 57600bps です。





質問は Twitter の方まで。@ttrsato