バックグラウンド
STM8S003F3P6 を使用して PWM 制御を出力し、ファンの速度を制御する必要があるプロジェクトがあります。デバッグ記録の詳細な記録は次のとおりです。
回路図
回路図は比較的単純で、モーターインターフェイスCN3です。
モーターインターフェースの回路図
MCU ピンとの接続位置は次の図に示されています。
まずはモーターの原理を理解する必要があります
モーターとは、簡単に言えば、電気エネルギーと機械エネルギーの相互変換を実現する電気機器です。
私たちがよく使うDCモーターの原理は次のとおりです。
電磁気:通電されたワイヤーは磁場、つまり電磁誘導回転磁場を生成し、ローターを回転させます。モータはステータとロータから構成され、一方が回転磁界を発生し、もう一方が磁極となり、モータのロータ(ベアリング)が回転します。
これにより、電気エネルギー→磁気エネルギー→機械エネルギーの変換が実現します。
次の 2 つの図は、より直感的に理解できます。
したがって、モーターについては詳しく説明しません。モーターの本質はコイルまたはインダクタンス要素であることだけを理解する必要があります。
同時に、インダクタンスには電流の急激な変化を防ぐ効果があることもわかっています。
モーターHAS10227について
誰だかわかりませんが、日本製のモーターを選びました、説明書はすべて日本語です、疲れそうです。
対応するピンはおそらく、VSP 電圧を制御してモーター速度を調整するためのものです。
つまりCN3ラベル5に対応
ここでは、pwmを使用して電圧を調整し、速度を制御するという目的を達成します。
ソフトウェア設計
pwm の初期化、タイマー 1 を使用して pwm を出力
void Tim1_PWM_Init(void)
{
TIM1_DeInit();
/* Time Base configuration */
/*
TIM1_Period = 4095
TIM1_Prescaler = 0
TIM1_CounterMode = TIM1_COUNTERMODE_UP
TIM1_RepetitionCounter = 0
*/
//TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 4095, 0);
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 1600 - 1, 0);//10KHZ
/* Channel 1, 2,3 and 4 Configuration in PWM mode */
/*
TIM1_OCMode = TIM1_OCMODE_PWM2
TIM1_OutputState = TIM1_OUTPUTSTATE_ENABLE
TIM1_OutputNState = TIM1_OUTPUTNSTATE_ENABLE
TIM1_Pulse = CCR1_Val
TIM1_OCPolarity = TIM1_OCPOLARITY_LOW
TIM1_OCNPolarity = TIM1_OCNPOLARITY_HIGH
TIM1_OCIdleState = TIM1_OCIDLESTATE_SET
TIM1_OCNIdleState = TIM1_OCIDLESTATE_RESET
*/
//TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE,
// CCR1_Val, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,
// TIM1_OCNIDLESTATE_RESET);
/*TIM1_Pulse = CCR2_Val*/
//TIM1_OC2Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, CCR2_Val,
// TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,
// TIM1_OCNIDLESTATE_RESET);
/*The TIM1 CCR3 register value is equal to 0x3FF, so the TIM1 Channel 3 and TIM1
Channel 3N generate a PWM signal with a frequency equal to 488.28 Hz
and a duty cycle equal to:
TIM1 Channel3 duty cycle = TIM1_CCR3 / ( TIM1_Period + 1) = 25%.*/
/*TIM1_Pulse = CCR3_Val*/
TIM1_OC3Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE,
CCR3_Val, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,
TIM1_OCNIDLESTATE_RESET);
/*TIM1_Pulse = CCR4_Val*/
//TIM1_OC4Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, CCR4_Val, TIM1_OCPOLARITY_LOW,
// TIM1_OCIDLESTATE_SET);
/* TIM1 counter enable */
TIM1_Cmd(ENABLE);
/* TIM1 Main Output Enable */
TIM1_CtrlPWMOutputs(DISABLE);
}
マニュアルを見ると、PC3 は PWM の制御ピンであり、先ほどの回路図設計のピンでもあることがわかります。
モーターの速度を制御するには、次の関数に示すように PWM の出力を調整します。
void setSpeed(void)
{
CCR3_Val = ((uint16_t)1120) - ((uint16_t) 112) * (5 - speed);//最大70%,每次递减7%
TIM1->CCR3H = (uint8_t)(CCR3_Val >> 8);
TIM1->CCR3L = (uint8_t)(CCR3_Val);
TIM1_CtrlPWMOutputs(ENABLE);
}