pwmtri-s.world.coocan.jp/.../explain_stm32l_pwm.pdf2 1. pwm出力について pwm(pulse width...

16
1 STM32L_PWM の説明 V002 2014/03/30 STM32L-Discovery の PWM 出力を行うプログラムです。 PWM CH1 ~ PWM CH4 の 4 本の出力が可能です。 提供する PC アプリケーションの Access_SerialPort を使用して UART(非同期シリアル通信)により、PWM の周期と High の 期間を設定して試験することができます。 無料の開発ツール Atollic TrueSTUDIO for ARM Lite (試用版) で作成したプロジェクトです。 プログラムの開始番地は 0x08000000 です。デバッグが可能です。 目次 1. PWM 出力について......................................................................................................................................................................................................................................... 2 2. PWM 出力に使用する信号 ......................................................................................................................................................................................................................... 2 3. UART に使用する信号.................................................................................................................................................................................................................................. 3 4. プログラム実行時の動作と確認............................................................................................................................................................................................................... 5 4.1. 実行時の動作 ........................................................................................................................................................................................................................................ 5 4.2. 動作確認.................................................................................................................................................................................................................................................. 5 1) Access_SerialPort アプリケーションの起動画面.................................................................................................................................................................... 5 2) COM ポートと通信速度の選択 ......................................................................................................................................................................................................... 6 3) PWM 周期の設定................................................................................................................................................................................................................................... 7 4) PWM 出力の設定................................................................................................................................................................................................................................... 9 5. プロジェクトの構成.........................................................................................................................................................................................................................................10 5.1. 独自に追加したソースフォルダ.................................................................................................................................................................................................10 5.2. ソースフォルダ src のファイル...................................................................................................................................................................................................11 6. 主なモジュールの説明..............................................................................................................................................................................................................................11 6.1. HandlePWM...........................................................................................................................................................................................................................................11 6.2. HandleTIM..............................................................................................................................................................................................................................................12 6.3. HandleUART.........................................................................................................................................................................................................................................12 6.4. main.c........................................................................................................................................................................................................................................................13 6.5. UserPrograms.....................................................................................................................................................................................................................................13 6.6. CommunicateHOST..........................................................................................................................................................................................................................14

Upload: others

Post on 10-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

1

STM32L_PWMの説明 V002 2014/03/30

STM32L-Discoveryの PWM出力を行うプログラムです。 PWM CH1 ~ PWM CH4 の 4本の出力が可能です。

提供するPCアプリケーションのAccess_SerialPortを使用して UART(非同期シリアル通信)により、PWMの周期と Highの

期間を設定して試験することができます。

無料の開発ツール Atollic TrueSTUDIO for ARM Lite (試用版) で作成したプロジェクトです。

プログラムの開始番地は 0x08000000 です。デバッグが可能です。

目次

1. PWM出力について ......................................................................................................................................................................................................................................... 2

2. PWM出力に使用する信号 ......................................................................................................................................................................................................................... 2

3. UARTに使用する信号 .................................................................................................................................................................................................................................. 3

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

4.1. 実行時の動作 ........................................................................................................................................................................................................................................ 5

4.2. 動作確認 .................................................................................................................................................................................................................................................. 5

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

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

3) PWM周期の設定 ................................................................................................................................................................................................................................... 7

4) PWM出力の設定 ................................................................................................................................................................................................................................... 9

5. プロジェクトの構成 ......................................................................................................................................................................................................................................... 10

5.1. 独自に追加したソースフォルダ ................................................................................................................................................................................................. 10

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

6. 主なモジュールの説明 .............................................................................................................................................................................................................................. 11

6.1. HandlePWM........................................................................................................................................................................................................................................... 11

6.2. HandleTIM .............................................................................................................................................................................................................................................. 12

6.3. HandleUART ......................................................................................................................................................................................................................................... 12

6.4. main.c ........................................................................................................................................................................................................................................................ 13

6.5. UserPrograms ..................................................................................................................................................................................................................................... 13

6.6. CommunicateHOST .......................................................................................................................................................................................................................... 14

2

1. PWM出力について

PWM(Pulse Width Modulation)は信号出力の周期を設定してその周期の範囲でどのくらいの比率の Highパルスを

出力するかを制御するインターフェースです。

例えば、周期が10mSecで、2mSecの Highパルスを出力するというような設定をします。

2. PWM出力に使用する信号

STM32L-Discoveryの PWM出力に使用する信号は以下の PWM_CH1 ~ PWM_CH4の 4本です。

PWM信号表

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

コネクタピン番号

