stm32f407小车控制板:电机函数

pwm.h

#ifndef __PWM_H
#define __PWM_H

#include "stm32f4xx.h"


void TIM9_PWM_Init(u32 arr,u32 psc);//E5--ch2

void TIM1_PWM_Init(u32 arr,u32 psc);//E9 11 13 14,电机的PWM
#endif //__DELAY_H


PWM.c

#include "pwm.h"
#include "led.h"

//TIM9 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM9_PWM_Init(u32 arr,u32 psc)
{
    
    		 					 
	//此部分需手动修改IO口设置
	
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);  	//TIM9时钟使能    
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); 	//使能PORTF时钟	
	
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9); //GPIOF9复用为定时器14
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;           //GPIOF9
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
	GPIO_Init(GPIOE,&GPIO_InitStructure);              //初始化PF9
	  
	TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
	
	TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);//初始化定时器14
	
	//初始化TIM9 Channel2 PWM模式	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	TIM_OC1Init(TIM9, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1

	TIM_OC1PreloadConfig(TIM9, TIM_OCPreload_Enable);  //使能TIM14在CCR1上的预装载寄存器
 
  TIM_ARRPreloadConfig(TIM9,ENABLE);//ARPE使能 
	
	TIM_Cmd(TIM9, DISABLE);  //使能TIM14
  TIM_CtrlPWMOutputs(TIM9,ENABLE);
										  
}  



//TIM1 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数--------------PE9 11 13 14
定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
定时器1时钟为168M,分频系数为168,所以计数频率 
//为 1Mhz,重装载值 arr,所以 PWM 频率为  1M/arr. 

//TIM1_Int_Init(5000-1,168);//定时器时钟 168M,分频系数 168,所以 168M/168=1mhz 
//的计数频率,计数 5000 次为5000us =5ms-----1/5=0.2*1000=200

void TIM1_PWM_Init(u32 arr,u32 psc)//E9 11 13 14
{
    
    		 					 
	//此部分需手动修改IO口设置
	
	int ccr1=50,ccr2=50,ccr3=50,ccr4=50;//初始值
	
	GPIO_InitTypeDef         GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef        TIM_OCInitStructure;

	//在那个引脚产生PWM?设定对应PWM口的时钟打开,这里用B8
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); 	//======使能PORT时钟	
	
	//引脚复用A---6===GPIO_AF_TIM13
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1); //========GPIOE5复用为定时器1
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1); //========GPIOE5复用为定时器1
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_TIM1); //========GPIOE5复用为定时器1
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_TIM1); //========GPIOE5复用为定时器1
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14;    //=======GPIOE5 E6
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
	GPIO_Init(GPIOE,&GPIO_InitStructure);              //==============初始化PF9
	  	
			
	//注意,定时器1用APB2时钟线
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);  	//=====TIM1时钟使能 	
	
	TIM_TimeBaseStructure.TIM_Prescaler=psc;  //==============定时器分频167	
	TIM_TimeBaseStructure.TIM_Period=arr;    //自动重装载值
	
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;// 重复计数器的值,没用到不用管
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//=======初始化定时器1
	
	//初始化TIM1 Channel PWM模式	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//输出同相,TIM_OCNPolarity_High时输出反相
//	TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
//	TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
//	
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;	
	
	TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
	
//********************************
  TIM_OCInitStructure.TIM_Pulse = ccr1; //设置待装入捕获比较寄存器的脉冲值
	TIM_OC1Init(TIM1, &TIM_OCInitStructure); //=============根据指定的参数初始化外设 TIMx
	
  TIM_OCInitStructure.TIM_Pulse = ccr2; //设置待装入捕获比较寄存器的脉冲值
	TIM_OC2Init(TIM1, &TIM_OCInitStructure); //=============根据指定的参数初始化外设 TIMx
	
  TIM_OCInitStructure.TIM_Pulse = ccr3; //设置待装入捕获比较寄存器的脉冲值
	TIM_OC3Init(TIM1, &TIM_OCInitStructure); //=============根据指定的参数初始化外设 TIMx
	
  TIM_OCInitStructure.TIM_Pulse = ccr4; //设置待装入捕获比较寄存器的脉冲值
	TIM_OC4Init(TIM1, &TIM_OCInitStructure); //=============根据指定的参数初始化外设 TIMx
	
	TIM_Cmd(TIM1, ENABLE);  //==============使能TIM1
	TIM_CtrlPWMOutputs(TIM1,ENABLE);
								  
}  

