1. 主な特長
2. 初期化
pwm_init
/*!
\brief pwm initialize
\param[in] pwm_sc: pwm control register
\param[in] pwm_mod: pwm mod count
\param[out] none
\retval none
*/
void pwm_init(uint8_t pwm_sc,uint16_t pwm_mod)
{
PWM_MOD = pwm_mod;
PWM_SC = pwm_sc;
if((pwm_sc & PWM_SC_TOIE) != 0U){
NVIC_EnableIRQ(PWM_TOF_IRQN);
}else{
NVIC_DisableIRQ(PWM_TOF_IRQN);
}
}
入力は pwm_sc レジスタと pwm_mod です。
pwm_sc レジスタ:
8です
ビット 0 ~ 2 は PWM_SC_CLK_DIV (XXX) カウント クロックは PWM_SC_CLK_DIV の X 乗で分周されます。
ビット 3 ~ 4 PWM_SC_CLK_SEL (01) は、システム クロック カウントの選択を示します。
5 ビット PWM_SC_CPWMS (0) はカウントアップを意味します
6ビット PWM_SC_TOIE (1) 割り込みイネーブルをオンにする
7 ビット PWM_SC_TOF (0) はオーバーフローしません
0 ~ 2 ビットの PWM_SC_CLK_DIV レジスタは次のとおりです。5 をバイナリ (101) に変換するために 32 分周を選択します。
次に、pwm_sc は 01001101 として設定され、16 進数の 0x4D に変換されます。
pwm_mod レジスタ:
0~15桁なので、カウンタ周期の最大値は111111111111111、10進数に換算すると32767になります。
2000 (周期は 2ms) に設定しました。具体的なサイズは使い方によって異なります。一般的にはあまり大きくありません。私は PWM を使用してモーターを駆動します。
16進数に変換すると0x07D0になります
したがって、pwm_init は pwm_init(0x4D,0x07D0) として初期化されます。
pwm_ch1_init チャネルの初期化
pwm_ch_sc 制御レジスタと pwm_ch_cnt を入力します。
pwm_ch_sc
/*!
\brief pwm channel 1 initialize
\param[in] pwm_ch_sc: pwm channel 1 control register
\param[in] pwm_ch_cnt: pwm channel 1 count
\param[out] none
\retval none
*/
void pwm_ch1_init(uint8_t pwm_ch_sc,uint16_t pwm_ch_cnt)
{
PWM_C1SC = pwm_ch_sc;
PWM_C1V = pwm_ch_cnt; //占空比
if((pwm_ch_sc & PWM_CnSC_IE) != 0U){
NVIC_EnableIRQ(PWM_CH1_IRQn);
}else{
NVIC_DisableIRQ(PWM_CH1_IRQn);
}
}
ビット 0 ~ 2 は PWM_SC_CLK_DIV (000) カウントクロックは 2 のべき乗で分周されます PWM_SC_CLK_DIV
ビット 3 ~ 4 PWM_SC_CLK_SEL (01) は、システム クロック カウントの選択を示します。
5 ビット PWM_SC_CPWMS (1) は、カウントアップとそれに続くカウントダウンを意味します (中央揃え)
6ビット PWM_SC_TOIE (1) 割り込みイネーブルをオンにする
7 ビット PWM_SC_TOF (0) はオーバーフローしません
pwm_ch1_sc は 01101000
pwm_ch_cnt
3. 周期とデューティサイクル
PWM 信号の周期は、モジュラス レジスタ PWM_MOD の値によって決まります (16 進数0x07D0=10 進数 2000=2ms )。
pwm_ch1_init チャネル初期化のPWM_C x V PWM_C1V = pwm_ch_cnt;
そして、PWM_C1V は 次のようなレジスタアドレスです
デューティ サイクル = ( pwm_ch_cnt)/( pwm_mod )
50% = 1000/2000 = 0x03E8 / 0x07D0
この場合、pwm は常に 50 のデューティ サイクルを出力します。デューティ サイクルを調整したい場合は、pwm_ch_cnt のサイズを調整します。
ハードウェアの原理はおそらく、pwm が高レベルを入力すると三極管が接続され、正極と負極が接続されてモーターが駆動され、デューティ サイクルの速度が高レベルを設定する時間になるというものです。サイクルの中で。ハイレベルの期間は 100% のデューティサイクルです。
方向については、一般的にリレーを使用してモーターの方向を制御し、PWM でモーターの速度を制御します。