标题: STM32 PWM直流电机调速驱动程序 [打印本页]

作者: 电子爱好者没错    时间: 2020-4-6 21:49
标题: STM32 PWM直流电机调速驱动程序
      利用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);  //使能定时器
     
    }






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1