フォト
2019年8月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
無料ブログはココログ

« Arduino用 MML文演奏ライブラリの作成 その2 | トップページ | Arduino STM32のADC(アナログ・デジタル コンバータ)周辺の調査(2) »

2019年5月24日 (金)

Arduino STM32のADC(アナログ・デジタル コンバータ)周辺の調査(1)

BluePillボード(STM32F103C8T6搭載) + Arduino STM32 の環境で、
ADC(アナログ・デジタル コンバータ)を使うためのライブラリを調べています。

STM32のADC機能はArduino Unoと比べるとかなり高機能・高性能なのですがその分、複雑です。
下図は「中容量及び大容量 STM32F101xx 及び STM32F103xx 高性能 ARM ベース32bit MCU(RM0008)」
の「10.3 ADC の機能詳細」からの引用です。雰囲気的に高機能だとわかると思います。

01_6
図を簡単に解説すると、
  ・最大16チャンネルをグループ化して不定期 or 周期的サンプリングが出来る(レギュラー・グループ)
     ADCx_IN0~ADCx_IN15(ただし、ADCコンバータは2機or3機なので同時にではなく各チャンネルを順次変換)
  ・上記のグループに割り込んでADCして最大4つのデータが別途保持できる(インジェクト・グループ)
  ・AD変換開始の様々なトリガーの設定が出来る
  ・サンプルレートの設定が出来る(ADCCLK×選択サイクル数、ADCCLKはシステムクロックの分周選択)
  ・AD変換完了の割り込みが利用可能(レギュラー・グループ 変換完了、インジェクト・グループ完了、アナログ閾値監視ウオッチドック)
  ・DMAを使って、CPUが介在しないマルチチャンネルサンプリングが出来る
  ・マルチチャンネルサンプリング において、各チャンネルに異なるサンプリング周期の指定が出来る 

ADCを使うにあたり、次のライブラリ or APIが用意されています。
1)analogRead()関数       ・・・  Arduino互換関数(ただし分解能は12ビット)
2)STM32ADCライブラリ  ・・・  多チャンネルサンプリング、DMA利用等の機能が利用できる
3)Analog to Digital Conversion (ADC) support(adc.h)  ・・・下位ライブラリ

これらは下記にてリファレンスマニュアルとまとめ中です。

 Arduino STM32 リファレンス 日本語版
    ┣ 1) analogRead()関数
    ┣ 2) STM32ADC 高機能アナログ - デジタル変換(ADC)ライブラリ
    ┗ 3) Analog to Digital Conversion (ADC) support(adc.h) アナログ - デジタル変換(ADC)のサポート

現在、2)STM32ADCライブラリを詳しく調査しています。
このライブラリは、ADCブログ図のかなりの部分をカバーしているライブラリで、
DMAを利用した高速多チャンネルサンプリング等をサポートしています。
中々、強力なライブラリです。

ただし、調査そ進めていくと、いくつかの不具合を見つけました。

現時点で見つけた不具合
 (1)コンパイル時、一部の関数のリンクに失敗する。
     その関数を呼び出すと、暴走(フリーズ?)する。
 (2)readVcc()、readTemp()で取得する値が正しくない。

このライブラリの実装、イージーミスが多く、テスト不十分のようです。

Blue PillボードではADCは2個、ADC接続端子は外部端子として10チャンネル、
内部端子は2チャンネル(内部温度センサ用、内部基準電圧測定用)があります。
このあたりの機能について、上記のライブラリと合わせてもう少し調べてまとめて行きたいと思います。


« Arduino用 MML文演奏ライブラリの作成 その2 | トップページ | Arduino STM32のADC(アナログ・デジタル コンバータ)周辺の調査(2) »

日記・コラム・つぶやき」カテゴリの記事

arduino」カテゴリの記事

STM32」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Arduino用 MML文演奏ライブラリの作成 その2 | トップページ | Arduino STM32のADC(アナログ・デジタル コンバータ)周辺の調査(2) »