2021年7月27日火曜日

地デジ アンテナ作成

テレビは動画サイト専用であり、それで満足していたのだがオリンピックを観たくなってしまった。WiFi接続しているので電源しか繋いでいない。さらに、アンテナ配線は近くにない。

室内アンテナを注文したが、届くまでの間に室内アンテナを作成してみようかと。タモリ倶楽部で地デジアンテナを作ろうという企画がありなかなか難しいものだと思っていた。

同軸ケーブルを15cm剥き、左右に分割してハンガーに固定。これだけなのだが、がっちり電波を受信している。室内アンテナは不要だったな。


 リビング用にもこのアンテナを設置しようと思う。

2021年7月25日日曜日

MF70 ダイヤルゲージホルダとダストカバー

 ダイヤルゲージのホルダとダストカバーを作成した。

ゲージホルダ 

PCBでレベルが出ていないと線幅が変ってきたり穴が貫通しなかったりで、ダイヤルゲージでレベル出しすることにした。
それでホルダを作成。ベアリングのボスとゲージのハンドルを友締めするように設計した。
便利なのだが、GRBLの制御ソフトで面レベル補正できるみたいでその内に不要になるかも。



 ダストカバー

ダストカバーも作成。 テーブルのスロットにはまるように左右の側壁を設計して、前後は左右のミゾにはめるだけの簡単なもの。これだけでも飛び散らないので便利。標準は210x30だが、高さ50mm品や幅100mm品も用意した。
側壁は端で止まるようにしたが、中までスライド出来るようにしたほうが便利かもしれない。


 

Ultimaker Cura 4.10.0

 Curaのバージョンが4になってからサポートが気合い入ってるようになったな。

いままでは面形状に沿って積み重ねただけだったのに、外側から支えるようになった。文字通りサポーターという感じ。

剥しやすくなったしすばらしい。

 



 


 


 

2021年7月4日日曜日

GRBL原点リミットSWのノイズ対策

GRBLにてCNC化したProxxon MF70に原点復帰用のリミットSWを取り付けました。SW配線をステップモータの動力線から離しておくと大丈夫なのですが、一緒に束ねてしまうとSW配線にノイズが入り、SWがONしたと誤認識してしまい軸が停止してしまいます。



配線がごちゃごちゃだったのでスパイラルチューブで動力線とSW線をまとめたところ、軸を動かした瞬間に軸停止してしまいます。

ノイズ対策は本家GRBLページに記載されています。

 

まずは100nFのコンデンサを付けてみました。

対策無し
何も対策無しでは、P-Pで1.15V位のノイズが入っていましたが、100nFのコンデンサを取り付けたところ250mVまで低下しました。

100nF付き

ノイズの電圧変動は低下しましたが、これでも誤動作してしまいます。次にフォトカプラを使用して実験してみました。写真はありませんがこちらは問題なく動作しました。

 そこでSWインターフェース基板を作成することにしました。

回路図
配線

切削
ハンダ付け 

CNC Sheildに接続

フォトカプラには手持ちのTLP627を使用していますが、何でも良いと思います。原点SW以外にも、Resume, Hold, Abort/Reset, E-STOP用のI/Fを用意しています。これらのスイッチは重要ですので原点SW同様ノイズ対策はしっかりしておきたいところです。

動作試験

3軸分の動力線と原点SW配線を束ねていますが、問題無く動作するようになりました。ちなみに原点SWの配線は単線ですが問題無く動作しています。今度シールド線に交換する予定です。

 

 

プロクソンMF70で原点復帰出来るようにする

 MF70に原点復帰用のスイッチを取り付けました。

MF70にはCNCキットのアルミブラケットが付いていますので、そのブラケットのベース部分を3Dプリンタで作成し、リレーを追加しました。

取り付け穴と支柱(送りねじの中心線)がXYZで全部違うのでちょっと面倒ですが、参考にできるものがあるので採寸するだけです。Y軸はY-側も作成しましたが、M3x20mmの自己タップねじが無いため後で取り付けする予定です。取り敢えずは移動距離制限を設定しておこうかと思います。

Z軸

X軸


 取り付けました。

Z軸
Z軸です。機械端より10mm程の位置に原点が来てしまいました。もう5mmほどオフセットしても良いかなと思ってますが、実用では問題ないので今度かな。


Y軸
Y軸手前側です。
 
X軸(下側から)
X軸は干渉するものが多く大変でした。テーブル端の三角形のプラスチック、テーブル固定ねじをかわす必要があり、作っては干渉を確認の繰り返しで結局4回作り直しました。


肉盛りしたり削ったりでぐちゃぐちゃです。

後でモータのマウントは全て3Dプリンタで作成する予定なので、その時にモデルデータをアップロードしようと思います。


リミットスイッチはNO(Normal open、通常OFF)を使用して配線してGRBLのPin 9,10, 12に接続します。CNC Shield V3はZ+、ーがPin12に接続されていません。(11に接続されている)。GRBL V1.1ではSpindle Enableに接続する必要がありますので注意してください。(Spindle EnableはZ+,-となります。)


接続したら各スイッチが機能するか確認します。軸をJOGで移動中に何れかのスイッチがONになると軸が停止します。軸が停止することを確認してください。

リミットスイッチにより軸が停止した場合は、GRBLのReset/Abort(Pin A0)をONにしてリセット、その後制御ソフト側でアラームクリアする必要があります。bCNCはアラーム表示になりますが、Candleではアラーム表示にならず、でも軸は移動しないで混乱します。


