2018.12.24 ninja1000 走行距離 9,500km ML4 DCポンプ制御
    2020.10.12ポンプのプログラム一部改良。「400/1023=1.9Vでwhileを抜け出す。つまり1.9VからAD開始」

秋月電子のPWMを核に制御していましたが、壊れたのを契機に、内容をグレードアップして 、DCポンプ制御について書き替えました。



構  成
1、故障個所の特定
2、動作と回路図
3、PIC
4、MACH3 設定
5、作業中
6、作業を終えて



1、故障個所の特定

先ずは故障個所の特定です。
基板からPWM出力を取り出して、LEDに繋げてみたら、LEDは点滅しませんでした。
写真右:IC555だけテストをしました。 結果、LED]は点滅。
どうも、IC555以外のどこからしい。 諦めて、買い換えることにした。

そして、水中ポンプも単体で、動作確認をすると、これも動かず!

今回は、方針として、PICも使えて可変制御できますし、MOSFETのスイッチングも分かってきたので、

全て自作することにしました。 この方が、後々、故障しても、自分で治せます。



2、回路図・動作
回路図
ドレインの上側に誘導体がありますが、こういった繋ぎ方をオープンドレインといいます。


SEC基板、スムースステッパーと今回のボードは同じ電源にします。

PICにより連続的にポンプの回転数を制御します。
MACH3の操作パネルからSEC基板とスムースステッパー経由でこの基盤をインターフェースとしてポンプを駆動します。
操作パネルには可変抵抗器を付けて回転数を制御する。

2020/02/22追記
PICについて
ポンプをPICのPWMを使って制御している。
SEC基板からの出力信号をPIC側を入力端子として受けている。
最近、このPICについて、びっくりの気付きがあった。
PICの電源端子を印加しない状態で、PICの入力端子に電圧を印加すると、 PICの入力に応じて出力する端子に電圧が発生する。

自分のポンプ制御に使っているPICの例
入力端子に電圧が印加されると、この入力端子に応じて出力端子に電圧が発生し、 子の出力端子に繋がっているFETが動作する。
同様に、このPICの電源端子にも電圧が発生する。
従って、このPICの電源端子に繋がっている配線にも電流が流れる。

具体
PWM制御基盤のPICの電源に何もつながっていないのに、 SEC基板からの信号がONの時、PIC電源に繋がっている回転計の液晶ディスプレイが点灯する。
併せて、SEC基板からの信号を受けるPICの入力端子に応じて動作する出力端子も動作してしまう。

対処方針
1、ポンプ制御のPWM基板の電源は回転計の電源と分ける。
また、PICの電源端子に印加しなくても、PICが動作しても、 PICが電源不足とならないように、PICの電源に給電する。
2、前途の様にポンプ制御のPWM基板に使われているPICは、電源無しでも動作するので、 ポンプが誤作動しないように、ポンプの電源とPWM基板の電源も分ける。

詳細
・ポンプのDC12V電源-----主軸側からとり、誤作動の危険性を無くす。
・PWM制御に使っているPICのDC5V電源-----主軸側からではなく、3軸側からとり、回転計の誤作動を無くす。





部品の選定方法

モーター用コイルに発生する逆起電力対策
バリスタ

オムロン
KOA株 の金属酸化物バリスタの選定
2)回路電圧VE(V)から?式を用いて必要な最大許容回路電圧を求めます。
VE≦VA(1−α) …?
VE:回路電圧
VA:最大許容回路電圧
α:設計マージン(α=0.2)

バリスタ電圧
VV(min.)≧(12×1.1)/(1−0.2)
≧16.5(V)



直近上位の27vを選定とも思ったんですが、 無難な清流ダイオードにしました。





ゲート抵抗は、続トランジスタ回路の設計から出しましたし、実験の結果、やはり1MΩじゃないと、
GND側に引っ張り切れなくて、ドレインから電流が流れてしまいました。
抜粋
ゲート抵抗について
MOS FETは、素子の入力インピーダンスが非常に高いので、ゲートをオープンにしておくと、静電気により破壊されるとのこと。

FET方向への3.9kΩは、実験の結果、一番安定していました。
ただ、参考文献でもハッキリとしませんでした。

パワーMOS FET  IRLI520NPBF
仕様(@TJ=25℃)
・V(BR)DSS:100V(VGS=0,ID=250μA)
・ID:8.1A(TC=25℃)
・RDS(ON):0.18Ω(VGS=10,ID=6A)
・PD:30W(TC=25℃)
・VGS(th):1.0V〜2.0V(VDS=VGS,ID=250μA)
・Qg:20nC(VDS=80V,VGS=5V,ID=6A)
・tr:35ns(VDD=28V,ID=25A,RG=12Ω,RD=1.1Ω)
・tf:22ns(VDD=28V,ID=25A,RG=12Ω,RD=1.1Ω)


スレッショルド電圧Vgsga1.0〜2.0Vと、PICにはうってつけ。


ドレイン電流Idポンプが3Aのところ余裕の8.1A











つまみ開度0から何ボルトをかけるかについては、実験の結果、2.5Vは必要だった。
Idは、0.6A位になる。 実験は無負荷なので、負荷時の調整は必要だろう。
写真の赤ラインは、参考程度に。

2.5Vとなると、PICは、8ビットで1023になるから、2.5/5V×1023=約500から、AD変換の読み取りを開始すればいい。




使用するポンプです。 この品も恐らく中華です。 アマゾンで売っていました。





3、PIC

PICは、16F1827
メ モ

使わないI/Oピンは出力モードとし、0(Low)を出力しておく
  出力モードの場合には、上記問題は発生しません。
  ピンもLowレベルですから、特に問題になるようなことはありません。


