• 検索結果がありません。

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

N/A
N/A
Protected

Academic year: 2021

シェア "1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A"

Copied!
18
0
0

読み込み中.... (全文を見る)

全文

(1)

1 STM32L_ADC の説明 V003 2014/03/30

STM32L-Discovery の A/D 入力を行うプログラムです。 A/D CH0 ~ A/D CH3 の 4 本の入力が可能です。 提供する PC のアプリケーション Access_SerialPort を使用して UART(非同期シリアル通信)により、A/D 入力の表示を 行うことができます。

無料の開発ツール Atollic TrueSTUDIO for ARM Lite (試用版) で作成したプロジェクトです。 プログラムの開始番地は 0x08000000 です。デバッグが可能です。

目次

1. A/D 入力について ... 2 2. A/D 入力に使用する信号 ... 2 3. UART に使用する信号 ... 3 4. プログラム実行時の動作と確認 ... 5 4.1. 実行時の動作 ... 5 4.2. 動作確認 ... 5 1) Access_SerialPort アプリケーションの起動画面 ... 5 2) COM ポートと通信速度の選択 ... 6 3) A/D データ入力コマンド ... 8 4) ADC Input CH0 コマンド送信時の動作 ... 8

5) ADC Input ALL コマンド送信時の動作 ... 9

6) ADC Input STOP コマンド送信時の動作 ... 9

5. プロジェクトの構成 ... 10 5.1. 独自に追加したソースフォルダ ... 10 5.2. ソースフォルダ src のファイル... 11 6. 主なモジュールの説明 ... 11 6.1. HandleADC ... 11 1) ADC の初期化 ... 11 2) A/D 入力開始 ... 11 3) A/D 入力データの移動平均処理 ... 12 4) 移動平均について ... 12 6.2. HandleTIM ... 13 6.3. HandleUART ... 13 6.4. main.c ... 14 6.5. UserPrograms ... 14 6.6. CommunicateHOST ... 15

(2)

2 1. A/D 入力について 分解能 12bit の A/D コンバータ入力です。 A/D 入力電圧 と ディジタル値 との対応は理論上、 入力電圧 0V : 0 入力電圧 +3V : 4095 です。 実際はオフセットと傾きがあり、ぴったり この数値にはなりません。 2. A/D 入力に使用する信号

STM32L_ADC プロジェクトにおける STM32L-Discovery の A/D 入力に使用する信号は A/D_CH0 ~ A/D_CH3 の 4 本です。

以下に、A/D 信号表を示します。 A/D 信号表

ピン番号 信号名 CPU 機能名 CPU 信号名 STM32L-Discovery

コネクタピン番号

1 A/D_CH0 ADC_IN10 PC0 P1-11

2 A/D_CH1 ADC_IN11 PC1 P1-12

3 A/D_CH2 ADC_IN12 PC2 P1-13

(3)

3 3. UART に使用する信号 STM32L-Discovery の UART(非同期シリアル通信)に使用する信号と接続相手との接続は以下の通りです。 1) UART1 接続信号表 STM32L-Discovery の UART 信号 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の 信号名 D-SUB 9S ストレート接続 1 USART1_TX PA9 P2-22 --- > RxD 2 2 USART1_RX PA10 P2-21 < --- TxD 3 3 GND GND P1-2, P1-9, P1-28 P2-2, P2-5, P2-28 < --- > GND 5 2) RS232C ドライバ接続例 この例では DSUB-9S には TxD, RxD, GND の3本の信号以外は接続されません。

(4)

4 3) PC との接続例 PC との接続は以下のようになります。 RS232C ドライバと DSUB-9S との接続は以下の通りです。 RS232C ドライバ DSUB-9S 1 RS1_TxD --- > 2 RxD 2 RS1_RxD < --- 3 TxD 3 GND < --- > 5 GND RS232C ドライバ D S U B -9S PC RS232C 変換ケーブル STM32L-Discovery 図3. 3)

(5)

5 4. プログラム実行時の動作と確認

4.1. 実行時の動作

1) プログラムを実行すると基板上の LED LD3(緑)が 1 秒点灯、2 秒消灯 で点滅します。 2) UART1 ポートで A/D 入力コマンドを受信すると指定された A/D の CH の A/D 値を出力します。

4.2. 動作確認

UART(非同期シリアル通信)のツール Access_SerialPort アプリケーションを使用して、CPU 基板が送出する A/D 入力値を表示することができます。

1) Access_SerialPort アプリケーションの起動画面

(6)

6 2) COM ポートと通信速度の選択

COM 選択の ComboBox で COM を選択します。

確認のメッセージが表示されるので、よい場合は [はい(Y)] ボタンをクリックします。

(7)

7

この例では、”COM4 に設定しました。” とメッセージが表示されています。 通信速度は 9600bps でよいのでこのままにしておきます。

(8)

8 3) A/D データ入力コマンド

