Home > Old Car(PRIUS-PHV) > EVSE Control Software

EVSE Control Software (Old Car)


目  次内  容作業日作成更新日
0.ソフトの概要
1.TMR0割込の設定
2.CCP、PWMの設定
3.A/Dコンバータ
4.リレー駆動
5.LED駆動
6.ソフトUARTの動作
7.簡易モニター
8.ソースリスト
   
   
  頁最後尾
 
(一部未完成)  鋭意製作中です しばらくお待ち下さい



 0.ソフトの概要
8ピンの PIC12F683 を用いて EVSE の制御を行います

このプログラムはタイマー割込みを使い、一定時間毎に処理を行う構造とします

主な機能は
(1)CPLT信号(1kHz PWM)の生成
(2)CPLT信号レベルの測定・判定(A/D変換)
(3)充電電流の ON/OFF制御(リレー駆動・簡易PWM)
(4)動作状態の LED点滅パターン表示
(5)パラメータの設定変更機能(パソコンとの通信)
(6)その他
  簡易モニター機能
  ソフトUART機能(パソコンとの通信用)
PageTop

 1.TMR0割込の設定
(1)TMR0割込を416uSとする

  PIC12F683 では UARTが内臓されていないので、ソフトで UARTをエミュレートします
  1bitを生成するためのクロックに相当する時間をTMR0の割込で作成します
  通信レートを 300bpsとすると、 1bitは 3333uS となり
  1bitを 8clockで構成すると、1clockは 416.6uS となります
 (ソフトUARTの動作は6.で説明します)

  416uSの割込をカウントして一定時間毎の処理を行うための基準時間を生成します

  416uS×48count≒20mS   20mS毎の処理
   20mS×50count≒1Sec   1秒毎の処理
 ( 1S ×60count≒1min   1分毎の処理 )
 ( 1min×60count≒1Hr   1時間毎の処理 )

  各カウンタは上記カウント値をセットして割込毎にデクリメントします
  カウント値が 0になったタイミングで処理を行えば一定時間毎に実行されます

(2)フォアグランドとバックグランド

  タイマー割込処理の中で行う処理をバックグランドとします
  時間に制約される処理(リアルタイム処理)を行います

  タイマー割込処理以外での処理をフォアグランドとします
  時間に制約されない処理を行います
  ここでは、実行に時間がかかる処理(主にモニター機能)を実行します
PageTop

 2.CCP、PWMの設定
(1)初期設定、周波数設定

(2)デューティ比設定
PageTop

 3.A/Dコンバータ
(1)初期設定

(2)A/D変換、平均化

(3)電圧判定
PageTop

 4.リレー駆動
  リレーは動作電圧電流とも大きいのでトランジスタを介して駆動します
  正論理で出力します
  今回、小型の筐体に密閉状態で押し込みましたので、温度上昇を抑えるため
  極力消費電力を減らす対策をしました

  具体的には、リレー駆動時には正規の電圧(12V)を加えて駆動して、
  可動鉄片が吸着してからは、保持に必要な電流に減らす方法です
 (一般には大型のリレーやコンタクターに用いられる方法です)

(1)ディレーロジック

  リレー駆動開始から一定時間(このリレーでは 50mS以上)を生成します
  20mS毎の割込みタイミングでカウンタをデクリメントして 0になった時
  フラグをセットします

(2)簡易PWM

  CCPユニットのPWM機能は精度の必要な CPLT信号生成で使っていますので
  416uSの割込みタイミングでカウンタをデクリメントして生成します

  具体的には、416uSの間 ONにして、416uS*2=832uSの間 OFFにします
  これで、周期:1.25mS(周波数:800Hz)、デューティ比:33%の PWMとなります

(3)駆動の切換

  リレー駆動開始からディレー時間内は駆動信号を完全に ONします
  ディレー時間後は、簡易PWM動作に切り替えて電圧を 1/3にします
  電圧を 1/3にすると電力は 1/9になり、リレーはほとんど発熱しなくなりました

PageTop

 5.LED駆動
  今回、パソコンを接続できる様にしていますが、これはデバッグや設定のためで
  通常の使用時には 1個のLEDで動作状態を表示する様にしました
  LEDの電流は少ないので CPUのポートで直接駆動しますが
  駆動能力の大きなシンク(吸込)側で駆動する様にアノード側を+5Vに接続しました
  そのため点滅は負論理になります