motor.h

#ifndef __MOTOR_H
#define __MOTOR_H

#include "stm32f4xx.h"
#include "pwm.h"
#include "delay.h"
#include "sys.h"//用位带操作,类似51单片机一样,可以一位操作

//L1:PWMA--E9   D2    D3  E9--T1PWM的channel1
//L2:PWMB--E11  D0    D1  E11--T1PWM的channel2

//R1:PWMA--E13  D11   D10 E13--T1PWM的channel3
//R2:PWMB--E14  B14   B15 E14--T1PWM的channel4
//   车头
//L1-------R1 
//L2-------R2
//************************位操作需要,方便,可以实现L1A1=0,直接输出高低电平
#define L1A1 PDout(2)
#define L1A2 PDout(3)

#define L2B1 PDout(0)
#define L2B2 PDout(1)

#define R1A1 PDout(11)
#define R1A2 PDout(10)

#define R2B1 PBout(14)
#define R2B2 PBout(15)

#define stop()            {L1A1=0;L1A2=0; L2B1=0;L2B2=0; R1A1=0;R1A2=0; R2B1=0;R2B2=0;}
#define moveforward()     {L1A1=1;L1A2=0; L2B1=1;L2B2=0; R1A1=1;R1A2=0; R2B1=1;R2B2=0;}
#define moveback()    		{L1A1=0;L1A2=1; L2B1=0;L2B2=1; R1A1=0;R1A2=1; R2B1=0;R2B2=1;}
#define moveturnleft() 		{L1A1=0;L1A2=1; L2B1=0;L2B2=1; R1A1=1;R1A2=0; R2B1=1;R2B2=0;}
#define moveturnright()   {L1A1=1;L1A2=0; L2B1=1;L2B2=0; R1A1=0;R1A2=1; R2B1=0;R2B2=1;}

//*************************引脚号,时钟号,端口号映射
#define L1A1_PIN             GPIO_Pin_2     		 // LED1 引脚      
#define L1A1_PORT            GPIOD                 // LED1 GPIO端口     
#define L1A1_CLK             RCC_AHB1Periph_GPIOD	 // LED1 GPIO端口时钟

#define L1A2_PIN             GPIO_Pin_3    		 // LED1 引脚      
#define L1A2_PORT            GPIOD                 // LED1 GPIO端口     
#define L1A2_CLK             RCC_AHB1Periph_GPIOD	 // LED1 GPIO端口时钟

#define L2B1_PIN             GPIO_Pin_0     		 // LED1 引脚      
#define L2B1_PORT            GPIOD                 // LED1 GPIO端口     
#define L2B1_CLK             RCC_AHB1Periph_GPIOD	 // LED1 GPIO端口时钟

#define L2B2_PIN             GPIO_Pin_1    		 // LED1 引脚      
#define L2B2_PORT            GPIOD                 // LED1 GPIO端口     
#define L2B2_CLK             RCC_AHB1Periph_GPIOD	 // LED1 GPIO端口时钟

#define R1A1_PIN             GPIO_Pin_11    		 // LED1 引脚      
#define R1A1_PORT            GPIOD                  // LED1 GPIO端口     
#define R1A1_CLK             RCC_AHB1Periph_GPIOD	 // LED1 GPIO端口时钟

#define R1A2_PIN             GPIO_Pin_10   		 // LED1 引脚      
#define R1A2_PORT            GPIOD                 // LED1 GPIO端口     
#define R1A2_CLK             RCC_AHB1Periph_GPIOD	 // LED1 GPIO端口时钟

#define R2B1_PIN             GPIO_Pin_14     		 // LED1 引脚      
#define R2B1_PORT            GPIOB                  // LED1 GPIO端口     
#define R2B1_CLK             RCC_AHB1Periph_GPIOB	 // LED1 GPIO端口时钟