A/D 入力コマンドには以下の8種類があります。 a) ADC Input STOP : A/D データ送信停止 b) ADC Input CH0 : A/D CH0 データ送信 c) ADC Input CH1 : A/D CH1 データ送信 d) ADC Input CH2 : A/D CH2 データ送信 e) ADC Input CH3 : A/D CH3 データ送信 f) ADC Input ALL : A/D 全 CH データ送信

コマンドを送信すると、CPU 基板はコマンドに応じて動作します。

コマンド以外の文字列を送信すると、文字列がそのままエコーバックされます。

4) ADC Input CH0 コマンド送信時の動作

CPU 基板は 0.5 秒に一回 A/D CH0 の A/D データを送信します。

(9)

9 5) ADC Input ALL コマンド送信時の動作

CPU 基板は 0.5 秒に一回 A/D CH0 ~ A/D CH3 の 4CH の A/D データを送信します。 6) ADC Input STOP コマンド送信時の動作

(10)

10 5. プロジェクトの構成 プロジェクトを開いて、左側のプロジェクト・エクスプローラーを開いた状態です。 5.1. 独自に追加したソースフォルダ 独自に追加したソースフォルダについて簡単に説明します。 1) CommonModules 共通処理を記述しています。 2) CommunicateHOST UART の通信処理を記述しています。A/D 入力のコマンドを受信して処理を行います。 3) Handles Peripheral の設定などを行っています。 a) HandleTIM.h HandleTIM.c タイマ割り込みを使用するために、タイマの初期設定を記述しています。 b) HandleUART.h HandleUART.c UART の初期設定と送受信の処理を記述しています。 c) HandleADC.h HandleADC.c A/D の初期化と A/D 入力の処理を記述しています。 4) UserPrograms

(11)

11 5.2. ソースフォルダ src のファイル

フォルダ src の中の特に重要なファイルについて説明します。 1) main.c

main モジュールが記述されています。プログラムはここから開始します。

I/O と A/D の初期設定と UART による送受信モジュールの呼び出しを記述しています。 2) stm32f4xx_it.c

Timer2 割り込みと UART 割り込み および A/D の割り込み処理を記述しています。

6. 主なモジュールの説明 6.1. HandleADC 1) ADC の初期化

ADC の初期化を行います。 //Initialize A/D Converter void InitializeADC(void); 2) A/D 入力開始 指定されたA/D CHの入力を開始します。 //--- // A/D入力開始 //--- //引数 :

// int8_t int8_CH : A/D CHの指定

//--- void StartAD(int8_t int8_CH);

(12)

12 3) A/D 入力データの移動平均処理 A/D 入力データに対して各 CH ごとに移動平均処理を行います。 //--- // A/D入力データの移動平均処理 //--- void MovingAverageADC(void); 4) 移動平均について データ 8 個の移動平均について説明します。 データ 8 個の平均を新しいデータが入力される毎に 1 データずつ、ずらして平均していきます。 平均するデータが移動していくので移動平均と呼びます。以下にその様子を示します。 移動平均は上の図のようにでこぼこしたデータを滑らかにする効果があります。平均する個数を多くするほど 滑らかになりますが、応答が遅くなります。短い時間での変化が見えなくなってしまいます。 また、平均する個数を多くするほどグラフの形が後ろにずれていきます。 //--- // A/D入力データの移動平均処理 //--- void MovingAverageADC(void); の処理では、移動平均の個数を 32 個に設定しています。

ヘッダファイル HandleADC.h のなかで #define defNumbersAverage 32 を定義しています。 この定義を変更すると、移動平均の個数を変更できます。

Data0 ~ Data7 の平均値

Data2 ~ Data9 の平均値

Data3 ~ Data10 の平均値

Data4 ~ Data11 の平均値

Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Data9 Data10 Data11

(13)

13 6.2. HandleTIM 1) Timer2 初期化 //--- //Timer2初期化 //--- //引数 :

// uint16_t uint16_TIM_Pulse1 : Timer2 CH1 インターバル // uint16_t uint16_TIM_Pulse2 : Timer2 CH2 インターバル // uint16_t uint16_TIM_Pulse3 : Timer2 CH3 インターバル // uint16_t uint16_TIM_Pulse4 : Timer2 CH4 インターバル

//--- void InitializeTimer2(uint16_t uint16_TIM_Pulse1, uint16_t uint16_TIM_Pulse2,

uint16_t uint16_TIM_Pulse3, uint16_t uint16_TIM_Pulse4);

2) Timer2 割り込み禁止 //Timer2割り込み禁止 void DisableIrqTim2(void); 3) Timer2 割り込み許可 //Timer2割り込み許可 void EnableIrqTim2(void); 6.3. HandleUART 1) UART の初期化 //UART1初期化

(14)

