• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

のぼるざえもんのブログ一覧

2012年11月30日 イイね!

スピードメーターのプログラムの考察〜忘れないため記録

車速パルスを取得する方法を得てからスピードメーターはどうやって計算してるんだろ??とHPでいろいろ調べてみたら、実際に計測してる方を発見!

要は、「車速パルス発生から次のパルス発生の時間を0.4μ秒刻みで計測」、0.4μ秒が何回発生したか?を求め、基準値35400を計測結果で割るとスピードが出る!(@@)ほうほう!なるほど!これなら200km/hでも計測できるワケですね☆

ついでにリミッターについて考えると、140km/hでリミッターがかかる車は、実際車速パルスが140km/hで発生してても139km/hしか出てませんよ〜と計測結果を偽ってECUに出力してやれば140オーバーでも燃料カットされないということですね?なるほどなるほど!!

ということで、プログラムしてみました。回路を作っていないので実際に動くか解りません。プログラムはこんな感じ?という考察だけです。

実際には135km/hでリミッターがかかるという話なのでこのままのプログラムではリミッターカットできないハズです。

<PIC16F84A>
#include
__CONFIG( FOSC_HS & CP_OFF & PWRTE_ON & WDTE_OFF );
//オシレータ種類_コードプロテクト_パワーアップタイマ_ウォッチドックタイマ
#define _XTAL_FREQ 10000000
    //CPU10MHz設定
static unsigned char speed=0;
    //スピード表示用
static unsigned char seg1 = 0;
    //1桁目
static unsigned char seg2 = 0;
    //2桁目
static unsigned char seg3 = 0;
    //3桁目
static unsigned char i=0;
    //RA桁表示割り振り
static unsigned char limitcount=0;
    //リミッター用カウンタ
static unsigned int count = 0;
 //カウンタ用
static bit flag=0;
 //カウンターセットフラグ
static bit limit = 0;
    //リミッターフラグ
unsigned char p[10] =
{0b00000000,0b00000001,0b00000010,0b00000011,0b00000100,
0b00000101,0b00000110,0b00000111,0b00001000,0b00001001};
   //7seg0~9←7セグLED配線による