動作表示用LEDは、点滅させ且つ、低中高の3段階表示にした。
低は、点灯、中高は点滅させ、点滅間隔を中、高と分けた。高は中より、点滅間隔は短い。
このプログラムで、Mach3にあるポンプボタンをクリックすれば、動作する。




プログラム

/*RB4で電圧読み取りし、RB3からPWM出力端子*/
//RB7がSEC基板ポート2のSL-13の1番ピン(出力端子)を入力端子として受ける //RA1からPWM出力表示を操作盤のLEDで点滅させる //RA0から基盤上のLEDにより点滅させる //PIC16F1827 Configuration Bit Settings
//202010プログラム改良
// 'C' source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable (PWRT enabled) #pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) #pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = OFF // PLL Enable (4x PLL disabled) #pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset) #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF.
#include // クロック周波数指定 // (__delay_ms()関数が必要としているため) #define _XTAL_FREQ 16000000 // プロトタイプ宣言 void InitPWM(void); void InitTimer2(void); unsigned int adconv(void); //ADC読み込み関数 // メイン関数
void main(void) {
OPTION_REGbits.nWPUEN = 0; //内部プルアップ有効
OSCCON = 0b0111001; //クロック周波数を16MHzに設定
PORTA = 0x00; //全てLo PORTB = 0x00; //全てLo
ANSELA = 0b00000000; //全てデジタルI/Oとする
ANSELB = 0b00010000; // 可変抵抗の電圧読み込み用にRB4のみアナログ
// 入出力設定
TRISA = 0b00000000; // RA全て出力
TRISB = 0b10010000; //RB4 可変抵抗用ADC用入力端子、実験RB7を入力端子に
// ADコンバータ設定
ADCON0 = 0b00100001; // アナログ変換情報設定(RB4から読込む)
ADCON1 = 0b11010000; // 読取値は右寄せ、A/D変換クロックはFOSC/16、VDDをリファレンスとする
//変数宣言
long num;
// PWMモード設定関数の呼び出し
InitPWM();
// タイマ2設定関数の呼び出し
InitTimer2();
while (1) {
num = adconv(); //adc 読み込み関数呼び出し
num = (num - 50)*(1023 - 390) / 1023 + 390;
//3段階動作表示用LED点滅とbreakによりwhileから抜けてSEC基板の微弱出力電圧に対応
if (RB7 == 1 && num < 440) {//440以下の電圧1.9V+アルファ(50)に対しRB3は出力しない390=1.9V/5/1023
LATA1 = LATA0 = 1;
num = 0; RB3 = 0; } else if (RB7 == 1 && 440 <= num && num < 850) {
LATA1 = LATA0 = 1; __delay_ms(25); LATA1 = LATA0 = 0; __delay_ms(10); } else if (RB7 == 1 && 850 <= num) { LATA1 = LATA0 = 1; __delay_ms(7); LATA1 = LATA0 = 0; __delay_ms(5);
} else if (RB7 == 0 | num < 440) {
__delay_ms(10);
break; }
CCPR1L = num >> 2; //右寄せ2bitし上位8bit取り出し CCP1CONbits.DC1B = num & 0b11; //下位2bit取り出し } } // アナログ値の変換と読込み処理関数
unsigned int adconv() {
ADCON0bits.GO_nDONE = 1; // アナログ値読取り開始指示 while (ADCON0bits.GO_nDONE); // 読取り完了まで待つ return ADRES; } // PWMモード設定関数
void InitPWM(void) {
APFCON0bits.CCP1SEL = 0; // RB3端子をPWM出力端子に設定 // CCPのモードをPWMモードに設定 CCP1CONbits.CCP1M3 = 1; CCP1CONbits.CCP1M2 = 1; CCP1CONbits.CCP1M1 = 0; CCP1CONbits.CCP1M0 = 0; // 周期を255μ秒に設定(PR2 + 1μ秒)×1/(動作処理速度÷4) PR2 = 255; //PR2レジスタ8bit0~255 // デューティーサイクルを0msで初期化 CCPR1L = 0; CCP1CONbits.DC1B = 0; //PWM出力RB3 } // タイマ2設定関数
void InitTimer2(void) {
// プリスケーラ値を1に設定 T2CONbits.T2CKPS1 = 0; T2CONbits.T2CKPS0 = 0; // TMR2レジスタをクリア TMR2 = 0; // タイマ2起動しPWMをスタート T2CONbits.TMR2ON = 1;}






4、Mach3 の設定

MACH3の設定をします。
ポンプは、SEC基板(ポート2基板)の出力信号〜1番ピンに設定




SEC基板(ポート2基板)





4、作業中



2018/12/28 この日やっと、プログラムがまとまって、LEDを使いPWMの加減や動作の確認をした。



実機完成

実機が完成し、テスト、、、結線ミス。 何度か見渡して、完成。

左側の新型は、PICで制御しますので、リレーやフォトカプラーは無し
コンパクトになりました。 また、以前は、ボリュームがモーターの回転と同期していなくて、VRをかなり回さないとポンプが回りませんでした。
こういった点もPIC利用によりプログラムで解消しました。



5、作業を終えて
フライス盤に取り付けての確認作業中です。

今回取り付けたPWM制御基板により、ポンプが回りだすと、LED赤が点灯します。
基板の方でも、同様に確認できるようにしました。あとあと、故障個所特定に役立ちます。
しかし、プログラムを途中で先達者の方に助けてもらいましたが、ここまで出来て、感無量です。






【このページのTOPに戻る】 inserted by FC2 system