14 6.4. main.c 1) 使用するクロックの初期化 void RCC_Configuration(void); 2) I/O の初期化 void Init_GPIOs(void); 6.5. UserPrograms 1) LED に使用する I/O の初期化 // Status LEDポート初期化 void InitializePortStatusLED(void); // Action LEDポート初期化 void InitializePortActionLED(void); 2) StatusLED の点滅 点滅一回の処理 // Status LED点滅

(15)

15 6.6. CommunicateHOST 1) UART の初期化 //--- // HOST通信パラメータ初期化 //--- //引数 : // uint32_t uint32_BaudRate : 通信速度 //--- void InitializeCommunicateHOST(uint32_t uint32_BaudRate);

2) HOST 通信処理 受信処理を行い、受信コマンドを処理して応答データを送信します。 //--- // HOST通信処理 //--- //戻り値 : // -1 : 処理中 // 0 : 終了 //--- int16_t CommunicateHOST(void) 3) UART 送信 設定された送信データを送信します。 //---//UART 送信処理 //---//引数 : // uint16_t uint16_Length : 送信データ数 //戻り値 : // 0 : 送信終了 // 1 : エラー //---void SendUART(uint16_t uint16_Length);

(16)

16 4) UART 受信 受信の有無をチェックして、受信があったら受信データを受信 Buffer に格納して受信データ数を返します。 //---// UART 受信処理 //---//引数 :

// uint8_t *puint8_ReceiveBuffer : 受信データを格納するBufferのポインタ //戻り値 :

// -1 : 受信なし // 0 : 受信なし // 1以上 : 受信byte数

//---int16_t ReceiveUART(uint8_t *puint8_ReceiveBuffer);

5) HOST コマンドの実行 受信コマンドを判定してそれぞれの処理モジュールを呼び出します。 //--- // HOSTコマンドを実行する。 //--- //引数 : // uint16_t uint16_ReceiveLength : 受信データ数

// uint8_t *puint8_ReceiveData : 受信データが格納されているBufferのポインタ // uint8_t *puint8_SendData : 応答送信データを格納するBufferのポインタ //戻り値 : 応答送信データ数

//--- uint16_t ExecuteCommandHOST(uint16_t uint16_ReceiveLength, uint8_t *puint8_ReceiveData,

(17)

17 6) A/D 入力処理 //--- // A/D入力コマンド処理 //--- //引数 : // uint16_t uint16_DataLength : パラメータのデータ数 // uint8_t *puint8_Parameter : A/D入力パラメータのポインタ // "CH0" ~ "CH5" : 単独CHのA/D入力開始 // "ALL" : 6CH全てのA/D入力開始 // "STOP" : A/D入力の停止

// uint8_t *puint8_SendData : 応答データを格納するBufferのポインタ //戻り値 : 応答送信データ数

//---

uint16_t ComActInputADC(uint16_t uint16_DataLength, uint8_t *puint8_Parameter, uint8_t *puint8_SendData);

// Command : "ADC Input [Parameter]"

の [Parameter] の部分を判定して、A/D データの送信を決定する。

//--- // パラメータを判定してA/Dデータ送信状態フラグをセット

//--- //volatile int16_t GLB_intCommunicateADC = -1; // A/Dデータ送信状態フラグ //--- [Parameter] // -1 : A/D送信停止 "STOP" // 0 : A/D CH0データ送信 "CH0" // 1 : A/D CH1データ送信 "CH1" // 2 : A/D CH2データ送信 "CH2" // 3 : A/D CH3データ送信 "CH3" // 4 : A/D CH4データ送信 "CH4" : STM32L-Discoveryはなし // 5 : A/D CH5データ送信 "CH5" : STM32L-Discoveryはなし // 6 : A/D 全CHデータ送信 "ALL" //---

(18)

18 改訂履歴

V001 2014/02/25 初版

V002 2014/02/25 1. A/D について 入力電圧値を訂正 V003 2014/03/30 説明追加

参照

関連したドキュメント

機器名称 相 銘板容量(kW) 入力換算 入力容量(kW) 台数 現在の契約電力.

直流電圧に重畳した交流電圧では、交流電圧のみの実効値を測定する ACV-Ach ファンクショ

サンプル 入力列 A、B、C、D のいずれかに指定した値「東京」が含まれている場合、「含む判定」フラグに True を

パキロビッドパックを処方入力の上、 F8特殊指示 →「(治)」 の列に 「1:する」 を入力して F9更新 を押下してください。.. 備考欄に「治」と登録されます。

ダウンロードした書類は、 「MSP ゴシック、11ポイント」で記入で きるようになっています。字数制限がある書類は枠を広げず入力してく

・カメラには、日付 / 時刻などの設定を保持するためのリチ ウム充電池が内蔵されています。カメラにバッテリーを入

・電源投入直後の MPIO は出力状態に設定されているため全ての S/PDIF 信号を入力する前に MPSEL レジスタで MPIO を入力状態に設定する必要がある。MPSEL

接続対象計画差対応補給電力量は,30分ごとの接続対象電力量がその 30分における接続対象計画電力量を上回る場合に,30分ごとに,次の式