ONE SHOTを、TIM1/TIM2/TIM3/TIM4 でやる方法を比較する

これが必要とされる場面はあまり多くないとは思いますが、これも主要なタイマ機能の一つですから、解説しておきます.

ワンショットとかモノマルチと呼ばれる機能で、汎用ロジックICでは74HC123で実現されることの多い機能です.
トリガにpositiveエッジが生じると、出力がただちにHIGHになります.
そのpositiveエッジから起算して、一定の時間長後に出力がLOWになります.
これがワンショットの動作です.
普通の発振回路と違うのは、1トリガあたり1パルスしか出ないことです.


こちらのページでは、TIM1をつかってワンショット動作をさせましたが、TIM2,TIM3,TIM4でもワンショット動作をさせられるのでしょうか?

結論は、TIM2,TIM3,TIM4ともに、ワンショット動作はできそうにないです.

なぜか?

下記のソースコードはTIM1をワンショット動作させるための設定のキモのところです.

TIM1_DeInit();
TIM1_TimeBaseInit( 1599, TIM1_COUNTERMODE_UP, 2999, 0 ); // 16MHz/1600/3000=3.33Hz
TIM1_SelectInputTrigger( TIM1_TS_TI2FP2 );  // TS=110
TIM1_SelectSlaveMode( TIM1_SLAVEMODE_TRIGGER );  // SMS=110
TIM1_SelectOnePulseMode( TIM1_OPMODE_SINGLE );  // OPM=1
TIM1_OC1Init( TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 1000, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET ); // TIM1_CH1 output port
TIM1_Cmd(ENABLE);
TIM1_CtrlPWMOutputs(ENABLE);

これと同等のことをTIM2のライブラリ関数で記述しようとしますと、赤字の関数が存在しません.
関数を作ればよいかというとそうでもなくて、カウンタをスレーブモードにするためのTIM2_SMCRというレジスタがないので、上記のコメントにあるTS=110であるとかSMS=110という設定もできません.

そういった理由により、TIM2ではワンショット動作はできそうにないです.

TIM2よりも機能の劣るTIM3やTIM4でも同様にワンショット動作はできないと思われます.

inserted by FC2 system