マイクロマウス研修(のり)マウス自作研修

マイクロマウス研修(のり)[32]STM32F446 STEP3-1 ADC(シングル)

マイクロマウス研修(のり)

記事一覧 のり マイクロマウス研修

ADC機能によるアナログセンサデータのデジタル化を行います。まずはシングルで1chだけ取得して前回行ったUART経由printf関数を使ってTera Termで表示します。

参考にした先達のサイト一覧

STM32で光センサの値を読み取る - 元Web屋のマイクロマウス製作記 Part.16
ししかわです。 社員研修の一環で、自作マウスを作って大会に出場します。 記事一覧 – 元Web屋のマイクロマウス製作記 | RT MicroMouse 前回はマウスモジュール側の開発環境構築をしました。 これから数回に渡って、マウスモジュー...
ショウのマイクロマウス制作-Part9
前回は割り込みを設定しました。今回はAD変換を使えるようにします。AD変換はバッテリーの電圧のチェックや、壁センサの値の取得に使います。とりあえず今回は1チャンネルのAD変換をするように作成します。
printf - しゅうの自作マウス研修 part9
こんにちは、しゅうです。 今日は結構短いです! 今まで、HAL_UART_Transmit関数を使っていましたが、それをおなじみprintf関数で行うことができるのでご紹介します。 変数ごとにしか表示できなかったり、引数が多かったりと書いて...

回路図

バッテリ電圧最大8.4Vを、20kΩと6.8kΩの分圧抵抗でADCで計測できる範囲の0~3.3Vに収まるようにします。リポ3Sも動かすかもしれないと思っていたので、12.6Vでも入力できるパラメータにしています。ローパスアナログフィルタとして0.1uFのコンデンサを搭載していますが、この値でいいかどうかはあとで考えようと思っていたので、実際に走らせていくうちに変更するかもしれません。

ポートはPA5に接続しています。

STM32CubeMX

CubeMXでADCの設定を行います。入力した結果がこちら。

ここで、Sampling Timeを決めるのにデータシートをひっくり返してADC時定数等を調べる羽目になります。が、それは後日に回します。

ここでは、実際の値に近い28 Cyclesに設定しました。

Clock Configurationは前回同様、最大値になるように設定しています。

プログラム

プログラムです。ADCで電圧をデジタルデータに変換して単位をVで出せるよう演算してadc_voltに代入して表示しています。さらに分圧抵抗からバッテリ電圧batt_voltを演算して表示します。

  /* USER CODE BEGIN 2 */
  setbuf(stdout, NULL);
  setbuf(stdin, NULL );
  printf("Started!\n\r");
  uint16_t adc_Value = 0;
  float adc_volt, batt_volt;
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_ADC_Start(&hadc1);
	  	 HAL_ADC_PollForConversion(&hadc1, 1000);
	  	 adc_Value = HAL_ADC_GetValue(&hadc1);
	  	 adc_volt = (float)adc_Value * 3.3 / 4096;
	  	 // Voltage divider resistor Vbatt -> 20kΩ -> 6.8kΩ -> GND
	  	 batt_volt = adc_volt * (20+6.8) / 6.8;
	  	 printf("adc_Value = %d, adc_volt = %.3f, batt_volt = %.3f\n\r", adc_Value, adc_volt, batt_volt);

	  	  HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

結果

出力できました。

次は、複数チャンネルによる他のポートのセンサデータも取得してみます。

タイトルとURLをコピーしました