2015.11.20 走行距離 69,000km 手パ
手パ、手動パルスジェネレーターと言います。
マッハ3のJOGモードを、テンキーで操作していましたが、0.01mmの移動となると、ボタンを押す感覚が、アバウトなので、やはり、手パが欲しくなりました。
でも、手パの情報が少なく、自作となると、困難な状態でした。 そんな中、掲示板仲間の有る方が、手パの製作に入りまして、見事に無線で手パを作りました。
その、ある方に、無理を言って、ご指導を頂きました。 この場で、感謝申し上げます。
ここを参考にしました。
構 成
1、必要な物
2、繋ぎ方
3、マッハ3の設定
4、PIC
5、基板完成(便利品)
6、暫定で動作確認
手パの送り量調整方法
6、作業を終えて
1、必要な物
先ずは、ロータリースイッチを求めました。
日本開閉器のMRY−106です。 このロータリースイッチのシャフトの長さは、20mmあります。
いざ買ってみてから、つまみを探すと、φ3mmのつまみがなかなか見つかりませんでした。
胴が、φ14mmで、細くていいのですが、使い安そうなつまみは、大抵がφ6mmです。
スイッチ自体は、接点数をスイッチ本体で、変えられるので、使い勝手がいいロータリースイッチであるのですが、
つまみが限定されるので、残念です。
付属のつまみは、事前に操作感を試しましたところ、細くて使いずらいです。 後から、買いなおしました。
手パです。 日本国内では、大変高価な品です。
そこで、AliExpressで購入。
一応、FANUC製の表示とMade In japanの表示があります。 型a860-0203-t001
5V操作です。
2、繋ぎ方
ある方に教わりました。
SSのポート3も、SEC基板も、全て、入力端子です。
フォトカプラは、TLP521−4 2回路入フォトカプラ 赤外LED+フォトトランジスタ TLP621−2
PICは、16F627A
OEMコードは、ここ
3、マッハ3の設定
4、PICを利用する
ちょっと前から学習を始めたので、先達者の方々に大変お世話になりました。
改めて感謝申し上げます。
/*****************************
STEP11_Switch.c
*****************************/
#define _LEGACY_HEADERS//旧CONFIG対応
// インクルードファイルの読み込み
#include
// コンフィギュレーションワードの設定
__CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO );
// プロトタイプ宣言
void WaitTime(int cnt);
// メイン関数
void main (void){
// 1,2,17,18端子を入出力端子に設定
CMCON = 0x07;
// 電圧レベルの初期設定
PORTA = 0x00;
PORTB = 0x00;
// 入出力設定
TRISA = 0b11111111;//全部入力
TRISB = 0b10000000;//全部出力
//int 型の sw という変数を宣言
int sw0;
int sw1;
int sw2;
int sw3;
int sw4;
int sw5;
int sw6;
// 永久ループ
while(1){
//RA0*****************************
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
//PORTB=0x00;
RB0 = 1;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else {
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RB0==1){
RB0 = 0;// LED1消灯
sw0=0;
}
}
//RA1*******************************************
if(RA1 == 0){
//RB1=1;
WaitTime (500);// 待ち時間関数の呼び出
if(RA1 == 0){//もう一度確認する。
//PORTB=0x00;
RB1 = 1;// LED2点灯
sw1=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw1==1 && RB1==1){
RB1 = 0;// LED2消灯
sw1=0;
}
}
//RA2*******************************************
if(RA2 == 0){
//RB2=1;
WaitTime (500);// 待ち時間関数の呼び出
if(RA2 == 0){//もう一度確認する。
//PORTB=0x00;
RB2 = 1;// LED3点灯
sw2=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw2==1 && RB2==1){
RB2 = 0;// LED3消灯
sw2=0;
}
}
//RA3*******************************************
if(RA3 == 0){
//RB3=1;
WaitTime (500);// 待ち時間関数の呼び出
if(RA3 == 0){//もう一度確認する。
//PORTB=0x00;
RB3 = 1;// LED1点灯
sw3=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw3==1 && RB3==1){
RB3 = 0;// LED1消灯
sw3=0;
}
}
//RA4*******************************************
if(RA4 == 0){
//RB4=1;
WaitTime (500);// 待ち時間関数の呼び出
if(RA4 == 0){//もう一度確認する。
//PORTB=0x00;
RB4 = 1;// LED1点灯
sw4=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw4==1 && RB4==1){
RB4 = 0;// LED1消灯
sw4=0;
}
}
//RA5*******************************************
if(RA5 == 0){
//RB5=1;
WaitTime (500);// 待ち時間関数の呼び出
if(RA5 == 0){//もう一度確認する。
//PORTB=0x00;
RB5 = 1;// LED1点灯
sw5=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw5==1 && RB5==1){
RB5 = 0;// LED1消灯
sw5=0;
}
}
//RA6*******************************************
if(RA6 == 0){
//RB6=1;
WaitTime (500);// 待ち時間関数の呼び出
if(RA6 == 0){//もう一度確認する。
//PORTB=0x00;
RB6 = 1;// LED1点灯
sw6=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw6==1 && RB6==1){
RB6 = 0;// LED1消灯
sw6=0;
}
}
}
}
// 待ち時間関数
void WaitTime(int cnt){
while(cnt > 0){
cnt--;
}
}
2015/12/08
この日初めて、実験段階で、満足できる結果となりました。
タクトスイッチを押すと、PICの出力端子のポートBからの信号を受けて、SEC基板の入力端子に見立てた右側に有る
黒色のPICに繋いだ発光LEDが点灯します。
しかし、ここまで来るには、先達者の方から、自分的には、高度なプログラムを進められて、悪戦苦闘の連続
*configの設定を1カ所、
MCLREN→MCLRDIS
アドウインの基板は、リセットスイッチがあります。 テキストにあるコンフィグは、リセットスイッチありの場合ですので、
リセット無しの場合の設定にしなければなりません。
PICを理解するには、初心者の自分には、ここが向いていました。
覚書
それと、RA5の機能、627Aのデータシート 頁98 ↓
1、RA
2、MCLA ← MCLRE:RA5/ MCLR/ VPPピン機能選択ビット
1= RA5/ MCLR/ VPPピン機能はMCLRです
0= RA5/ MCLR/ VPP端子機能は、デジタル入力、MCLRは内部でVDDに接続されています
そして、
__CONFIG(MCLRDIS):外部リセット信号は使用しない、RA5がデジタル入出力で使えます。
リセット信号を使用する場合は、MCLRENとします。 ↓
https://sites.google.com/site/rakucho119/home/mplab-ide/config-wado-no-settei/16f648a
◆ Master clear reset pin function
MCLREN : 有効
MCLRDIS : 無効
Out put端子の使い方
写真のように2通りの電流の流れ方がある。
合成写真右と左である。
左側は、Aに流れる。
右:左と比べると、GNDの流れる線と、フォトカプラーも要らない。
但し、最大で流せる通電量は、フォトカプラには、トランジスターがあるので、かなわない。
プログラムを以下のように変える必要がある。
//RA0*****************************
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
//PORTB=0x00;
RB0 = 0;// LED1点灯
sw0=1;//スイッチがOFF
}
}
4、基板完成(便利品)
いざ、基板を作ろうとすると、大変さを感じました。
PICの足数が多いので、配線も密になります。
秋月のテクノペンがあります。
* 乾燥しないと導通しません。
それと、
協和ハーモテックの2UEWエナメル線(2種ポリウレタン銅線)
ウレタン樹脂のワニスで被覆されているので、導線と接触しても、ショートしません。
* 加熱時間を多めにしないと、被覆されている樹脂が落ちません。
↓ ↓
合成写真右:テクノペンで線を引いたのは、上側の左右2か所です。
5、暫定で動作確認
2015/12/23 この日初めて動作を確認できた!!
最初基盤を配線と繋いだ時、また動かない〜。
でも、自作基板は、動作を確認済みでしたので、 配線を見直しました。
原因は、ソケットでした。
初めて動作した時の、嬉しさは、何度か味わってきましたが、 今までにない嬉しさでした!!
チョーhappy(^^♪(^^♪ です(笑
思わず、万歳三唱しました!!!
基板も配線が多く、自作基盤と配線とを分けて、テストした方が過ちを早く見つけられました
動作確認中の写真です。 導通すると、ピン番号のチェックが外れます。 外れたら、導通した証拠です。これで確認できます。
送り量の調整
自分の手パは、デフォルトの状態では、×1の時に、送り量は4mmでした。
そこである方にお聞きしたら、ヒントを頂きました。
手パ動作の為に、一度は設定した、OEMコードを265から268にし、手パを回すと送り量が1mmになりました。
で、良く分からないのですが、
その後、OEMコードを元の265に戻しても、送り量は1mmのままでした。
写真は、1mmに変更後の写真です。
6、作業を終えて
2015/12/23 この日は、一度は、動作しなかった手パですが、配線に使われているカプラーの不良を見つけて直したら、あっけなく動作しました。
調子に乗って、Stopも設けまして、ついでに操作ボックスの製作をしつつ様子を見ました。
問題がなかったので、とりあえず、我サイトにアップすることにした。
冒頭に述べたように、テンキーで×100を操作するのは、難しく感じていました。
そういったことから、手パを画策した訳です。
手パ本体は、中華FANACですが、激安でしたし、特に問題はなさそうです。
自作で、悪戦苦闘でしたが、うまく動作して、その分、大感激でした。
これも、先達者様方のお蔭です。自分一人でしたら、途中で投げていたでしょう。
本当に、先達者は凄い。
これからは、老後の楽しみの一つに加えられそうです。 自作万歳ですね(^^♪。
【このページのTOPに戻る】