1 PWM_CH1 TIM3_CH1 PC6 P2-27

2 PWM_CH2 TIM3_CH2 PC7 P2-26

3 PWM_CH3 TIM3_CH3 PC8 P2-25

4 PWM_CH4 TIM3_CH4 PC9 P2-24

10mSec

2mSec

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

3) PCとの接続例

PCとの接続は以下のようになります。

RS232C ドライバとDSUB-9Sとの接続は以下の通りです。

RS232C ドライバ DSUB-9S

1 RS1_TxD --- > 2 RxD

2 RS1_RxD < --- 3 TxD

3 GND < --- > 5 GND

RS232C

ドライバ DSUB-9S

PC

RS232C変換ケーブル

STM32L-Discovery

図3. 3)

5

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

4.1. 実行時の動作

1) プログラムを実行すると基板上の LED LD3(緑)が 1秒点灯、2秒消灯 で点滅します。

2) UARTポートで PWM周期設定コマンドを受信すると指定された周期の値を PWMにセットします。

3) UARTポートで PWM出力コマンドを受信すると、指定されたHighの期間の値をPWMにセットします。

4.2. 動作確認

UART(非同期シリアル通信)のツール Access_SerialPortアプリケーションを使用して、CPU基板にPWMの設定を

行うことができます。

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

Access_SerialPortアプリケーションを起動すると以下のダイアログが表示されます。

6

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

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

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

次ページに続く

7

この例では、”COM4に設定しました。” とメッセージが表示されています。

通信速度は 9600bpsでよいのでこのままにしておきます。

3) PWM周期の設定

PWM周期は PWM_CH1 ~ PWM_CH4 の 4本に共通です。

STM32L_PWMプログラムでは 設定値 X と周期の関係は以下の式のようになります。

周期 = 1MHz / X

代表的な値を以下に示します。

X = 10 : 1MHz / 10 = 100KHz ― 周期 10uSec

X = 100 : 1MHz / 100 = 10KHz ― 周期 100uSec

X = 1000 : 1MHz / 1000 = 1KHz ― 周期 1mSec

X = 10000 : 1MHz / 10000 = 100Hz ― 周期 10mSec

次ページに続く

8

PWM周期設定のコマンドは “PWM Period [周期の値]” です。

この例では “PWM Period 1000” を送信データに入力して [送信] ボタンをクリックしました。

コマンドが正常に受け付けられた場合、CPU基板から応答データが “PWM Period OK” と返信されます。

次ページに続く

9

4) PWM出力の設定

PWM周期に設定した値の範囲内で、信号が Highの期間を設定します。

PWM周期に 1000 を設定して、PWM出力に 100 を設定した場合、周期が 10mSec でHighの期間は 1mSec に

なります。

PWM出力コマンドは “PWM Output CH[CH番号] [Highの期間の値]” です。

この例の場合、 “PWM Output CH1 100” を送信しています。 PWM_CH1 に対して 100 を設定しています。

コマンドが正常に受け付けられると、CPU基板から応答データ “PWM Output CHx OK” が返信されます。

(CHx の x はCH番号)

この例では、“PWM Output CH1 OK” が表示されています。

PWM出力に 0 を設定すると信号は Low固定になります。

PWM出力に周期設定値(この例では 1000)を設定すると信号は High 固定になります。

10

5. プロジェクトの構成

プロジェクトを開いて、左側のプロジェクト・エクスプローラーを開いた状態です。

5.1. 独自に追加したソースフォルダ

独自に追加したソースフォルダについて簡単に説明します。

1) CommonModules

共通処理を記述しています。

2) CommunicateHOST

UARTの通信処理を記述しています。PWM周期設定と PWM出力のコマンドを受信して処理を行います。

3) Handles

Peripheralの設定などを行っています。

a) HandleTIM.h HandleTIM.c

タイマ割り込みを使用するために、タイマの初期設定を記述しています。

b) HandleUART.h HandleUART.c

UARTの初期設定を記述しています。

c) HandlePWM.h HandlePWM.c

PWMの初期化と PWM周期の設定、PWM出力の処理を記述しています。

4) UserPrograms

Status LED に使用している I/O の初期設定と点滅処理を記述しています。

11

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

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

1) main.c

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

I/O と PWMの初期設定とUARTの送受信モジュールの呼び出しを記述しています。

2) stm32f4xx_it.c

割り込み処理を記述するファイルです。

このプロジェクトでは、Timer2割り込みと UART2の割り込み処理を記述しています。

6. 主なモジュールの説明

6.1. HandlePWM

