2024年4月9日火曜日

BlackpillというSTM32 board(3)(ADC)

中華STM32基板のBlackpillを味見しています.

今回はADCを動かします.

ADCを動かすと言ってもいろんな動かし方の作法があるわけでして、、、ここでやったのは次の仕組みです.
・サンプリング周波数は500Hz
・連続する500ptsをメモリにストア (1秒分)
・同500ptsをCDC(USB COM)でPCへ送信する
・サンプリング周期はTIM3の出力する2mSecで決める (つまりhardware自走)
・ADC入力はIN9の1本だけ (多入力scanも出来るが使わない)
・ADCは1トリガ1サンプル (自動16サンプルまで出来るが使わない)
・DMAは使わない
・ADC完了をIRQで知る
・同IRQで500pts分のbufferに積む
・同IRQでbuffer fullになったらUSB送信を起動 (USB送信はブロックモード)
・ADCは12bitなので、1サンプルあたりASCIIの3bytesをbufferに積む
・ゆえに1USB送信あたり1500bytes
・USB FULL SPEED(12Mbps)で1500bytes送信するのにover head込みで10mSecぐらいかかるのでその間はADC変換動作は滞るが気にしない

ADC dataをPCでグラフに描いたもの.もっとノイジーかと思ってたけれどそんなに悪くない.

ーーーー
ArduinoIDEと違ってSTM32CubeIDEのsourceは大量なので全部を網羅した説明はできません.かいつまんで説明します.

↓まずはclock設定から.STM32F401CCの最高clockにする.

↓TIM3に2mSec毎にTRIG出力させる設定.赤いところはキモ.
84MHz÷8400÷20=500Hz=2mSec

↓ADCをTIM3 TRIGで起動し、12bitで1発変換、そんな感じにする設定.

↓USB deviceに設定.IOはPA11とPA12で固定です.
↓USBのCDC/VCP/USB COMの雛形sourceを生成させる.赤字のところだけでいい.他は変えてません.

↓最後に割り込み設定.ADC,TIM,USBの割り込み有りに設定する.
IRQハンドラを生成させる.

設定は以上でだいたいおしまい.

以下はsource.

main()の追加点.
Init()の下に2行追加.TIM3を起動する.ADCを起動する.
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_TIM2_Init();
  MX_TIM11_Init();
  MX_USB_DEVICE_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim3);
  HAL_ADC_Start_IT(&hadc1);
  /* USER CODE END 2 */

ADC割り込みハンドラにいろいろ追加.
やってることは、
 ①AD dataをもってくる
 ②ASCII変換する
 ③bufferに積む
 ④500 dataを積んだらUSB送信
void ADC_IRQHandler(void){
  /* USER CODE BEGIN ADC_IRQn 0 */
  uint32_t adc = HAL_ADC_GetValue(&hadc1); ①
  static N = 0;
  static uint8_t usbbuf[3*500+100]; // 3byte x 500pts
  if(N==0) usbbuf[0]=0;
  char c[15];
  sprintf(c,"%03X",adc); ②
  strcat(usbbuf,c); ③
  if(N++>=499){
    int l = strlen(usbbuf);
    usbbuf[l] = '\n';
    CDC_Transmit_FS(&usbbuf[0],l+1); ④
    N=0;
  }
  /* USER CODE END ADC_IRQn 0 */
  HAL_ADC_IRQHandler(&hadc1);
}

source変更は以上です.

ADC関係がやけに簡単に見えますが、ADC起動~ADCサンプル完了まではhardwareで自走してくれるのでprogramでやることはありません.

2へ   4へ

かしこ

8 件のコメント:

  1. 「サンプル波形」って、まるっきり、
    ・E*G
    の波形じゃないですか・・・
    ※やはり「ソレ系」の回路作ってんですね。納得しました。

    返信削除
  2. これで工学院のれぽーとの締め切りはまにあいそうだっちゃ!
    なぜかみんながみんなブラックピルのれぽーと
    これじゃはんこ押せねーな 再提出!
    がびーん

    返信削除
    返信
    1. コピーレポートを提出して優をとる

      削除
  3. PC側ではSTM32CubeIDEがあればいいんですか。それなら買ってみようかなと

    返信削除