/*動作概要
車速パルス発生→次の車速パルス発生の時間を40usカウントを何回繰り返すか計測、基準値35400をカウントで割ることで車速が求められる。
140km/hまではRA0に入力された車速パルスをRA3へそのまま出力、139km/h以上の場合はRA3へ127カウントごとに反転出力。35400/(127*2)=139.37km/h
*/
static void interrupt warikomi(void)
    //割り込み発生時イベント
{
   T0IE = 0;
    //TIMER0割り込み禁止
   T0IF = 0;
    //TIMER0フラグクリア
   TMR0 = 155;
    //カウンタ値再セット
//////////////////////////////LIMITER CUT//////////////////////////////////////
   if(limit==1&&limitcount>127){
    //127カウントごとにRA3出力反転(パルス~パルス間253=139.9km/h)/2
      RA3 = ~RA3;
      limitcount=0;
   }
   limitcount++;
//////////////////////////////////////////////////////////////////////////////
   T0IE = 1;
    //TIMER0割り込み許可
   count++;
    //speed+
   if(count>35400){
      count=35400;
   }
}
main()
{
   TRISA = 0b00001000;
    //RA4を車速パルス入力、RA07seg1桁目、RA17seg2桁目、RA27seg3桁目、RA3パルス出力
   TRISB = 0b00000000;
    //RB0~7 7seg動作
   PORTA = 0b00000000;
    //AB全ポート0初期化
   PORTB = 0b00000000;
   while(1){
    //無限ループ処理
      while(RA4==0){
    //RA4パルスinならRA3へパルス出力(リミッタフラグ無し)
         if(limit==0){
            RA3=1;
         }
         if(flag==0){
    //初回カウンター設定、次のパルスinまでカウントに++
            flag = 1;
            GIE = 1;
    //すべての割り込み許可
            T0IE = 0;
    //タイマー割り込みを禁止
            speed=35400/count;
    //35400(基準値を回数で割ると速度が出る)
/////////////////////////////LIMITER CUT///////////////////////////////////////////
            if(speed>139){
    //speed 139以上でlimitフラグ1、以下なら0
               limit=1;
            }else{
               limit=0;
            }
////////////////////////////////////////////////////////////////////////////////////
            seg3=speed/100;
    //速度を7セグに割り振り
            speed%=100;
            seg2=speed/10;
            speed%=10;
            seg1=speed;
            count=0;
    //count初期化
            OPTION_REG |= 0b10010000;
    //OPTIONレジスタ設定に値を代入 
            TMR0 = 155;
    //カウンタ値をリセット1ms=0.4us*100=40us
            T0IE = 1;
    //タイマー割り込みを許可
         }
         if(i==4 || (seg3==0 && seg2==0)){
            i=1;
         }
         switch(i){
    //7seg表示割り振り処理
         case 1:
            RA0=1;
            PORTB=p[seg1];
            break;
         case 2:
            if(seg3!=0 || seg2>1){
               RA1=1;
               PORTB=p[seg2];
            }
            break;
         case 3:
            if(seg3!=0){
               RA2=1;
               PORTB=p[seg3];
            }
            break;
         }
      }
      RA0=0;
      RA1=0;
      RA2=0;
      i++; 
      while(RA4==1){
         if(limit==0){
            RA3=0;
         }
         flag=0;
         if(i==4 || (seg3==0 && seg2==0)){
            i=1;
         }
         switch(i){
         case 1:
            RA0=1;
            PORTB=p[seg1];
            break;
         case 2:
            if(seg3!=0 || seg2>1){
               RA1=1;
               PORTB=p[seg2];
            }
            break;
         case 3:
            if(seg3!=0){
               RA2=1;
               PORTB=p[seg3];
            }
            break;
         }
      }
      RA0=0;
      RA1=0;
      RA2=0;
      i++;
   }
}
<修正箇所>
修正1
if(count>35400){
  count=35400;
}
追加。0km/hでも35400以上カウントしないよう修正。
修正2
i++の位置をwhile文の外へ(間違い修正)
Posted at 2012/11/30 09:52:13 | コメント(0) | トラックバック(0) | 日記
2012年11月27日 イイね!

ワイパー電子制御化計画ープログラミング

ワイパー電子制御化計画ープログラミングいろいろ考えて、コペンに無いワイパーの要素3つを取り入れてワイパーの電子制御を目指す事にしました!

1.外付けスイッチ無し、純正スイッチに「インターバル学習機能」を持たせる。
2.車速に連動してインターバルを変化。
3.ウォッシャー起動後にワイパーを自動動作。


ブレッドボード上での大まかなプログラミングは完成!!^^やはりC言語は早いっ!最初から知ってれば良かった。。。

後は、実際に取り付けて電流電圧の計測をして必要あれば抵抗値の再設計、プログラムの修正などなど。

あ〜、難関のハンドル周りの分解が〜^^;実際の取り付けまでにちょっと期間が空きそうです。。。
Posted at 2012/11/27 23:00:03 | コメント(0) | トラックバック(0) | 日記
2012年11月25日 イイね!

ワイパー電子制御化計画ー基盤制作

ワイパー電子制御化計画ー基盤制作車速パルスの取り出し方が解ったのでさっそく基盤を制作しました。

おなじみのPIC16F84Aで作りました。単にワイパーをコントロールするだけにしては端子数が多いので動作確認用としてLEDを搭載し、車速に応じて変化をするよにしました。

あとはプログラミングがちゃんとできるかな?・・です^^;何せC言語でのプログラミングは初めてなので。。。ドキドキです。
Posted at 2012/11/25 19:17:59 | コメント(1) | トラックバック(0) | 日記
2012年11月25日 イイね!

車速パルスを調べてみた