#define R2B2_PIN             GPIO_Pin_15     		 // LED1 引脚      
#define R2B2_PORT            GPIOB                  // LED1 GPIO端口     
#define R2B2_CLK             RCC_AHB1Periph_GPIOB	 // LED1 GPIO端口时钟
//PWM的频率
#define T1PWM1M_psc 167  //168-1=167,定时器1的PWM频率,168M/168=1Mhz,这个固定。
#define T1PWM10K_arr 99  //100-1=99,定时器1的PWM频率,168M/168=1Mhz,再10e6/100=10e4=10 000hz=10khz
//全局变量
//枚举
//运动状态
enum MotorStateFlag{
    
    MotorStopFlag, MotorMoveFlag };//枚举默认从0开始
//方向
enum MotorDirFlag{
    
    MotorForwardFlag,MotorBackFlag};


///* extern variables-----------------------------------------------------------*/
extern enum MotorStateFlag MotorStateFlagNow;//枚举
extern enum MotorDirFlag MotorDirFlagNow;

//*******************************函数声明
//***********************
//void MotorInit(int T1PWM_arr,int T1PWM_psc);//初始化,包括引脚初始化,定时器1的PMW初始化
void MotorInit(u32 timer1pwmFreq);
//初始化,包括引脚初始化,定时器1的PMW初始化频率,根据频率,再计算arrMotorInit

void MotorStop();//停止
void MotorMoveForward(int vl1,int vl2,int vr1,int vr2);//前进,int 类型,计算比较快,这里不用浮点数决定占空比
void MotorMoveBack(int vl1,int vl2,int vr1,int vr2);//后退
void MotorMove90Left(int vl1,int vl2,int vr1,int vr2);//左转90度
void MotorMove90Right(int vl1,int vl2,int vr1,int vr2);//右转90度
void MotorMove180(int vl1,int vl2,int vr1,int vr2);//调头

//1000000/8000=1000/8=125
#define L2()     {MotorMoveForward(125*0.2,125*0.2,125*0.65,125*0.65);}//左边大转弯1500/10000=0.15---0.8
#define L1()     {MotorMoveForward(125*0.35,125*0.35,125*0.65,125*0.65);}//左边zhong转弯
#define L0()     {MotorMoveForward(125*0.4,125*0.4,125*0.6,125*0.6);}//左边xiao转弯

#define GO()    {MotorMoveForward(125*0.45,125*0.45,125*0.45,125*0.45);}

#define R2()     {MotorMoveForward(125*0.65,125*0.65,125*0.2,125*0.2);}//右边大转弯
#define R1()     {MotorMoveForward(125*0.5,125*0.5,125*0.25,125*0.25);}//right边zhong转弯
#define R0()     {MotorMoveForward(125*0.5,125*0.5,125*0.35,125*0.35);}//r边xiao转弯

#define ST()    { MotorStop();}

#endif //__DELAY_H


motor.c


#include "motor.h"  
#include "tracksensor.h" 
/* Public variables-----------------------------------------------------------*/

enum MotorStateFlag MotorStateFlagNow;//枚举
enum MotorDirFlag MotorDirFlagNow;

void MotorInit(u32 timer1pwmFreq)//初始化,包括引脚初始化,定时器1的PMW初始化频率,根据频率,再计算arr 10000
{
    
    
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体
	
	RCC_AHB1PeriphClockCmd ( L1A1_CLK, ENABLE); 	//初始化GPIOD时钟		//都是PD的时钟
	GPIO_InitStructure.GPIO_Pin = L1A1_PIN | L1A2_PIN | L2B1_PIN | L2B2_PIN |  R1A1_PIN | R1A2_PIN;	 
	//用或操作,简单一下
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;   //输出模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  //推挽输出
	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;	//上拉
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度选择	
	//初始化 LED1 引脚
	GPIO_Init(L1A1_PORT, &GPIO_InitStructure);	

	RCC_AHB1PeriphClockCmd(R2B1_CLK, ENABLE); 	//初始化GPIOB时钟		//都是PB的时钟
	GPIO_InitStructure.GPIO_Pin = R2B1_PIN |R2B2_PIN ;	 
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;   //输出模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  //推挽输出
	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;	//上拉
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度选择	
	//初始化 LED1 引脚
	GPIO_Init(R2B1_PORT, &GPIO_InitStructure);	
	//输出低电平
		//输出低电平
   MotorStop();
	//PWM频率确定1000
   TIM1_PWM_Init((int)(1000000/timer1pwmFreq)-1,167);//E9 11 13 14,电机的PWM  1Mhz/(arr)=freq  1000000/
  
//IO口电机方向IO确定,模式等设置
}
//*****************************************************************
/*
	MotorStop()//停止
*/
void MotorStop()//停止
{
    
    
  stop();
	MotorStateFlagNow=MotorStopFlag;
}


