今週は徹夜あり、終電連打などでヘロヘロです。
ふと窓の外を見たときの夕日がとてもきれいでした。
あぁきれいだなぁ。
土曜日も一日仕事してましたが、どうしても我慢できずに日が暮れる前にノイズ対処しました。
ハード面ではツェナーダイオードの付け替え
ソフト面ではパルスの感知をFallingEdgeに振っただけです。
メーターをタンクバッグにガムテで結んで走ってきました。
今のところバッチリ動いています。
ソフトで15,000回転に制限してますが、SDRでこの回転数までは行かないでしょうから、これで米屋太号で使えるんじゃないでしょうか。
前回の回路では6.1Vのツェナーでしたが、針が跳ねる、つまりノイズが入ってる理由はなんとなくこれだろうなって思ってました。
CDIの波形は減衰していく正弦波なので、数回マイナス電圧がきます。
この波が1回目はツェナーを乗り越えて、以降は乗り越えない様にしないといけません。
そこでツェナーの降伏する電圧を少し上げてみたという事です。
でも、、、そもそもNSの回路はなぜこの回路で大丈夫なのでしょうか。
NS製の回路をもう一度見てみます。
よく見るとC1コンデンサが小さい波は吸ってしまっている様子でもあります。
ですので、今回作った回路もC1の0.0047uFを入れるのも良い方法なのかも知れません。
今回は手持ちに13.1Vのツェナーという、あんまり使い道のないものがありましたので、こちらに付け替えです。
回路はZDを6.1から13.1に変えただけです。
秋月電子に売っている12~15V位のツェナーダイオードでええかなと思います。
少し寄り道。
米屋太号はコンデンサ倍電圧回路で昇圧された600Vが入っています。
ノーマルのCDIと比較して高電圧になってますので、この回路に入る電圧も倍になる寸法です。
R1は18Kですから、600Vかかった場合単純に最大33mA流れる計算になります。
単純に計算するとW=VIの式から600(V)x0.033(A)=20Wで定格1/4W程度の抵抗は即燃えてしまいます。
ただ、これは延々と流し続けていた場合の話でして、CDIが生み出す電圧は0.5ms程度で減衰する正弦波ですから消費電力はこれよりも相当小さくなります。
ここでざっくりと計算してみますと、8,000rpmまでキッチリ600Vコンデンサに充電されると1/4Wの抵抗ですとほぼ定格に達する様な気がします。最低でも1/2Wの抵抗を使う必要はありますね。
また、カーボン抵抗の定格電圧は500〜700V程度のものが多いらしいのでこれも心配です。
まぁ倍加回路はいろいろな部分に負担を掛けすぎるので、レーサー以外では使わない方が無難かなと最近は思っています。
実際のここまでの内容を動画にまとめときました。
3MAのタコメータはわりと正確なんですが、やっぱり動作が遅いので吹けあがりに数千回転程度遅延が発生してます。
最初心配していた「針がピクピクしている感じ」も走っている間はそれほど気になりませんので、へんな平準化もしなくて正解でした。
回転数表示はかなり正確なんじゃないかなって思います。
ステッピングモーターは今回4msec間隔でドライブしています。
4msecといえば、15,000rpmのパルスの間隔です。
タコメータのスケールにもよりますけど、3XVタコメーターパネルのスケールですと、大体この回転数で25rpm/1msecの変化はついていくことになりますので、SDRならばええ感じで追従可能なんじゃないかなって思います。
今回の部品代は500円位ですかね。
電子部品をイチから買っても1000円位ないんじゃないかなと思います。
ノイズ除去はツェナーだけしかやってませんので、まぁ正しい対処だったと思います。
明日幕張でアルモクさんに渡しとこうかなぁ〜と思ってますがいらっしゃいますかね〜。
FIX版のソースです。
→FIXしてませんでした
[コードを表示する]
ふと窓の外を見たときの夕日がとてもきれいでした。
あぁきれいだなぁ。
土曜日も一日仕事してましたが、どうしても我慢できずに日が暮れる前にノイズ対処しました。
ハード面ではツェナーダイオードの付け替え
ソフト面ではパルスの感知をFallingEdgeに振っただけです。
メーターをタンクバッグにガムテで結んで走ってきました。
今のところバッチリ動いています。
ソフトで15,000回転に制限してますが、SDRでこの回転数までは行かないでしょうから、これで米屋太号で使えるんじゃないでしょうか。
前回の回路では6.1Vのツェナーでしたが、針が跳ねる、つまりノイズが入ってる理由はなんとなくこれだろうなって思ってました。
CDIの波形は減衰していく正弦波なので、数回マイナス電圧がきます。
この波が1回目はツェナーを乗り越えて、以降は乗り越えない様にしないといけません。
そこでツェナーの降伏する電圧を少し上げてみたという事です。
でも、、、そもそもNSの回路はなぜこの回路で大丈夫なのでしょうか。
NS製の回路をもう一度見てみます。
よく見るとC1コンデンサが小さい波は吸ってしまっている様子でもあります。
ですので、今回作った回路もC1の0.0047uFを入れるのも良い方法なのかも知れません。
今回は手持ちに13.1Vのツェナーという、あんまり使い道のないものがありましたので、こちらに付け替えです。
回路はZDを6.1から13.1に変えただけです。
秋月電子に売っている12~15V位のツェナーダイオードでええかなと思います。
少し寄り道。
米屋太号はコンデンサ倍電圧回路で昇圧された600Vが入っています。
ノーマルのCDIと比較して高電圧になってますので、この回路に入る電圧も倍になる寸法です。
R1は18Kですから、600Vかかった場合単純に最大33mA流れる計算になります。
単純に計算するとW=VIの式から600(V)x0.033(A)=20Wで定格1/4W程度の抵抗は即燃えてしまいます。
ただ、これは延々と流し続けていた場合の話でして、CDIが生み出す電圧は0.5ms程度で減衰する正弦波ですから消費電力はこれよりも相当小さくなります。
ここでざっくりと計算してみますと、8,000rpmまでキッチリ600Vコンデンサに充電されると1/4Wの抵抗ですとほぼ定格に達する様な気がします。最低でも1/2Wの抵抗を使う必要はありますね。
また、カーボン抵抗の定格電圧は500〜700V程度のものが多いらしいのでこれも心配です。
まぁ倍加回路はいろいろな部分に負担を掛けすぎるので、レーサー以外では使わない方が無難かなと最近は思っています。
実際のここまでの内容を動画にまとめときました。
3MAのタコメータはわりと正確なんですが、やっぱり動作が遅いので吹けあがりに数千回転程度遅延が発生してます。
最初心配していた「針がピクピクしている感じ」も走っている間はそれほど気になりませんので、へんな平準化もしなくて正解でした。
回転数表示はかなり正確なんじゃないかなって思います。
ステッピングモーターは今回4msec間隔でドライブしています。
4msecといえば、15,000rpmのパルスの間隔です。
タコメータのスケールにもよりますけど、3XVタコメーターパネルのスケールですと、大体この回転数で25rpm/1msecの変化はついていくことになりますので、SDRならばええ感じで追従可能なんじゃないかなって思います。
今回の部品代は500円位ですかね。
電子部品をイチから買っても1000円位ないんじゃないかなと思います。
ノイズ除去はツェナーだけしかやってませんので、まぁ正しい対処だったと思います。
明日幕張でアルモクさんに渡しとこうかなぁ〜と思ってますがいらっしゃいますかね〜。
FIX版のソースです。
→FIXしてませんでした
[コードを表示する]
/* ----------------------------------------------------------------------------------------- PIC12F1822 Pinout +--------+ Vdd |1 8| GND Captre>- RA5 |2 7| RA0 -> OUT_B LED <- RA4 |3 6| RA1 -> OUT_A MCLR -> RA3 |4 5| RA2 -> Suspend +--------+ ----------------------------------------------------------------------------------------- */ #include <xc.h> // include standard header file // set Config bits #pragma config FOSC=INTOSC // Oscillator Selection bits #pragma config PLLEN=OFF // PLL Enable bit #pragma config WDTE=OFF // Watch dog timer enable bit #pragma config MCLRE=OFF // MCLEAR enable bit #pragma config CLKOUTEN=OFF // Clock Out Enable bit #pragma config IESO=OFF // Internal External Switchover bit #pragma config FCMEN=OFF // Fail-Safe Clock Monitor Enable bit #pragma config CP=OFF // Code Protection bit #pragma config CPD=OFF // Data Code Protection bit #pragma config BOREN=ON // Brown-out Reset Enable bits #pragma config WRT=OFF // Flash Memory Self-Write Protection bits #pragma config STVREN=ON // Stack Overflow/Underflow Reset Enable bit #pragma config BORV=LO // Brown-out Reset Voltage Selection bit #pragma config LVP=OFF // Low-Voltage Programming Enable bit // Definitions #define _XTAL_FREQ 8000000 // this is used by the __delay_ms(xx) and __delay_us(xx) functions #define OUTA LATA1 #define OUTB LATA0 #define SMD_STANDBY LATA2 #define SM_SENS RA3 #define LED LATA4 #define INPULSE RA5 #define HH() {OUTA=1;OUTB=1;} #define LH() {OUTA=0;OUTB=1;} #define LL() {OUTA=0;OUTB=0;} #define HL() {OUTA=1;OUTB=0;}9 #define TURN_L 1 #define TURN_R 0 #define SM_PULSE_INTERVAL 4 #define RPM1000 5 #define RPMMAX 280 #define SMD_STANDBY_ON 0 #define SMD_STANDBY_OFF 1 // Global unsigned int gSMTarget = 0; unsigned int gPos = 0; /* ----------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------- */ void interrupt Interrupt() { if(CCP1IF) { static unsigned int preSMTarget = 0; unsigned int ccpr1; SMD_STANDBY = SMD_STANDBY_OFF; // Reset Timer1 TMR1H=0; TMR1L=0; // for YAMAHA TZR250(3XV) tacho meter scale. ccpr1 = ((CCPR1H * 0x100)|CCPR1L) + 1; gSMTarget = (unsigned int)(830000UL/ccpr1); if(gSMTarget>=RPM1000) gSMTarget -= RPM1000; if(gSMTarget>RPMMAX) gSMTarget = RPMMAX; CCP1IF = 0; } // Timer1: Timeout means engine stop if(TMR1IF) { gSMTarget = 0; SMD_STANDBY = SMD_STANDBY_ON; TMR1IF = 0; LED = 0; } } /* ----------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------- */ void rotate(int dir) { static signed char phase = 0; if( dir ) { phase++; phase %= 4; } else { phase--; if( phase < 0 ) phase = 3; } switch( phase ) { case 0: HH(); break; case 1: LH(); break; case 2: LL(); break; case 3: HL(); break; default: break; } __delay_ms(SM_PULSE_INTERVAL); } /* ----------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------- */ void main ( ) { int ii, jj; OPTION_REG = 0b00000000; // WPUA = 0b00000000; // pull-up pins // set up oscillator control register OSCCON= 0b01110010; // 8Mhz // Set up I/O pins // PORT A Assignments APFCON= 0b00000001; // CCP1 function is on RA5 TRISA= 0b00101000; // PORTA= 0b00000000; // Reset port ANSELA= 0b00000000; // Disable analog input LED = 1; // Timer1 Clock Source Select bits T1CONbits.TMR1CS=0; // 00 = Timer1 clock source is instruction clock (FOSC/4) T1CONbits.T1CKPS=0x01; // Timer1 Input Clock Prescale Select bits 1:2 Prescale value T1CONbits.T1OSCEN=0; // Dedicated Timer1 oscillator circuit disabled T1CONbits.nT1SYNC=1; // 1 = Do not synchronize external clock input T1CONbits.TMR1ON=0; // Timer1 On bit // Set up Capture input CCP1CON= 0b00000100; // Capture mode: every falling edge // CCP1CON= 0b00000101; // Capture mode: every rizing edge // Reset CCP1/Timer interrupt flag CCP1IF=0; TMR1IF=0; // Initialize Stepping motor postion __delay_ms(300); SMD_STANDBY = SMD_STANDBY_OFF; while( 0 != SM_SENS ) {rotate( TURN_L );} while( 0 == SM_SENS ) {rotate( TURN_R );} gPos == 0; // startup demo for( ii=0; ii < RPM1000; ii++ ) { rotate( TURN_R ); } for( jj = 0; jj < 14; jj++ ) { for( ii = 0; ii < 14; ii++ ) { rotate( TURN_R ); } __delay_ms(300); } for( ii = 0; ii < 14*14; ii++ ) { rotate( TURN_L ); } __delay_ms(1000); // Enable Interrupt PEIE=1; // Enable peripheral interrupt GIE=1; // enable global interrupt CCP1IE=1; // enable the CCP1 interrupt TMR1IE=1; // enable Timer1 intterupt on TMR1ON=1; // Timer1 On while(1) { if( gSMTarget > gPos ) { rotate( TURN_R ); gPos++; continue; } else if( gSMTarget < gPos ) { rotate( TURN_L ); gPos--; continue; } else { } } } /*--------------------------------------------------------------------------------- Copyright 2012-2014 Rilassaru All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the IshiSoft nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
コメント
コメント一覧 (2)
かなり似た行動をとっていたのです・・。
(デンキはからきしですけど)
タンクにガムテONで思い出しました。
マジですか・・・
いやー是非いつか詳細を教えて欲しいですね〜
(もしかしてブログに書いてあるのかな・・・)