STM32ADC
名称
高機能アナログ - デジタル変換(ADC)ライブラリ
/icons/hr.icon
概要
アナログ - デジタル変換(ADC)クラスライブラリ(以降ADCクラスライブラリと呼称)は、
STM32マイコンに標準搭載されているADCを利用・制御するためのクラスライブラリです。
DMAを使ったサンプリング等の高度な機能を統合的にサポートします。
(注意)
2019/05/24 現在、
ライブラリソースの \libraries\STM32ADC\src\utility\util_adc.c のファイル名を
\libraries\STM32ADC\src\utility\util_adc.cppに変更しないと、同ファイル内の関数のリンクに失敗します。
これは、C++言語からC言語関数のリンクのシンボル名の実装が異なるためです。
この対処方法は、明示的に拡張子をcppに変更することで、C++言語でのシンボル名を持たせるようにしています。
ライブラリリファレンス
/icons/hr.icon
STM32ADCクラス class STM32ADC
メンバー関数(メソッド)
■ コンストラクタ
書式
STM32ADC (adc_dev * dev)
引数
dev :ADCデバイスへの参照ポインタ
説明
指定したADCデバイスを初期化し、利用可能状態にします。
devにはADC1、ADC2、またはADC3を指定します。
■ ADCサンプリングレートの設定
書式
void setSampleRate(adc_smp_rate SampleRate)
引数
SampleRate :ADCサンプリングレート
戻り値
なし
説明
ADCのサンプリングレートを設定します。SampleRateは adc_smp_rate enum列挙型であり、
次のADCクロックサイクルでのADCサンプル時間の指定が可能です。
ADC_SMPR_1_5 1.5 ADC cycles
ADC_SMPR_7_5 7.5 ADC cycles
ADC_SMPR_13_5 13.5 ADC cycles
ADC_SMPR_28_5 28.5 ADC cycles
ADC_SMPR_41_5 41.5 ADC cycles
ADC_SMPR_55_5 55.5 ADC cycles
ADC_SMPR_71_5 71.5 ADC cycles
ADC_SMPR_239_5 239.5 ADC cycles
デフォルトでは、ADC_SMPR_55_5が設定されています。
ADC CLKはデフォルトでは、PCLK2(APB2)の1/6のクロックが設定されています。
(起動時のboardセットアップ内でadc_set_prescaler(ADC_PRE_PCLK2_DIV_6)を実行して設定)
APB2はシステムクロックが設定されています。システムクロックが72MHzの場合はADC CLKは12MHz、
デフォルトADCサンプリング周期は4.625μ秒となります。
■ ADC変換割り込み関数のアタッチ
書式
void attachInterrupt(voidFuncPtr func, uint8 interrupt)
引数
func :割り込み関数
interrupt :割り込み番号
戻り値
なし
説明
ADC変換の割り込み関数の登録を行います。
interruptには次の値が設定可能です。
ADC_EOC レギュラグループの変換終了
ADC_AWD アナログウォッチドッグイベント
ADC_JEOC インジェクトグループの変換終了
■ オートキャリブレーション(自動較正)の実行
書式
void calibrate()
引数
なし
戻り値
なし
説明
この自動較正では内部の複数のキャパシタのばらつきによる誤差を大幅に低減することができます。
較正時に誤差の補正値(デジタル値) が個々のキャパシタに対して計算され、変換動作時にこの補正値を利用することで
キャパシタによる誤差を取り除きます。パワー・オン後に一度、ADC の較正を行うことが推奨されます。
■ DMA利用設定
書式
void setDMA(uint16 * Buf, uint16 BufLen, uint32 dmaFlags, voidFuncPtr func)
引数
Buf :データ転送先バッファ
BufLen :転送サイズ
dmaFlags :DMA転送設定フラグ
func :DMA割り込み時呼び出し関数
戻り値
なし
説明
ADCでのDMA利用のための設定を行います。
DMA転送設定フラグ dmaFlags には次の項目をOR指定できます。
DMA_MEM_2_MEM メモリ間転送モード
DMA_MINC_MODE メモリインクリメントモード
DMA_PINC_MODE ペリフェラルインクリメントモード
DMA_CIRC_MODE サーキュラモード
DMA_FROM_MEM メモリからペリフェラルへの読み出し
DMA_TRNS_ERR 転送エラー割り込み
DMA_HALF_TRNS 1/2 転送終了割り込み
DMA_TRNS_CMPLT 転送完了時に割り込み
■ デュアルモードDMA利用設定
書式
void setDualDMA(uint32 * Buf, uint16 BufLen, uint32 Flags)
引数
Buf :データ転送先バッファ
BufLen :転送サイズ
dmaFlags :DMA転送設定フラグ
戻り値
なし
説明
AデュアルモードのADCでのDMA利用のための設定を行います。
DMA転送設定フラグ dmaFlags には次の項目をOR指定できます。
DMA_MEM_2_MEM メモリ間転送モード
DMA_MINC_MODE メモリインクリメントモード
DMA_PINC_MODE ペリフェラルインクリメントモード
DMA_CIRC_MODE サーキュラモード
DMA_FROM_MEM メモリからペリフェラルへの読み出し
DMA_TRNS_ERR 転送エラー割り込み
DMA_HALF_TRNS 1/2 転送終了割り込み
DMA_TRNS_CMPLT 転送完了時に割り込み
■ 内部測定値読み取り有効設定
書式
void enableInternalReading()
引数
なし
戻り値
なし
説明
内部基準電圧(VREFINT)、内部温度センサの読み取りを有効にします。
readVcc()、readTemp()の利用の際にはこの関数にて有効にする必要があります。
■ 内部基準電圧(VREFINT)の取得
書式
float readVcc()
引数
なし
戻り値
測定電圧(0~Vcc)
説明
ADC内部チャンネル ADCx_IN17による内部基準電圧(VREFINT)をADCにより読み取ります。
(注意)現時点のバージョンでは、関数内の計算式が間違っているため正しい値が取得できません。
■ 内部温度センサの読み取り温度の取得
書式
float readTemp()
引数
なし
戻り値
温度 ℃
説明
ADC内部チャンネル ADCx_IN16に接続する温度センサの電位を測定し、温度(単位 ℃)を取得します。
(注意)現時点のバージョンでは、関数内の計算式が間違っているため正しい値が取得できません。
■ ADCチャンネルの指定
書式
void setChannels(uint8 *channels, uint8 length)
引数
channels :チャンネル番号格納アドレス
length :チャンネル数
戻り値
なし
説明
ADC変換対象のチャンネルを設定します。
channelsにはチャンネル番号の配列の先頭アドレス、lengthにはそのデータ長(チャンネル数)を指定します。
channelsに格納されているチャンネル番号は、0~17(このうち 16は内部温度センサ、17は内部基準電圧用)の範囲の値です。
■ ADCピンの指定
書式
void setPins(uint8 *pins, uint8 length)
引数
pins :ADC用ピン番号格納アドレス
length :チャンネル数
戻り値
なし
説明
pinsにはピン番号の配列の先頭アドレス、lengthにはそのデータ長(チャンネル数)を指定します。
■ ADC開始トリガー設定
書式
void setTrigger(adc_extsel_event trigger)
引数
trigger :トリガー
戻り値
なし
説明
ADC開始トリガーを設定します。
adc_extsel_event列挙型のtriggerには次の指定が可能です。
設定できるトリガーは利用するADCデバイス、利用マイコンのシリーズにより異なります。
ADC1 と ADC2 のレギュラチャネルに対する外部トリガ
ADC_EXT_EV_TIM1_CC1 ADC1, ADC2:TIM1_CC1 イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_TIM1_CC2 ADC1, ADC2:TIM1_CC2 イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_TIM2_CC2 ADC1, ADC2:TIM2_CC1 イベント(オンチッタイマからの内部信号)
ADC_EXT_EV_TIM3_TRGO ADC1, ADC2:TIM3_TRGO イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_TIM4_CC4 ADC1, ADC2:IM4_CC4 イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_EXTI11 ADC1, ADC2:EXTI ライン 11イベント(外部ピン/内部 信号)
ADC1 、ADC2、ADC3 共通:
ADC_EXT_EV_TIM1_CC3 ADC1, ADC2,ADC3:TIM1_CC3 イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_SWSTART0 ADC1, ADC2,ADC3:SWSTART(ソフトウェア制御ビット)
HDマイコン only:
ADC_EXT_EV_TIM3_CC1 ADC3:TIM3_CC1 イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_TIM2_CC3 ADC3:TIM2_CC3 イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_TIM8_CC1 ADC3:TIM8_CC1 イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_ADC3_TIM8_TRGO ADC3:TIM8_TRGO イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_TIM5_CC1 ADC3:TIM5_CC1 イベント(オンチプタイマからの内部信号)
ADC_EXT_EV_ADC12_TIM8_TRGO ADC1, ADC2: TIM3_TRGO イベント(オンチップタイマからの内部信号)
ADC_EXT_EV_TIM5_CC3 ADC3:TIM5_CC3イベント(オンチップタイマからの内部信号)
■ 連続変換モードの有効設定
書式
void setContinuous()
引数
なし
戻り値
なし
説明
連続変換モードに有効設定します。
■ 連続変換モードの解除
書式
void resetContinuous()
引数
なし
戻り値
なし
説明
連続変換モードを解除します。
■ ADC変換開始
書式
void startConversion()
引数
なし
戻り値
なし
説明
ADC変換を開始します。
■ スキャンモード有効設定
書式
void setScanMode()
引数
なし
戻り値
なし
説明
スキャンモードを有効にします。
スキャンモードを有効にし、機能させるには setPins()またはsetChannels()によるレギュラー・チャンネルグループの登録、連続モードの有効・無効の設定、DMA周りの設定を行う必要があります。
■ DMA割り込み関数のアタッチ
書式
void attachDMAInterrupt(voidFuncPtr func)
引数
func :割り込み関数
戻り値
なし
説明
DMAの割り込み関数の登録を行います。
呼び出しのタイミングは、setDMA()、setDualDMA()で指定したDMA転送設定フラグ dmaFlags に依存します。
■ アナログウォッチドッグ(AWD)の設定
書式
void setAnalogWatchdog(uint8 channel, uint32 HighLimit, uint32 LowLimit)
引数
channel :監視チャンネル
HighLimit :閾値上限
LowLimit :閾値下限
戻り値
なし
説明
アナログウオッチング(AWD)の設定を行います。
■ アナログウォッチドッグ(AWD)の設定情報の取得
書式
uint8 getAnalogWatchdog()
引数
なし
戻り値
常に1を返す
説明
本関数の機能は未実装です。常に1を返します。
■ アナログウオッチング(AWD)用割り込み関数のアタッチ
書式
void attachAnalogWatchdogInterrupt(voidFuncPtr func)
引数
なし
戻り値
なし
説明
閾値を超えた場合に呼び出される割り込み関数のアタッチを行います。
■ ADC変換データの取得
uint32 getData()
引数
なし
戻り値
なし
説明
ADC変換データを取得します。
関連項目
/icons/hr.icon
Copyright 2010, 2011, LeafLabs, LLC. Last updated on Jan 15, 2014
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。
NAVER、ヤフオク等の営利目的の記事転用、リンク貼りは禁止です。
本ドキュメントに関する問い合わせ先: たま吉 mail:tamacat2014@gmail.com