1) PWMの初期化

PWMの初期化を行います。

//-----------------------------------------------------------------

// PWM初期化

//-----------------------------------------------------------------

void InitializePWM(void);

2) PWM周期の設定

//-----------------------------------------------------------------

//PWM周期設定

//-----------------------------------------------------------------

// 10MHz / 10 = 100kHz : Period 10uSec

// 10MHz / 100 = 10kHz : Period 100uSec

// 10MHz / 1000 = 1kHz : Period 1mSec

// 10MHz / 10000 = 100Hz : Period 10mSec

//-----------------------------------------------------------------

//引数 :

// uint16_t uint16_Period : 周期

//-----------------------------------------------------------------

void SetPeriodPWM(uint16_t uint16_Period);

12

3) PWM出力の設定

//-----------------------------------------------------------------

//PWM出力

//-----------------------------------------------------------------

//引数 :

// uint8_t uint8_CH : PWMのチャンネル : CH1 - CH4

// uint16_t uint16_PulseWidth : 信号をHighにする期間

//戻り値 :

// 0 : OK

// 0以外 : NG

//-----------------------------------------------------------------

int16_t OutputPWM(uint8_t uint8_CH, uint16_t uint16_PulseWidth);

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(__IO uint16_t uint16_TIM_Pulse1, __IO uint16_t uint16_TIM_Pulse2,

__IO uint16_t uint16_TIM_Pulse3, __IO uint16_t uint16_TIM_Pulse4);

2) Timer2割り込み禁止

//Timer2割り込み禁止

void DisableIrqTim2(void);

3) Timer2割り込み許可

//Timer2割り込み許可

void EnableIrqTim2(void);

6.3. HandleUART

1) UARTの初期化

// UART1初期化

void InitializeUART1(uint32_t uint32_BaudRate);

13

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);

2) StatusLEDの点滅

点滅一回の処理

//----------------------------------------------------------------

// Status LED点滅 : 点灯/消灯 切り替え

//----------------------------------------------------------------

// Timer2割り込み内でGLB_uint16_BlinkTimerStatusLEDをデクリメントする。

// GLB_uint16_BlinkTimerStatusLEDが0になった時、呼び出される。

//----------------------------------------------------------------

// 点灯/消灯 を切り替えると同時に 点灯時間/消灯時間 をセットする。

//----------------------------------------------------------------

//引数 :

// uint16_t uint16_TimeON : 点灯時間

// uint16_t uint16_TimeOFF : 消灯時間

//----------------------------------------------------------------

void BlinkStatusLED(uint16_t uint16_TimeON, uint16_t uint16_TimeOFF);

14

6.6. CommunicateHOST

1) HOST通信パラメータの初期化

//-----------------------------------------------------------

// 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_SendLength : 送信データ数

// uint8_t *puint8_Data : 送信データのポインタ

//--------------------------------------------------------------------

void SendUART(uint16_t uint16_SendLength)

4) UART受信処理

//--------------------------------------------------------------------

// UART受信処理

//--------------------------------------------------------------------

//引数 :

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

//戻り値 :

// -1 : 受信なし

// 0 : Error

// 1以上 : 受信byte数

//--------------------------------------------------------------------

int16_t ReceiveUART(uint8_t *puint8_ReceiveBuffer)

15

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,

uint8_t *puint8_SendData);

4) PWM周期設定

//---------------------------------------------------------------------

// PWM周期設定

//---------------------------------------------------------------------

//引数 :

// uint16_t uint16_DataLength : PWM周期データのデータ数

// uint8_t *puint8_Period : PWM周期データのポインタ

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

//戻り値 : 応答送信データ数

//---------------------------------------------------------------------

uint16_t ComActSetPeriodPWM(uint16_t uint16_DataLength, uint8_t *puint8_Period,

uint8_t *puint8_SendData);

5) PWM出力

//----------------------------------------------------------------------------------------

// PWM出力

//----------------------------------------------------------------------------------------

//引数 :

// uint16_t uint16_DataLength : PWM出力データのデータ数

// uint8_t *puint8_Width : PWM出力データのポインタ : "[CH番号(1byte)] [Width(1 ~ 5 byte)]"

// uint8_t *puint8_SendData : 応答データを格納するBufferのポインタ

//戻り値 : 応答送信データ数

//----------------------------------------------------------------------------------------

uint16_t ComActOutputPWM(uint16_t uint16_DataLength, uint8_t *puint8_Width, uint8_t *puint8_SendData);

16

改訂履歴

V001 2014/03/03 初版

V002 2014/03/30 説明追加