最終更新日:2021年3月2日
Arduinoからパルスモータに対してパルスを送る仕組みを検討しました。
パターン化されたパルス列を指定したインターバルで送る事を検討しています。
XYZ3軸で、パルス幅は10usec、インターバルは最小100usec程度 最大で数msecの可変としたいと思っています。パタン列は10KByteぐらいを検討しています。この時点でUNOのメモリに載りません。
インターバルを可変する情報は約4秒間隔が基本で、この時間をリスト化してSDカードに納めます。パタン列のファイルおよびインターバル情報のファイル計2つを読み込んで、これを処理しながらパルス出力をします。
- ファイルを読込ながらパルス列を出力する仕組みは確認出来ています。
- パルス列はインターバル情報を読み込み、これをパタン数で割って等間隔出力をタイマ割り込みで出力するのですが、この部分で問題があります。
パタン列10KBなんてメモリに載りません。だとすると、逐次パーシャルリードして実行する必要があるのですが、どの程度のバッファが確保できるのか確認する必要があります。- SDカードの読み出し速度については確認する必要があります。
SDカードはSPIバス通信で実行されます。クロックは4MHzのようです。源クロック16MHzから基本分周で4MHzとなるようです。
単純に8bit1Byteで計算すると500KB/sが可能と云うことになります。
Exampleスケッチをレタッチして読み書き速度を求めることは可能なのですが、WindowsOS同様、基本的にセクタ単位のアクセスになるのかと思います。FAT32のセクタサイズは512Bだと思われるため、このサイズのバッファを確保しないと読み書きがうまく出来ないのでは無いかという懸念があります。
データログの書き出し等では重要になりそうです。
ArduinoPin 意味合い CATALEXMicro-SD-Card-ModulePin(J2) GND グランド GND 5V 電源 5V供給し、内部で3.3V VCC D12(固定) データ入力 MISO D11(固定) データ出力 MOSI D13(固定) シリアルクロック SCK D10(変更可) チップセレクト CS テスト用のスケッチを書いて実行したのですが、ユーザメモリがギリギリの為か、繰り返し実行しているとクラッシュしてしまうことが判りました。ブロック毎に順々に読み込んでいるのですが、途中で、ファイルポインタが先頭になってしまいます。読込ブロックサイズを小さくして200Bとしたら、期待通りの繰り返し実行が可能になりました。実行途中で読込ブロックサイズが確保できず、リセットが掛かったのかと思っています。実行時にメモリの利用状況を確認するコードを挿して実行状況の確認は必要なのかと考える次第です。
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。