車速パルスを調べてみた車速パルスを得るために以前にカットしたルーフECUへ通じている車速パルス線を再利用することにしました。


今回は車速パルスの状態の確認だけなので他に何も弄らずパルス線を延長しただけ。
電圧を調べてみると、どうやらパルス波は直接物理的なスイッチからではなく、デジタルに補正されて出力されているようですね。

私の勝手なイメージでは、(ノロノロ運転でもHI→LOを繰り返し、0Km/hでも停まる位置によってはHIかLOのどちらかで停止。)

ところが実際は
電源ONで約5.5V出力(HI)。ノロノロ運転でメーターが反応しないスピードでは5.5Vのまま。
少しスピードが出ると約5.5V(HI)→ 0V(LO)を繰り返し。

・・・つまり0Vに落ちるタイミングだけ計れば速度が解るワケですね。HI/LOでの停止状態を読まなくてもOK!チャッタリング対策もいらない!^^ナルホド!実に扱いやすい親切設計になっています!
Posted at 2012/11/25 14:16:31 | コメント(0) | トラックバック(0) | 日記
2012年11月24日 イイね!

ワイパーの電子制御化計画

ワイパーの電子制御化計画久しぶりの車ネタです。

コペンのワイパーって、間欠時間が固定だしウォッシャー後に自動で動いてくれないし・・って不満だったのですが、さすがはみんカラ!調べてみるとワイパー周りをバラして回路図まで解説してくださっている方を発見!!
それを元に回路図を起こして、実際に動いてる場面をシュミレートすると、、、なんだこのアナログ回路!?単純な非安定マルチバイブレーター??みたいな(よくわからないけど・・・)ワイヤードロジックの苦手な私でもなんとなーく解る気がする回路。。。。

て、ことはこの回路にコレを足して、コレを切って・・・


と導き出したのがこの配線!作業中のスクリーンショットなので見辛いですが、赤色の配線が追加配線。抵抗を1個外してやれば・・・後は、「RA○」の部分をスイッチとして読み込ませれば「ワイパーINT」「ワイパーLO」「ウォッシャーON」状態を取得することができまるっ!
RB1の部分に電圧を印可してやれば(仮に5Vとしてる)トリガーとなってワイパーを任意に動作させることができるっ!!!?
プラスで車速信号を取り入れれば、車速に応じて変化させられる!!

これは(@@)いけるかも〜!?
ということで早速PICプログラミングを開始!

↑悲しいかなエラーの出まくってるのですが・・・
最近新しくC言語というものを手に入れました!今までのアセンブリ
よりかなり効率的にプログラミングできます!今まで使っていたプログラミングソフトに数年前から標準搭載だったそうで、、、こんな便利なモノ知らんかったなんて(T T)
無事に出来たら後ほどお伝えします!(ハンドル周りの分解がかなりプレッシャー・・・)
Posted at 2012/11/24 09:47:39 | コメント(0) | トラックバック(0) | 日記

プロフィール

「傘泥棒対策 http://cvw.jp/b/1504928/40266466/
何シテル?   08/18 21:50
のぼるです。中古ですが念願の赤コペンGETしました!これからオープンカーライフ楽しみます♪よろしくお願いします。
みんカラ新規会員登録

ユーザー内検索

<< 2012/11 >>

    123
45678910
11 121314151617
181920212223 24
2526 272829 30 

愛車一覧

ダイハツ コペン 通勤快速コペンとまと号(コペトマ) (ダイハツ コペン)
トマトみたいでかわいいです。 姉には「てんとう虫みたい」って言われました。 写真、、駐車 ...

過去のブログ

2016年
01月02月03月04月05月06月
07月08月09月10月11月12月
2015年
01月02月03月04月05月06月
07月08月09月10月11月12月
2014年
01月02月03月04月05月06月
07月08月09月10月11月12月
2013年
01月02月03月04月05月06月
07月08月09月10月11月12月
2012年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ
© LY Corporation