(1)点滅パターンのデータ

  動作状態は LEDの点滅パターンで表示します
  点滅パターンは次のフォーマットで EEPROMに書き込んでおきます(変更可能です)

  状態毎の 周期=T*20mS、点灯時間=D*20mS を設定します  T,D:1BYTE(0〜255)
  例えば、T=50, D=25の場合 周期1秒で0.5秒点灯を繰り返します

  状態      点滅パターン(イメージ)               周期
                                    デューティ
  スタンバイ   ■____________________________________■____________(2秒 1%)

  EV接続     ■■■■■■■■■■__________________■■■■■■■(1秒50%)

  通電(充電)   ■■■■■■■■■■■■■■■■■■■■■■■■■■(連続点灯)

  通電(換気充電) ■■■■■■■■■■■■■■■■■____■■■■■■■(1秒90%)

  異常      ■■____■■____■■____■■____■■____■■____■■(0.2秒50%)

(2)点滅パターン制御ロジック

  動作状態が変わる毎に、対応した EEPROMアドレスから点滅パターンのデータを
  取り出して点灯パターンの周期カウンタ、点灯カウンタにセットします
  20mS毎の割込みタイミングでカウンタをデクリメントして 0になった時
  点灯・消灯を行います

PageTop

 6.ソフトUARTの動作
(1)1文字送信
  送信の場合は、416uS毎の割込みで 8カウント毎に 1bitを生成し
   1bitを 10(start:1+data:8+stop:1)カウントして 1文字を生成・送出します

(2)1文字受信
  受信の場合は、送信の場合と基本的には同じですが
  歩調同期の動作として、416uS毎の割込みで常時スタートビットのエッジ検出をします
  スタートビットのエッジが検出されたら、スタートビットの中央でサンプリング
  するため、1/2bit時間(4カウント)後を基準とします
  その後は、8カウント毎に 1bitづつ取り込んで行き 1文字(8bit)取り込んだ後、
  ストップビットを確認して受信完了とします

(3)エラー処理
  フレーミングエラー
  前述のストップビットを確認したタイミングで信号が Hiの場合は OK
  Loの場合は、ストップビットを確認できないため「フレーミングエラー」です

  オーバーランエラー
  受信タスクが受信完了した時点で、まだ受信完了フラグが立っていたら
  「オーバーランエラー」とします(受信バッファは1個だけです)
  モニタタスクが受信データを取り出した時、受信完了フラグを降ろします

PageTop

 7.簡易モニター
(1)文字列(1行)入力

  受信完了フラグが立ったら受信バッファから文字列バッファに移す
  CR($0D)なら1行入力完了、コマンド解析へ、それ以外は次の文字を取込むため
  文字列バッファのポインタをインクリメントしてバッファフルをチェック

(2)コマンド解析

  文字列バッファの先頭文字をチェック、それぞれのコマンド処理ルーチンへ
  コマンド以外の場合は「?」を送出してコマンド待ちへ

(3)コマンドフォーマット
  処理	コマンド	内容
  ルーチン	フォーマット
  HELP_	"?"[CR]  	HELP Command
  DS_EEP	"E"[CR]  	EEPROM Display Command
  DUMP_	"D"[CR]  	EEPROM Dump Command
  DS_EE1	"aa"[CR]	EEPROM One data Display
  ST_EE1	"aadd"[CR]	EEPROM One data Set (EEPROM Load Command兼用)

  DS_RAM	"R"[CR]  	RAM Dump Command
  DS_RM1	"Raa"[CR] 	RAM data Display

  関連するサブルーチンと処理内容
  EEPRD_	EEPROM Data ReaD  address:(WEEPAD),data:(WEEPDT)
  EEPWR_	EEPROM Data Write address:(WEEPAD),data:(WEEPDT)
  CHKHEX	C:0 Nomal return,  C:1 Error return
  DMPTTL	Dump title
		'  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F'[CR]
  CTRLC2	Cancel return(abort)
  RXDTS_	Receve Data Strings
  TXDT1_	(W) --> Transmit 1 Chara
  TXHEX2	(W) --> 2 ASCII(HEX)  &  Transmit
  TXHEXL	(W)Lo Nibble --> ASCII(HEX)  &  Transmit
		 W(xxxxHHHH) --> "0"..."9","A"..."F"
  TX_DOT	Transmit "."
  TX_SPA	Transmit " "
  CR_LF_	Transmit [CR][LF]

  コメントアウトしてあるサブルーチン
*** B2_BCD	Binary to Hexadecimal conversion
*** BCD_B2	Hexadecimal to Binary conversion

PageTop

 8.ソースリスト

EVSE040.zip (85kB) の ダウンロード

EVSE040.lzh には以下のファイルが含まれています
  evse_01.asm
  evse_01.lst
  evse_01.HEX
  P12F683.INC
  EVSE683.MCP
  TERATERM.INI




 ↑ PageTop





inserted by FC2 system