STM32はPWMデューティサイクル測定に使用されます

STM32のTIM入力信号構造
ここに画像の説明を挿入します

入力ステージは、対応するTIx入力をサンプリングして、フィルタリングされた信号TIxFを生成します。次に、極性選択を備えたエッジ検出器が信号(TIxFPx)を生成します。この信号は、スレーブモードコントローラーによるトリガー入力またはキャプチャコマンドとして使用できます。キャプチャレジスタ(ICxPS)の前に事前にスケーリングされます。

ピンから信号TIxを受信し、デジタルフィルタリングを介してTIxF信号を取得し、エッジ検出を介してTIxFPx信号を選択します。この信号は、スレーブモードで使用することも、プログラミングに直接使用することもできます。


入力キャプチャモード

入力キャプチャモードでは、キャプチャ/比較レジスタ(TIMx_CCRx)を使用して、対応するICx信号によって検出された遷移後にカウンタの値をラッチ(锁存)します。キャプチャが発生すると、対応するCCXIF(再入捕获ロゴPWM志)フラグ(TIMx_SRレジスタ)が設定され、有効になっている場合は割り込みまたはDMA要求を送信できます。CCxIFフラグがすでにハイのときにキャプチャが発生すると、オーバーキャプチャフラグCCxOF(TIMx_SRレジスタ)が設定されます。CCxIFは、ソフトウェアで0に書き込むか、TIMx_CCRxレジスタに格納されているキャプチャデータを読み取ることでクリアできます。

「STM32TIM入力信号構造」の内容の次に、プログラミングに使用するTIxFPx信号はエッジ遷移を検出して生成し、この時点でICx信号を生成します。ICx信号が生成されると、 CCRxレジスタがこれをラッチすると同時に、割り込みフラグCCxIFが設定されます。CCxIFの設定中にキャプチャイベントが発生すると、オーバーキャプチャフラグCCxOFが設定されます。特に、プログラマがCCRxのデータを読み取った後。ハードウェアはCCxIF割り込みフラグをクリアします。

Input capture configuration code example 
/* (1) Select the active input TI1 (CC1S = 01),
 program the input filter for 8 clock cycles (IC1F = 0011),
 select the rising edge on CC1 (CC1P = 0, reset value)
 and prescaler at each valid transition (IC1PS = 00, reset value) */
/* (2) Enable capture by setting CC1E */
/* (3) Enable interrupt on Capture/Compare */
/* (4) Enable counter */
TIMx->CCMR1 |= TIM_CCMR1_CC1S_0 \
 | TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1F_1; /* (1 */
TIMx->CCER |= TIM_CCER_CC1E; /* (2) */
TIMx->DIER |= TIM_DIER_CC1IE; /* (3) */
TIMx->CR1 |= TIM_CR1_CEN; /* (4) */
//上面配置TIM的模式寄存器TIMx capture/compare mode register TIM->CCMR1
//CC1S用于选择信号来自于TI1还是TI2,这里的理解要回到第一张图,可以看到CCMR1这个配置寄存器的作用。
//这段代码就是第一张图的配置,程序员可以根据的需要去配置CCMR1寄存器。

PWM入力モード

このモードは、入力キャプチャモードの特定のケースです。手順は同じですが、次の点が異なります。

1)2つのICx信号が同じTIx入力にマッピングされます(映射)。

2)これらの2つのICx信号は、反対の極性のエッジでアクティブになります。

3)2つのTIxFP信号の1つがトリガー入力およびスレーブモードコントローラーとして選択されます

リセットモードで構成されています。

これは入力キャプチャモードの特殊なケースです。stm32TIMのピンのTIx信号は、2つのIC信号IC1とIC2を生成できます(ここではIC1とIC2を例として使用し、リーダーはIC2とIC3なしでIC3とIC4を使用できます。は規則です)、これら2つのIC信号の極性は反対であるため、PWMを形成できます。これらの2つの信号の一方はトリガーに使用され、もう一方はスレーブモードであり、リセットモードとして構成されます。

デューティサイクルを測定するためにPWMをキャプチャする手順

\ 1。TIMx_CCR1のアクティブな入力を選択します。TIMx_CCMR1の01にCC1Sビットを書き込みます。

登録(TI1を選択)。

\ 2。TI1FP1のアクティブな極性を選択します(TIMx_CCR1でのキャプチャとカウンタの両方に使用されます)

クリア):CC1Pを「0」に書き込み、CC1NPビットを「0」に書き込みます(立ち上がりエッジでアクティブ)。

\ 3。TIMx_CCR2のアクティブな入力を選択します。TIMx_CCMR1のCC2Sビットを10に書き込みます。

登録(TI1を選択)。

\ 4。TI1FP2のアクティブな極性を選択します(TIMx_CCR2でのキャプチャに使用されます):CC2Pを書き込みます

ビットを「1」に、CC2NPビットを「0」に(立ち下がりエッジでアクティブ)(注:極性はIC1信号と反対です)

\ 5。有効なトリガー入力を選択します。TSビットをTIMx_SMCRレジスタの101に書き込みます。

(TI1FP1が選択されています)(トリガーするIC1を選択すると、IC2はスレーブモードになります)

\ 6。スレーブモードコントローラーをリセットモードで構成します。SMSビットを100に書き込みます。

TIMx_SMCRレジスタ。

\7。キャプチャを有効にします。CC1EビットとCC2EビットをTIMx_CCERレジスタの「1」に書き込みます。

これはPWMの例です。PWM入力モードの導入を振り返ると、この例では最初にSTM32、TI1、TI2、またはTI3のどのTIMピンを選択し、構成レジスタCCMR1を使用してIC1とIC2の極性を構成します。逆に、一方はトリガーソースとして使用され、もう一方はリセットのスレーブモードとして構成されます。この例では、IC1がトリガーとして使用されます。IC1がトリガーをキャプチャすると、CCR1はこの時点でカウンタの値をラッチします。 、次のトリガーはIC1の反対の極性のターンです。IC2がトリガーされ、CCR2がカウンターの値をラッチし、カウンターをリセットするため、CCR1とCCR2を使用してデューティサイクルを計算できます。
ここに画像の説明を挿入します

この図は、IC1がリセットに設定され、IC2がトリガーソースとして設定されたスレーブモードを反映しています。

おすすめ

転載: blog.csdn.net/weixin_43810563/article/details/110940936