2.小车前进实验

您当前位置: 首页 > STM32视觉巡线小车 > 4、实验课程

2、小车前进实验.rar  点击下载

实验二:STM32平台-------小车前进实验

 

1、实验前准备

image.png 

            图1-1 STM32主控板

image.png

              图1-2 STM32转向车

 

 

2、实验目的

  STM32单片机上电之后,按下PS2标志旁边的启动按键后,实验效果小车前进1s,停止1s后退1s,停止

 

3、实验原理

  对于4路直流减速电机的控制我们采用的是74HC244驱动芯片H桥驱动芯片来驱动电机。此模块中M1A和M1B控制一个电机,M2A和M2B控制一个电机,当M1A为0,M1B为1的时候电机正转,当M1A为1,M1B为0的时候电机反转,当两个都为0的时候电机停止。当M2A为0,M2B为1的时候电机正转,当M2A为1,M2B为0的时候电机反转,当两个都为0的时候电机停止。本次实验主要是控制M1A电平,M2A电平然后通过定时器改变M1B和M2B高低电平的占空比来控制电机的转速

下面我们来讲下用定时器来控制电机的方法。

这里我们用定时器1来驱动机,首先我们先开启TIM1时钟如下:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能

然后对定时器1初始化如下:

TIM_TimeBaseStructure.TIM_Period = arr;     //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler = (psc-1); //设置用来作为TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim   //36Mhz

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;    //重复计数关闭

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

 

最后定义定时器更新中断:

TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE ); //使能指定的TIM1中断,允许更新中断

 

//中断优先级NVIC设置

NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM1中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能

NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器

 

最后使能定时器1:

TIM_Cmd(TIM1, ENABLE);  //使能TIMx

 

void TIM1_Int_Init(u16 arr,u16 psc)

该函数的 2 个参数用来设置 TIM1 的溢出时间。 在前面时钟系统部分我们讲解过, 系统初始化的时候在默认的系统初始化函数 SystemInit 函数里面已经初始化 APB1 的时钟为 2 分频,所以 APB1 的时钟为 36M 而从 STM32 的内部时钟树图得知:当 APB1 的时钟分频数为 1 的时候, TIM2~7 的时钟为 APB1 的时钟,而如果 APB1 的时钟分频数不为 1,那么 TIM2~7 的时钟频率将为 APB1 时钟的两倍。因此, TIM3 的时钟为 72M,再根据我们设计的 arr psc 的值,就可以计算中断时间了。计算公式如下:
Tout= ((arr+1)*(psc+1))/Tclk
其中:
Tclk TIM1 的输入时钟频率(单位为 Mhz)。
Tout TIM1 溢出时间(单位为 us)。
TIM1_Int_Init(9, 72);

这里我们设置溢出时间为: (9+1)*(71+1)/72M = 10us

 

4、实验步骤

4-1.看懂原理图

image.png  

   

              图4-1 STM32主控板电路图

image.png

             图4-2  电机驱动芯片74HC244

 

4-2理解原理图

  由图4-1和4-2 由电路原理图可知M1A,M1B,M2A,M2B,分别接在STM32主控板上的PB3PD2PC12 PC11 


4-3 核心程序代码如下


电机初始化

image.pngimage.png 

 

定时器1初始化

image.png 

小车运动函数

 image.png

image.png

image.png 

 

 

 

定时器中断部分代码

image.png 

 

初始化函数:

image.png 

主函数:

image.png