智能车通过PWM改变运动速度,目前仅包括前进和停止
L289N模块接线图
!!!!!!!!!!!!!!!!!!!
!!!L298N和STM32开发板要共地!!!
!!!!!!!!!!!!!!!!!!!
单片机输出PWM引脚(芯片手册)
main.c
//main.c
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "car.h"
void Delay(unsigned int t);
unsigned char i = 0;
int main(void)
{
TIM3_PWM_Init();
while(1)
{
Car_Go();
}
}
void Delay(unsigned int t)
{
unsigned char i;
while(t--)
{
for(i=0;i<125;i++)
{ ;}
}
}
car.c
//car.c
#include "car.h"
void Car_Go(void)
{
TIM_SetCompare1(TIM3 , 600); //ÊýÖµÔ½´óËÙ¶ÈÔ½Âý
TIM_SetCompare2(TIM3 , 900);
TIM_SetCompare3(TIM3 , 600);
TIM_SetCompare4(TIM3 , 900);
}
void Car_Stop(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 900);
TIM_SetCompare3(TIM3 , 900);
TIM_SetCompare4(TIM3 , 900);
}
void Car_Back(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 300);
TIM_SetCompare3(TIM3 , 900);
TIM_SetCompare4(TIM3 , 300);
}
void Car_Left(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 300);
TIM_SetCompare3(TIM3 , 300);
TIM_SetCompare4(TIM3 , 900);
}
void Car_BigLeft(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 100);
TIM_SetCompare3(TIM3 , 100);
TIM_SetCompare4(TIM3 , 900);
}
void Car_Right(void)
{
TIM_SetCompare1(TIM3 , 300);
TIM_SetCompare2(TIM3 , 900);
TIM_SetCompare3(TIM3 , 900);
TIM_SetCompare4(TIM3 , 300);
}
void Car_BigRight(void)
{
TIM_SetCompare1(TIM3 , 100);
TIM_SetCompare2(TIM3 , 900);
TIM_SetCompare3(TIM3 , 900);
TIM_SetCompare4(TIM3 , 100);
}
void TIM3_PWM_Init(void) //TIM3?pwm??????????
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB,ENABLE);
//GPIOA6,A7,B0,B1¸´ÓÃλTIM3
GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM3);
TIM_TimeBaseStructure.TIM_Period = 899;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM3 , &TIM_TimeBaseStructure);
//????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //GPIOA6/A7
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; //GPIOB0/B1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
GPIO_Init(GPIOB, &GPIO_InitStructure);
//PWMͨµÀ1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = 900;
TIM_OC1Init(TIM3 , &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3 , TIM_OCPreload_Enable);
//PWMͨµÀ2
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = 900;
TIM_OC2Init(TIM3 , &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3 , TIM_OCPreload_Enable);
//PWMͨµÀ3
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = 900;
TIM_OC3Init(TIM3 , &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3 , TIM_OCPreload_Enable);
//PWMͨµÀ4
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = 900;
TIM_OC4Init(TIM3 , &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3 , TIM_OCPreload_Enable);
TIM_Cmd(TIM3 , ENABLE);
}
car.h
//car.h
#ifndef __CAR_H
#define __CAR_H
#include "stm32f4xx.h"
void TIM3_PWM_Init(void);
void Car_Go(void);
void Car_Stop(void);
void Car_Back(void);
void Car_Left(void);
void Car_BigLeft(void);
void Car_Right(void);
void Car_BigRight(void);
#endif