CATEGORY:電動ガン
2017年08月19日
自作FCUの動作検証、、、(uki)
結論から、、、ところどころ問題ありでした。
テスト時は大変上手くいっていたものの、今回の定例会へ持ちこんで使用したところ問題発生、、、
では、シリアルモニタと繋げて各センサーの検出やマイコン内の処理を見てみようじゃないかと。
■問題点の整理
1、セミ動作時に、トリガーを離した際にも入力検知してしまう事がある→原因:チャタリングが起こっている
2、セミ動作時に、2連射されてしまう→原因:カットオフ後にモーターが停止しているものの、満充電のバッテリーが元気良すぎて惰性で2発目を発射してしまいます。お寿司
■解決策
1、スケッチ(制御プログラム)の見直し
2、回路変更によるモーターブレーキの導入
ではでは、、
スケッチの見直しにあたり、こんな素敵な記事を見付けました。
「B2CS」Arduino用自作ライブラリプログラミングでチャタリング回避
スイッチ入力について、各動作の動きを分け、個別に検出できるというものです。
なるほど。ライブラリという概念もあるんですね。
ざっくりとこんな感じ。
stateについてもライブラリに組み込めるのかなあ、、?
もっと整えるべし!調べて勉強しましょう。
回路については、前回の記事の内容では実現不可!ということも解りました。
こちらのように、ハイサイド側は(一般的には)P型MOS-FETにする必要があるそうです。
ただ、P型の駆動も、これはこれで面倒なため調べていると、、、
IR2302というハーフブリッジドライバを見付けました。
ザックリとした構成は、
arduino~IR2302~N型MOS-FETを2つ~モーターへというように作れるため、モーター正転とショートブレーキの2つの動作が出来るようになるはずです。
P型が要らず、単一電源に出来るという所も良か塩梅。
~~~~~~~~~~~~~~~~~~~~~~~~~~
もう、始めからFCU買って、センサー部分だけP90用にはんだ付けした方が良いんじゃないか。
そういうような、天の声も聞こえてきそうですが、違うんです。
こういうのもサバゲーの面白い所なんです(白目)
つづく
自作FCUに関する記事一覧はこちらです
電動ガン P90 のための FCU 電子制御 電子トリガー ユニットを自作する
テスト時は大変上手くいっていたものの、今回の定例会へ持ちこんで使用したところ問題発生、、、
では、シリアルモニタと繋げて各センサーの検出やマイコン内の処理を見てみようじゃないかと。
■問題点の整理
1、セミ動作時に、トリガーを離した際にも入力検知してしまう事がある→原因:チャタリングが起こっている
2、セミ動作時に、2連射されてしまう→原因:カットオフ後にモーターが停止しているものの、満充電のバッテリーが元気良すぎて惰性で2発目を発射してしまいます。お寿司
■解決策
1、スケッチ(制御プログラム)の見直し
2、回路変更によるモーターブレーキの導入
ではでは、、
スケッチの見直しにあたり、こんな素敵な記事を見付けました。
「B2CS」Arduino用自作ライブラリプログラミングでチャタリング回避
スイッチ入力について、各動作の動きを分け、個別に検出できるというものです。
なるほど。ライブラリという概念もあるんですね。
ざっくりとこんな感じ。
stateについてもライブラリに組み込めるのかなあ、、?
もっと整えるべし!調べて勉強しましょう。
#include
B2CS jumbleat_sw;
const int GATE_PIN = 6; //G GATE(6) or LED(13)
const int S_pin = 10; //セレクター(チャタリングは許容する)
//初期値
int Smag = LOW;
int old_Smag = LOW;
int state = 0;
void setup() {
pinMode(GATE_PIN,OUTPUT);
pinMode(S_pin, INPUT);
jumbleat_sw.setSW(2, INPUT_PULLUP, LOW); //トリガー
jumbleat_sw.setSW(3, INPUT, HIGH); //カットオフ
jumbleat_sw.setPushShort(1); //トリガー入力判定しきい値(初期値value12)
jumbleat_sw.setPushLong(100); //長押し判定しきい値(初期値value2000)
jumbleat_sw.GO(); //タイマー割り込み(初期値5ms)
Serial.begin(38400);
}
void loop() {
byte T_pin = jumbleat_sw.read(2);
byte C_pin = jumbleat_sw.read(3);
Smag = digitalRead(S_pin);
//トリガーの閾値モニター用
if (jumbleat_sw.read(2) == SW_RELEASED)
{
Serial.println(jumbleat_sw.GetGauge());
}
//stateの設定
if(state < 0){
state = 0;
}
if(state == 0){
digitalWrite(GATE_PIN,LOW);
}
if(state >= 1 && state <= 6){
digitalWrite(GATE_PIN,HIGH);
}
if(state > 1 && S_pin == LOW){//セミオート時のstate最大値(要らないかも?)
state = 1;
}
if(state > 6 && S_pin == HIGH){//フルオート時のstate最大値
state = 6;
}
//トリガーおよびカットオフ入力に関する各入力動作について
if (T_pin == SW_RELEASED_LONG || T_pin == SW_RELEASED) { //長押し後離した場合、トリガーを離した場合
// なにもしない
}
else if (T_pin == SW_PUSHED_LONG) { //長押し後に離した場合(>= SW_RELEASEDでも良い)
// なにもしない。もしくは何か行うか、、
}
else if (T_pin == SW_PUSHED && S_pin == LOW) { //セミトリガーON
state = 1 + state;
}
else if (T_pin == SW_PUSHED && S_pin == HIGH) { //フルトリガーON
state = 3 + state;
}
else if (C_pin == SW_PUSHED) { //カットオフ動作
state = state -1;
}
else {
// なにもしない
}
}
回路については、前回の記事の内容では実現不可!ということも解りました。
こちらのように、ハイサイド側は(一般的には)P型MOS-FETにする必要があるそうです。
ただ、P型の駆動も、これはこれで面倒なため調べていると、、、
IR2302というハーフブリッジドライバを見付けました。
ザックリとした構成は、
arduino~IR2302~N型MOS-FETを2つ~モーターへというように作れるため、モーター正転とショートブレーキの2つの動作が出来るようになるはずです。
P型が要らず、単一電源に出来るという所も良か塩梅。
~~~~~~~~~~~~~~~~~~~~~~~~~~
もう、始めからFCU買って、センサー部分だけP90用にはんだ付けした方が良いんじゃないか。
そういうような、天の声も聞こえてきそうですが、違うんです。
こういうのもサバゲーの面白い所なんです(白目)
つづく
自作FCUに関する記事一覧はこちらです
電動ガン P90 のための FCU 電子制御 電子トリガー ユニットを自作する