確認ができたので、コマンド $H を送信すると原点復帰がはじまります。Z軸が動作し、その後XとYが動作します。

原点復帰動作は$25の速度でリミットスイッチを探し、リミットスイッチを踏むとOFFするまで戻り、$24の速度で再びリミットスイッチを踏むまで送ります。これで高速かつ精密に原点が設定されます。原点が決定した後は$27の距離だけ戻ります。

$24=25.000     Homing feed, mm/min
$25=500.000     Homing seek, mm/min
$27=1.000     Homing pull-off, mm




次はリミットスイッチのノイズ処理を行います。(重要)



2021年7月3日土曜日

bCNC用手動パルスハンドル(手パハンドル)の作成

 手動ハンドパルスジェネレータを作る

 プロクソンMF70をCNC化しましたが、加工原点出しで手動ハンドルパルスジェネレータ(以下、手パとします)があると便利だよなという印象です。

手パが欲しい
Candleの画面
CandleではX, Y, Zのボタンをマウスでクリックすることで、手動で軸を移動することができます。このマウスというのがとてもやっかいで、軸を変更する場合や方向を変更する場合ワークから目を離す必要が出てきます。また、マウスも移動してしまうと移動が止ったり、前に移動させた軸のボタン上にあるか、移動の度に確認が必要です。また、1パルスでの移動距離の設定切替はプルダウンメニューであり、画面の確認が必要です。PCとフライスの位置関係によってはとても不便です。


 bCNCの導入

bCNCはキーボードショートカットでJOG動作が可能とのこと。下記が抜粋となります。
 

Keys

<Right> pan +X
<Left> pan -X
<Up> pan +Y
<Down> pan -Y
<PgUp> pan +Z
<PgDn> pan -Z
<Comma> rotate -A
<Period> rotate +A
<+> or <=> Increase step by one unit (=current decade)
<-> or <_> Decrease step by one unit (=current decade)
<1> Set as step the step1 (default 0.1) value from the configuration
<2> Set as step the step2 (default 1) value from the configuration
<3> Set as step the step3 (default 10) value from the configuration
<*> Multiply step by x10
</> Divide step by /10

 各軸にキーがアサインされており、ステップ距離もキーボードで変更可能です。すばらしい。さっそくインストールしました。

 

手パを作る

 キーで操作できるのであれば、ArduinoやSTM32でHIDキーボードを作成してしまえば手パ専用ハードを実現できます。

作成した手パ(後にボタンの色を変更しました)
で作りました。以下作成の記録です。

必要なもの

必要なものは以下のとおりです。
STM32F401
OLEDモジュール(I2C)
ロータリーエンコーダ
タクトスイッチ
PCBと配線材

STM32F401

STM32F401はAliexpressで購入した開発ボードタイプのものを使用しています。401にしたのは、USB-Cを使用したかったためだけです。コネクタ形状にこだわりがなければ、安いSTM32F103でも問題ありません。


回路図

回路図です。OLEDはI2Cの1に接続(PB8, 9)、エンコーダはTIM4(PB6, 7)に接続しています。

プログラム

STM32CubeMXでテンプレ作成、Atollic TrueSTUDIOにてコード作成しています。

STM32CubeMXの設定

ピン設定

ピンアサインと設定です。ボタン用とエンコーダ用IOはPULL_UPしておきます
 

TIM4設定

エンコーダモードにします。PB6,7はPULL_UPしておきます。

I2C-1

OLED用のI2Cは、I2Cを選択し、Fast modeにします。

USB-HID

MiddlewareよりUSB_DEVICEを選択し、HIDを選択します。

クロック

 

クロック設定はデフォルトにしています。速度が必要であれば変更してください。


以上でSTM32CubeMXでの設定は完了です。プロジェクトマネージャページで保存ディレクトリと開発環境を選択してコードを出力してください。


コーディング

ソースはGitHubにアップロートしています

STM32CubeMXのテンプレートではキーボード用に変更する必要があります。こちらを参照してください。

テンプレート部分を修正していますので、STM32CubeMXよりコードを生成すると下記修正は全て消えてしまうことに注意してください。

HID_EPIN_SIZEを5に、HID_MOUSE_REPORT_DESC_SIZEを78に。

HID_MOUSE_ReportDescをキーボード向けに書き換えます。
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{
// 78 bytes
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // Report ID (1)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x19, 0xE0, // Usage Minimum (0xE0)
0x29, 0xE7, // Usage Maximum (0xE7)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x03, // Report Count (3)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x64, // Logical Maximum (100)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0x00, // Usage Minimum (0x00)
0x29, 0x65, // Usage Maximum (0x65)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0x05, 0x0C, // Usage Page (Consumer)
0x09, 0x01, // Usage (Consumer Control)
0xA1, 0x01, // Collection (Application)
0x85, 0x02, // Report ID (2)
0x05, 0x0C, // Usage Page (Consumer)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x09, 0xB5, // Usage (Scan Next Track)
0x09, 0xB6, // Usage (Scan Previous Track)
0x09, 0xB7, // Usage (Stop)
0x09, 0xB8, // Usage (Eject)
0x09, 0xCD, // Usage (Play/Pause)
0x09, 0xE2, // Usage (Mute)
0x09, 0xE9, // Usage (Volume Increment)
0x09, 0xEA, // Usage (Volume Decrement)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
};


動作