void MotorMoveForward(int vl1,int vl2,int vr1,int vr2)//前进,int 类型,计算比较快,这里不用浮点数决定占空比
{
    
    
	//改变占空比
	//如果当前是后退的状态那么要停止500ms,才能往前面走
	if(MotorDirFlagNow==MotorBackFlag)
	{
    
    
		MotorStop();
		Delay_ms(800);
	}
	
	TIM_SetCompare1(TIM1,vl1);	//修改比较值,修改占空比
	TIM_SetCompare2(TIM1,vl2);	//修改比较值,修改占空比
	
	TIM_SetCompare3(TIM1,vr1);	//修改比较值,修改占空比
	TIM_SetCompare4(TIM1,vr2);	//修改比较值,修改占空比
	
  moveforward();
	
	MotorDirFlagNow=MotorForwardFlag;
	MotorStateFlagNow=MotorMoveFlag;
}

void MotorMoveBack(int vl1,int vl2,int vr1,int vr2)//后退
{
    
    
	
		//如果当前是前进的状态那么要停止500ms,才能往前面走
	if(MotorDirFlagNow==MotorForwardFlag)
	{
    
    
		MotorStop();
		Delay_ms(800);
	}
	
	//改变占空比
	TIM_SetCompare1(TIM1,vl1);	//修改比较值,修改占空比
	TIM_SetCompare2(TIM1,vl2);	//修改比较值,修改占空比
	TIM_SetCompare3(TIM1,vr1);	//修改比较值,修改占空比
	TIM_SetCompare4(TIM1,vr2);	//修改比较值,修改占空比
	
  moveback();//01 01  01  01
	
	MotorDirFlagNow=MotorBackFlag;
	MotorStateFlagNow=MotorMoveFlag;
}


void MotorMove90Left(int vl1,int vl2,int vr1,int vr2)//左转90度
{
    
    
		//改变占空比
	//如果当前是后退的状态那么要停止500ms,才能往前面走
	if(MotorDirFlagNow==MotorBackFlag)
	{
    
    
		MotorStop();
		Delay_ms(800);
	}
	
//改变占空比
	TIM_SetCompare1(TIM1,vl1);	//修改比较值,修改占空比
	TIM_SetCompare2(TIM1,vl2);	//修改比较值,修改占空比
	TIM_SetCompare3(TIM1,vr1);	//修改比较值,修改占空比
	TIM_SetCompare4(TIM1,vr2);	//修改比较值,修改占空比
	
  moveturnleft();
	
	MotorDirFlagNow=MotorForwardFlag;
	MotorStateFlagNow=MotorMoveFlag;
		//当碰到什么时候结束转90度?********************************************************************************************************************************************
  if(MS==1 || RS0==1)
	{
    
    
	
			MotorStop();

	}
	//*******************************
}
void MotorMove90Right(int vl1,int vl2,int vr1,int vr2)//右转90度
{
    
    

	//如果当前是后退的状态那么要停止500ms,才能往前面走
	if(MotorDirFlagNow==MotorBackFlag)
	{
    
    
		MotorStop();
		Delay_ms(800);
	}
//改变占空比
	TIM_SetCompare1(TIM1,vl1);	//修改比较值,修改占空比
	TIM_SetCompare2(TIM1,vl2);	//修改比较值,修改占空比
	TIM_SetCompare3(TIM1,vr1);	//修改比较值,修改占空比
	TIM_SetCompare4(TIM1,vr2);	//修改比较值,修改占空比
	
  moveturnright();
	MotorDirFlagNow=MotorForwardFlag;
	MotorStateFlagNow=MotorMoveFlag;
	//当碰到什么时候结束转90度?********************************************************************************************************************************************
	if(MS==1 || RS0==1)
	{
    
    
	
			MotorStop();

	}
	
	
	
}

