- ArduinoとSTM32F103C8のADCの比較
- STM32のADC
- アナログ信号をデジタル形式に変換する方法
- STM32F103C8T6のADCピン
- 必要なコンポーネント
- 回路図と説明
- ADC値を読み取るためのSTM32のプログラミング
ほとんどすべての組み込みアプリケーションで使用される一般的な機能の1つは、ADCモジュール(アナログ-デジタルコンバーター)です。これらの アナログ-デジタルコンバーター は、温度センサー、傾斜センサー、電流センサー、フレックスセンサーなどのアナログセンサーから電圧を読み取ることができます。したがって、このチュートリアルでは、STM32F103C8でADCを使用して、EnergiaIDEを 使用してアナログ電圧を読み取る方法を学習し ます。我々は、あろうSTM32ブルーピルボードに小さな電位差計のインターフェースとアナログ端子に変化する電圧を供給し、電圧を読み、16×2液晶画面に表示します。
ArduinoとSTM32F103C8のADCの比較
Arduinoボードには、6チャネル(MiniおよびNanoでは8チャネル、Megaでは16チャネル)、入力電圧範囲が0V〜5Vの10ビットADCが含まれています。これは、0〜5ボルトの入力電圧を0〜1023の整数値にマッピングすることを意味します。STM32F103C8の場合、入力範囲が0V〜3.3Vの10チャネルの12ビットADCがあります。0〜3.3ボルトの入力電圧を0〜4095の整数値にマッピングします。
STM32のADC
STM32マイクロコントローラに組み込まれたADCは、SAR(逐次比較レジスタ)の原理を使用しており、これにより、変換はいくつかのステップで実行されます。変換ステップの数は、ADCコンバータのビット数と同じです。各ステップはADCクロックによって駆動されます。各ADCクロックは、結果から出力まで1ビットを生成します。ADCの内部設計は、スイッチトキャパシタ技術に基づいています。STM32を初めて使用する場合は、「STM32入門」チュートリアルを確認してください。
12ビットの解像度
このADCは10チャネルの12ビットADCです。ここで、10チャネルという用語は、アナログ電圧を測定できる10個のADCピンがあることを意味します。12ビットという用語は、ADCの分解能を意味します。12ビットは2の10の累乗(2 12)、つまり4096を意味します。これはADCのサンプルステップ数であるため、ADC値の範囲は0から4095になります。値は0から4095に増加します。ステップあたりの電圧の値に基づく4095。これは式で計算できます。
VOLTAGE / STEP = REFERENCE VOLTAGE / 4096 =(3.3 / 4096 = 8.056mV)/ユニット。
アナログ信号をデジタル形式に変換する方法
コンピュータはバイナリ/デジタル値(1と0)のみを保存および処理するため。したがって、センサーのボルト単位の出力などのアナログ信号は、処理のためにデジタル値に変換する必要があり、変換は正確である必要があります。入力アナログ電圧がそのアナログ入力でSTM32に与えられると、アナログ値が読み取られ、整数変数に格納されます。 。保存されたアナログ値(0-3.3V)は、次の式を使用して整数値(0-4096)に変換されます。
入力電圧=(ADC値/ ADC分解能)*基準電圧
解像度= 4096
リファレンス= 3.3V
STM32F103C8T6のADCピン
STM32にはPA0からPB1までの10個のアナログピンがあります。
また、他のマイクロコントローラーでADCを使用する方法も確認してください。
- Arduino UnoでADCを使用する方法は?
- ADC0808と8051マイクロコントローラーのインターフェース
- PICマイクロコントローラーのADCモジュールの使用
- Raspberry PiADCチュートリアル
- MSP430G2でADCを使用する方法-アナログ電圧の測定
必要なコンポーネント
- STM32F103C8
- LCD 16 * 2
- ポテンショメータ100k
- ブレッドボード
- 接続線
回路図と説明
16 * 2LCDとアナログ入力をSTM32F103C8T6 ボードに接続するための回路図を 以下に示します。
LCD用に行われる接続を以下に示します。
LCDピン番号 |
LCDピン名 |
STM32ピン名 |
1 |
グラウンド(Gnd) |
地面(G) |
2 |
VCC |
5V |
3 |
VEE |
ポテンショメータの中心からのピン |
4 |
レジスタ選択(RS) |
PB11 |
5 |
読み取り/書き込み(RW) |
地面(G) |
6 |
有効(EN) |
PB10 |
7 |
データビット0(DB0) |
接続なし(NC) |
8 |
データビット1(DB1) |
接続なし(NC) |
9 |
データビット2(DB2) |
接続なし(NC) |
10 |
データビット3(DB3) |
接続なし(NC) |
11 |
データビット4(DB4) |
PB0 |
12 |
データビット5(DB5) |
PB1 |
13 |
データビット6(DB6) |
PC13 |
14 |
データビット7(DB7) |
PC14 |
15 |
LEDポジティブ |
5V |
16 |
LEDネガティブ |
地面(G) |
上記の表に従って接続が行われます。回路には2つのポテンショメータがあり、最初の1つは分圧器に使用され、電圧を変化させてSTM32にアナログ入力を提供するために使用できます。このポテンショメータの左側のピンはSTM32(3.3V)から入力正電圧を取得し、右側のピンはグランドに接続され、ポテンショメータの中央のピンはSTM32のアナログ入力ピン(PA7)に接続されます。もう1つのポテンショメータは、LCDディスプレイのコントラストを変化させるために使用されます。STM32の電源は、PCまたはラップトップからのUSB電源によって供給されます。
ADC値を読み取るためのSTM32のプログラミング
前のチュートリアルでは、USBポートを使用したSTM32F103C8T6ボードのプログラミングについて学習しました。そのため、今はFTDIプログラマーは必要ありません。STM32のUSBポート経由でPCに接続し、ARDUINOIDEでプログラミングを開始するだけです。アナログ電圧を読み取るためにARDUINOIDEでSTM32をプログラミングするのは非常に簡単です。arduinoボードと同じです。STM32のジャンパーピンを変更する必要はありません。
このプログラムでは、アナログ値を読み取り、その値で電圧を計算してから、アナログ値とデジタル値の両方をLCD画面に表示します。
まず 、LCDピンを定義します。これらは、LCDピンがSTM32のどのピンに接続されるかを定義します。要件に応じて変更できます。
const int rs = PB11、en = PB10、d4 = PB0、d5 = PB1、d6 = PC13、d7 = PC14; // LCDでピン名をメンションする
次に、 LCDディスプレイのヘッダーファイルを インクルードします。これにより、STM32がLCDと通信する方法のコードを含むライブラリが呼び出されます。また、関数Liquid Crystalが、上記で定義したピン名で呼び出されていることを確認してください。
#include
setup() 関数内では 、LCD画面に表示される紹介メッセージを表示するだけです。LCDとSTM32のインターフェースについて学ぶことができます。
lcd.begin(16、2); // 16 * 2 LCDを使用してい ますlcd.clear(); //画面をクリアします lcd.setCursor(0、0); //最初の行の最初の列 lcd.print ( " CIRCUITDIGEST "); //このlcd.setCursor(0、1);を出力します// secound行第columでN lcd.print( "STM32F103C8")。 // THI印刷Sの 遅延(2000); // 2秒待つ lcd.clear(); //画面をクリアします lcd.setCursor(0、0); //最初の行の最初の列 lcd.print( "USING ADC IN"); //この lcd.setCursor(0,1);を出力します。 // 2番目の行の最初の列で lcd.print( "STM32F103C8"); //この 遅延を出力します(2000); // 2秒待つ lcd.clear(); //画面をクリアします
最後に、無限 ループ() 関数内で、ポテンショメータからPA7ピンに供給されるアナログ電圧の読み取りを開始 します。すでに説明したように、マイクロコントローラーはデジタルデバイスであり、電圧レベルを直接読み取ることはできません。SAR技術を使用して、電圧レベルは0から4096にマッピングされます。これらの値はADC値と呼ばれ、このADC値を取得するには、次の行を使用するだけです。
int val = analogRead(A7); //ピンからADC値の読み取りPA 7
ここでは、 関数 analogRead() を使用してピンのアナログ値を読み取ります。最後に、この値を「 val 」という変数に保存します。この変数に格納されるのは0から4096の範囲の値のみであるため、この変数のタイプは整数です。
次のステップは、ADC値から電圧値を計算すること です。これを行うには、次の式があります
電圧=(ADC値/ ADC分解能)*基準電圧e
この場合、マイクロコントローラーのADC解像度が4096であることはすでにわかっています。ADC値は前の行にもあり、valという変数が格納されています。 基準電圧は、マイクロコントローラが動作している電圧に等しいです。STM32ボードにUSBケーブルを介して電力を供給する場合、動作電圧は 3.3Vです。ボード上のVccとグランドピンの両端にマルチメータを使用して、動作電圧を測定することもできます。したがって、上記の式は、以下に示すように私たちのケースに適合します
フロート電圧=(float(val)/ 4096)* 3.3; // ADC値を電圧eに変換する式
行 float(val) と混同される可能性があります 。 これは、変数「val」をintデータ型から「float」データ型に変換するために使用され ます。この変換が必要なのは、floatでval / 4096の結果が得られた場合にのみ、3.3を乗算できるためです。値が整数で受信された場合、常に0になり、結果もゼロになります。 ADCの値と電圧を計算したら、あとはLCD画面に結果を 表示するだけです。 これは次の行を使用して実行できます。
lcd.setCursor(0、0); //カーソルを列0、行0に設定します lcd.print( "ADC Val:"); lcd.print(val); // ADC値を表示します lcd.setCursor(0、1); //カーソルを列0、行1に設定します lcd.print( "Voltage:"); lcd.print(電圧); //表示電圧
完全なコードとデモンストレーションビデオを以下に示します。