STM32での指定された時間でのADC変換

良い一日。この投稿では、DMAを使用して指定された時間にアナログ信号を測定するためにSTM32F407VET6を取得する方法について説明します。





正確な時間に信号を測定する主な理由は、三相BLDCモーターコントローラーのシャントを流れる電流を測定する必要があることでした。





問題を単純化して制限するために、





  • 信号を測定する必要がある正確な瞬間を知っています。





  • 前のポイントから、何回の測定を行う必要があるかも明らかです。





  • 2つの連続する測定間の時間差は任意です。





  • 正確な間隔で測定するために必要なチャネルは1つだけです。





また、STM32の次の機能も考慮に入れています。





  • STM32にはDMA(DMA1)コントローラーがあり、変換の最後にMCUがADCレジスタからRAMメモリにデータを転送するのを防ぐことができます。





  • ADC変換は、TIMx_UP、TIMx_CCRyなどのいくつかのイベントによってトリガーされる可能性があります。





したがって、ADCをトリガーできるタイマーがキャプチャ/比較または更新イベントを発生させると、後続の各変換をトリガーできます。変換終了後、DMA1が動作を開始し、測定値をMCUメモリに転送します。





, Capture/Compare CCR. ( ) . , . , , , .





CCR

Capture/Compare Register. Update , , . CCR , .





TIMx->CCRy DMA(DMA2), , CCRy ADC CCRy DMA2. ( DMA2, ADC DMA1) CCR, DMA2 TIMx->CCRy. .





, :





  • ADC CCRy, CCR ;





  • DMA1 ADC MCU;





  • DMA2 CCR ADC. DMA2 TIMx->CCRy .





  • CCR MCU, DMA.





:





, , . , STM32CubeIDE.





1. ADC Scan Conversion Mode, (IN1), DMA1, .





2. . AutoReload Register , .. . , , . TIM3 DMA, - , Increment Address Memory. TIM3 , , CCR DMA. Output Compare CH1 Output Compare No Output CCR CNT MCU.





Toogle on match TIM3 Output Compare Channel 1 CCR ADC. ADC : Trigger detection on both the rising and failling edges ADC .





3. , DAC, , DAC ADC IN1 , .





, .





DAC . , DAC (4095).





HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 0u);
__HAL_DAC_ENABLE(&hdac, DAC_CHANNEL_1);
      
      



CCR , , ARR, . , , .





CCR
uint16_t ccValues[MEASUREMENT_COUNT];
ccValues[0] = 115;
ccValues[1] = 252;
ccValues[2] = 388;
ccValues[3] = 475;
ccValues[4] = 582;
ccValues[5] = 646;
ccValues[6] = 727;
ccValues[7] = 871;
ccValues[8] = 993;
ccValues[9] = 1062;
ccValues[10] = 1211;
ccValues[11] = 1339;
ccValues[12] = 1425;
ccValues[13] = 1466;
ccValues[14] = 1541;
ccValues[15] = 1669;
ccValues[16] = 1818;
ccValues[17] = 1872;
ccValues[18] = 1963;
ccValues[19] = 2000;
      
      



CCR1, . CC1 .





htim3.Instance->CCR1 = ccValues[0];
HAL_TIM_Base_Stop(&htim3);
htim3.Instance->CNT = 0;

__HAL_TIM_ENABLE_IT(&htim3, TIM_IT_CC1);
__HAL_DBGMCU_FREEZE_TIM3();
      
      



ADC DMA. ADC .





HAL_ADC_Start_DMA(&hadc3, measuredAdcValues, MEASUREMENT_COUNT);
      
      



DMA2, , .. CCR1.





HAL_TIM_OC_Start_DMA(&htim3, TIM_CHANNEL_1, &ccValues[1], MEASUREMENT_COUNT - 1u);
      
      



.





MCU ( DAC/ADC IN1, TIM3_CH1) :





黄色-DACからの信号、緑-TIM3_CH1出力
- DAC, - TIM3_CH1

. , .





ADC , :





測定結果、横軸CCR値、縦軸デジタル化DAC値
, CCR, DAC

, , , , .





STM32F103C8T6, . CCR, MCU , . - , .





, DMA1, , DMA2 , . , , , .





アップデート1:githubのテストケースへの

リンク








All Articles