void MotorMove180(int vl1,int vl2,int vr1,int vr2)//调头
{
    
    
		//如果当前是后退的状态那么要停止500ms,才能往前面走
	if(MotorDirFlagNow==MotorBackFlag)
	{
    
    
		MotorStop();
		Delay_ms(800);
	}
	//改变占空比
	TIM_SetCompare1(TIM1,vl1);	//修改比较值,修改占空比
	TIM_SetCompare2(TIM1,vl2);	//修改比较值,修改占空比
	TIM_SetCompare3(TIM1,vr1);	//修改比较值,修改占空比
	TIM_SetCompare4(TIM1,vr2);	//修改比较值,修改占空比
	
  moveturnleft();
	
	MotorDirFlagNow=MotorForwardFlag;
	MotorStateFlagNow=MotorMoveFlag;
	//当碰到什么时候调头结束?**********************************************************************
	  if(MS==1 || RS0==1)
		{
    
    
		
		
		}
	//
}


main.c


#include "stm32f4xx.h"
#include "led.h"   
#include "delay.h"
#include "key.h"
#include "usart.h"  
#include "beep.h"  
#include "exti.h"  
#include "timer.h"  
#include "pwm.h" 

#include "motor.h"
#include "tracksensor.h"

#define whiteline 0
#define blackline 1
//定义全局变量

int flag=0;

//*****************************


//第一个,修改头文件led.h,配置硬件的IO对应  char int 
//修改led.c文件
int main(void)
{
    
    
	u8 key_flag = 0;	//按键标志
	u8 i=0;
  int led0val=0;
	int led1val=0;
	
	Delay_Init();		//延时函数初始化
	LED_Init();			//LED初始化
	BEEP_Init();			//LED初始化
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	EXTIX_Init();
	
  MotorInit(8000); //10000---100hz==5000hz-------1000/5=200
	// TIM1_PWM_Init(500,167);//E9 11 13 14
	//初始化电机的PWM频率是10KHz,利用定时器1的四个通道,控制四个直流电机的速度
	while (1)
	{
    
    		
//		
//		LED1=1;
//		Delay_ms(10);
//		LED1=0;
//		Delay_ms(10);
//			TIM_SetCompare1(TIM1,100);
TIM_SetCompare2(TIM1,100);	
//TIM_SetCompare3(TIM1,100);	
//TIM_SetCompare4(TIM1,100);			//修改比较值,修改占空比
//		Delay_ms(20);
//		
//		TIM_SetCompare1(TIM1,50);	//修改比较值,修改占空比
//			TIM_SetCompare2(TIM1,50);	//修改比较值,修改占空比
//			TIM_SetCompare3(TIM1,50);	//修改比较值,修改占空比
//			TIM_SetCompare4(TIM1,50);	//修改比较值,修改占空比
//		Delay_ms(20);
//			TIM_SetCompare2(TIM1,80);	//修改比较值,修改占空比
//			TIM_SetCompare3(TIM1,60);	//修改比较值,修改占空比
//			TIM_SetCompare4(TIM1,20);	//修改比较值,修改占空比
		
			L2();
		Delay_ms(40);
		L1();
			Delay_ms(40);
		GO();
			Delay_ms(40);
		 ST();
		Delay_ms(40);
		//判断循迹
//		if(LS1==blackline)
//		{
    
    
//			L2();//看motor.h文件的大转弯左边
//		}
//		else if(LS0==blackline)
//		{
    
    
//			L1();
//		}
//		else if(MS==blackline)
//		{
    
    
//			GO();
//		}
//		else if(RS0==blackline)
//		{
    
    
//			R1();
//		}
//		else if(RS1==blackline)
//		{
    
    
//			R2();
//		}
		
			
  }
}

说明:修改了

频率是8000,最大是100000/8000=125 根据实际情况,修改这个数字比例,左大专等都需要修改

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lmf666/article/details/111938695