ここから本文です

書庫全体表示

記事検索
検索

全2ページ

[1] [2]

[ 次のページ ]

いろいろあって投稿できていませんが進捗を報告します。
タコですが前回とほぼ同じ回路とスケッチで問題なく動きました。
10周期分の時間を計ることで平均化していますが、アイドリング付近では回転数の変動が激しいので値の平均は有用でした。4000rpm以上では変動は少なく1周期分で計算しても問題なかったです。
ソレノイドを動作させる回転数では問題ないので平均化しないか10回ではなく2~3回の平均で十分かもしれません。

ソレノイドの方も周波数とデューティ比が制御できるようになりました。
周波数とデューティ比を変更するにはレジスタの操作等必要ですが、このあたりの話はまだ100%理解できていないのでネットで拾ったプログラムを 丸パクリ 参考にさせてもらってます。
 

20Hz デューティ比0.1〜0.9ぐらいがちょうどいいと思いました。

できるだけ早く完成させます。

スケッチを載せておきます。回路図はスケッチから想像してください(笑)(そのうち回路図CADを使えるようにする予定なので後で追記します。)

#include <avr/io.h>
 
#define PWMPin 10
 
unsigned int frq; //周波数16Hz – 1MHz
float duty=0 ;      //デューティー比
 
void setup() {
  pinMode(PWMPin, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  frq=analogRead(0);
  duty=analogRead(5);
  frq=map(frq,0,1023,16,200);
  duty=duty/1023;
 
  Serial.print("duty=");
  Serial.print(duty);
  Serial.print("\t");
  Serial.print("frq=");
  Serial.print(frq);
  Serial.print("\n");
  Serial.flush();
 
 
  // モード指定
  TCCR1A = 0b00100001;
  TCCR1B = 0b00010010;
 
  // TOP値指定
  OCR1A = (unsigned int)(1000000 / frq);
 
  // Duty比指定
  OCR1B = (unsigned int)(1000000 / frq * duty);
 
  
}

この記事に

開くトラックバック(0)

パルスから回転数検出

CDIのパルス(CDI→タコメーターの波形)から回転数を検出するために、サンプルとして回路とスケッチを作ってみました。  
1 arduinoで可変抵抗から読み取った電圧を読み取り、その値を周波数とするデューティー比50%のパルスをtone関数で出力
2 このパルスをトランジスタとバッテリーを使って12Vにする。
3 フォトカプラを使ってarduinoに入力
4 回転数を計算しシリアル通信でPCに出力

回転数はパルスの1周期と10周期の時間で計算しています。これは実機で試してみてバラつきが少なければ1周期でいいかもしれません。


回路図はそのうち載せます....
イメージ 1

フォトカプラ TLP621−2
トランジスター 2SC1815

シリアルモニタの結果です。
input:実際の回転数 output:1周期での計算 mean:10周期での計算
イメージ 2


2000rpm以下の回転数だと正しい値が出ないようなので実機でテストするまでに直しておきます。
→tone関数だと31Hz(1860rpm)以下の周波数が生成できないことが原因でした。

以下プログラム

void setup(){
  Serial.begin(9600);
  pinMode(13,INPUT_PULLUP);
  pinMode(8,INPUT);
}

void loop(){
 unsigned long nowtime,beforetime1,beforetime2,beforetime3,
 beforetime4,beforetime5,beforetime6,beforetime7,beforetime8,
 beforetime9,lasttime,
 rpm1,rpm2,rpm3,rpm4,rpm5,rpm6,rpm7,rpm8,rpm9,rpm10,rpm11;
 int val,val2;
 int n=0;
 
 val2=analogRead(0);
 tone(8,val2);
 val2=val2*60;
 
 while(n==0) {
    val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1; 
    }
 }

 do{
    val=digitalRead(13);
 }while(val==1);
 
 nowtime=micros();  //パルスON
//1
n=0;
while(n==0) {
    val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime1=micros();  //パルスON
//2
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime2=micros();  //パルスON
//3
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime3=micros();  //パルスON
//4
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime4=micros();  //パルスON
//5
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime5=micros();  //パルスON
//6
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime6=micros();  //パルスON
//7
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime7=micros();  //パルスON
//8
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime8=micros();  //パルスON
//9
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 beforetime9=micros();  //パルスON
//10
n=0;
while(n==0) {
   val=digitalRead(13);
    if(val==1){    //OFFまで待つ
      n=1;
    }
 }
 
 do{
   val=digitalRead(13);
 }while(val==1);
 lasttime=micros();  //パルスON
 

 
 rpm1=60000000/(beforetime1-nowtime);
 rpm2=60000000/(beforetime2-beforetime1);
 rpm3=60000000/(beforetime3-beforetime2);
 rpm4=60000000/(beforetime4-beforetime3);
 rpm5=60000000/(beforetime5-beforetime4);
 rpm6=60000000/(beforetime6-beforetime5);
 rpm7=60000000/(beforetime7-beforetime6);
 rpm8=60000000/(beforetime8-beforetime7);
 rpm9=60000000/(beforetime9-beforetime8);
 rpm10=60000000/(lasttime-beforetime9);
 rpm11=60000000/((lasttime-nowtime)/10);
 
/*
 Serial.println(beforetime1-nowtime);
 Serial.println(beforetime2-beforetime1);
 Serial.println(beforetime3-beforetime2);
 Serial.println(beforetime4-beforetime3);
 Serial.println(beforetime5-beforetime4);
 Serial.println(beforetime6-beforetime5);
 Serial.println(beforetime7-beforetime6);
 Serial.println(beforetime8-beforetime7);
 Serial.println(beforetime9-beforetime8);
 Serial.println((lasttime-nowtime)/10);
*/
 Serial.print("input ");Serial.print(val2); Serial.print("rpm"); Serial.print("\n");
 Serial.print("output ");
 Serial.print(rpm1); Serial.print("rpm"); Serial.print("\t");
 Serial.print(rpm2); Serial.print("rpm"); Serial.print("\t");
 Serial.print(rpm3); Serial.print("rpm"); Serial.print("\t");
 Serial.print(rpm4); Serial.print("rpm"); Serial.print("\t");
 Serial.print(rpm5); Serial.print("rpm");Serial.print("\t");
 Serial.print(rpm6); Serial.print("rpm"); Serial.print("\t");
 Serial.print(rpm7); Serial.print("rpm"); Serial.print("\t");
 Serial.print(rpm8); Serial.print("rpm");Serial.print("\t");
 Serial.print(rpm9); Serial.print("rpm"); Serial.print("\t");
 Serial.print(rpm10); Serial.print("rpm"); Serial.print("\n");
 Serial.print("mean ");Serial.print(rpm11); Serial.print("rpm");Serial.print("\n");Serial.print("\n");
 Serial.flush();
 
delay(5000);
 
}

この記事に

オシロスコープのバッテリーがだめになっていたので作りました。
イメージ 1
分解すると単2電池4個と電極が入っています。実際に市販の単2充電池で作っている方がいるので真似します。
単2充電池は安いもので1個800円と高価なので少し工夫しました。

単3充電池とダイソーのスペーサー
イメージ 2

イメージ 3
蓋が閉まりません。どうやら規格によると単3の方が単2より長いようで、このような使い方だと入らないようです。また容量も足りないようで電源が入りません。(純正は2800mAh)
いろいろと調べたところ、長さや形状は製品によっても違うようです。最近の高性能な充電池だと容量を稼ぐため全長が長く、+電極が低い傾向があるとか。電池BOXによっては使用できないという声も。
また単2並に短いものもありましたが、これはどれも容量の少ない中国製のものばかりでした。これも形状のせいで使えないというレビューがあります。(なんのための規格なんだか...)
最近の高性能な単3充電池で長さの短いものがあったら教えてください。


結局使ったのはSCサイズ電池です。
イメージ 4

単2より少し小さい規格のようです。純正と同じNiCdで、この容量なら使えると思います。ついでに注文するパーツもあったので、一番安い秋月で注文します。
SCサイズ ニッケルカドミウム電池(NiCd) KR2000SC

直径はそれほど差がないので薄いシートを巻き、電極を付けてテープを巻きます。
イメージ 5

イメージ 7


スペーサーはコルクで作りました。これは後で作り直しましょう。
イメージ 6


無事起動できました。

SCサイズの充電器を持っていないのですが、オシロで充電すると20時間かかると説明書に書いてありました。またNiCdなので使い切ってから充電する必要があります。素直に充電器を買った方がよさそう。
確実にメーカー保証対象外の行為ですし、最悪接触不良で火が出るので十分に気を付けて自己責任で作ってください。

この記事に

ガンマのタコメーターはCDI駆動です。
CDIからタコメーターへ1回転1パルスの波形が行っていると思いますが、これが何かに使えるのではと思い、オシロで観測してみました。

配線はCDI13極カプラの黒青線です。

イメージ 1

電圧12Vで一回転1パルスでした。画像は1800rpmでしょうか。
ちなみにタコメーター内部には入力されたパルスを電流に変換するICが入っているようです。

今のところこれで回転数を検出し、エアソレノイドと排気デバイスコントローラが作れないかと考えてます。
電子制御CDI自体も先駆者の方のサイトで勉強していて、すでにパーツも買ったのですが、まずは点火以外の部分を制御しようかと思います。将来的に入手困難になると思うのでそれまでに完成すればいいかな。

この記事に

何か月か前に3Dプリンターでインシュレーターを作ろうと考えていました。
印刷寸前になってオイルポンプとの干渉が避けられないことが判明したのでお蔵入りになったのですが、他車種なら作れる可能性があるのでここに纏めておこうと思います。

125ガンマでもキャブ・エアクリの取り回し変更や最悪オイルポンプ移設or撤去で取り付けはできそうですが、純正から変更してまでするメリットはないのでやめました。(インシュレーターもまだまだ在庫ありますし)
PWKに換装した際や廃盤になったときは考えます。

インシュレーターを採寸し、3Dデータを作ります。Onshapeという3DCADですが、個人的にはフリーのCADの中で一番だと思っています。特にロフト機能が役に立ちました。
イメージ 1


こんな形状のインシュレーターを探します。できるだけ小型がいいです。(ちなみにこれはスズキのとある車種のインシュレーター)

イメージ 2


イメージとしてはこんな感じです。

イメージ 4

3Dプリンターで土台を作り、汎用性のあるインシュレーターで接続します。
極太の耐ガソリンゴムホースでもできますが、内部に段差ができそうなのと、二次エアを吸いそうなのでこうしました。
先ほどのデータを作り変えて完成
イメージ 3
DMMで印刷します。ブルジョアの方はここで金属で印刷しましょう(笑)

ナイロンなら純正インシュレーター以下の値段で印刷できると思います。
イメージ 5


問題点はナイロンの耐久性でしょうか。
3Dプリントすると素材の特性は悪くなるといわれています。
ナイロンには耐ガソリン性・耐油性があるようですが、プリントしたときの耐久性は確認してません。
DMMのサイトでも耐熱温度が80度と書いてあるだけです。
そのうちテストピースを作って一か月混合ガソリン漬けにしようかと思います。

後はアルミ鋳造で作るという手も考えました。3Dプリンターで原型をつくればロストワックス法でできそうですが、2次エアを吸わないように作るのは素人には難しいでしょう。

オイルポンプと干渉するのは赤丸のところ

イメージ 6

ゴムホースでも干渉すると思います。

オイルポンプというとこんなものも作りました。
イメージ 7
ナイロンだと1500円程度ですが、透明のクリアアクリルだと5000円超えるので印刷していません。
これ廃盤なんですよね....


この記事に

全2ページ

[1] [2]

[ 次のページ ]

本文はここまでですこのページの先頭へ
みんなの更新記事