利用STM32 的IO輸出不同占空比的脈沖信號來達到調速的過程,當占空比大的時候就表明在一個脈沖周期內高電平的時間越長,而脈沖信號輸出頻率極快,高電平的時間越長就表明在一段時間內IO口輸出的控制電壓越高,控制電壓越高使得L298N輸出的電壓越高,這樣就使得車輪的轉速越快。
PWM.h代碼書寫如下:
#ifndef __PWM__H
#define __PWM__H
#include "sys.h"
#include "stm32f10x.h"
void TiM4_PWM_Init(u16 value ) ;
#endif
PWM.c文件書寫如下:
#include "PWM.h"
void TiM4_PWM_Init(u16 value )
{
TIM_TimeBaseInitTypeDef TIM_Timeinit;
TIM_OCInitTypeDef TIM_OCInitstruct;
GPIO_InitTypeDef GPIO_InitStrucyure;
/////////////// 1
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //使能定時器4時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); // 使能GPIO
GPIO_InitStrucyure.GPIO_Mode=GPIO_Mode_AF_PP; //改為復用推挽輸出GPIO_Mode_AF_PP
GPIO_InitStrucyure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStrucyure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStrucyure); //初始化io口
TIM_Timeinit.TIM_ClockDivision = TIM_CKD_DIV1 ; //
TIM_Timeinit.TIM_CounterMode = TIM_CounterMode_Up; //計數模式
TIM_Timeinit.TIM_Prescaler = 0; //預分頻系數為0 則頻率為不分頻 72mhz/1 = 72Mhz
TIM_Timeinit.TIM_Period = 7199; // 72MHZ /(7199+1) = 10KHZ 7199 為計數總值
TIM_TimeBaseInit(TIM4,&TIM_Timeinit);
TIM_OCInitstruct.TIM_Pulse = value; //占空比 這里是0-2399
TIM_OCInitstruct.TIM_OCMode = TIM_OCMode_PWM2 ; //模式2
TIM_OCInitstruct.TIM_OCNPolarity = TIM_OCPolarity_High ; //極性輸出高
TIM_OCInitstruct.TIM_OutputState = TIM_OutputState_Enable ; //
TIM_OC1Init(TIM4,&TIM_OCInitstruct); //TIM_OCX 通道1 就OC1
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_Cmd(TIM4,ENABLE); //使能定時器
}
|