利用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); //使能定时器
}
|