STM32小车篇之电机转动

STM32F103实现小车的转动

首先,我们要明白:电机转动的实质其实是对PWM波的控制输出
( 库函数直接调用封装好的函数 TIM_SetCompare1()或者用CCR调节占空比)

PWM波输出的原理图如下:
STM32小车篇之电机转动_第1张图片

其次,我用到了L298N型号的电机驱动,于是我通过淘宝的拍立淘或者是百度进行了电机的初步了解
下面我从网上找到了一个L298N电机驱动实物图,进行详细的描述:(通过此图可以进行实物连接)
:千万小心,不要把引脚接反了,会少了芯片。
STM32小车篇之电机转动_第2张图片

然后,进行代码的编写,可以引用正点原子的例程代码,在此基础上进行代码的编写。
我小车是直接控制两个电机,四个电机分成两组。让其中一侧电机的状态相同,另一个状态相同,,没有分别单独控制。
通过下图可以参考:IN1 IN2 IN3 IN4
1 0 1 0 实现电机的正转 小车前进
0 1 0 1 实现电机的反转 小车后退
1 0 0 1 小车右转
0 1 1 0 小车左转
STM32小车篇之电机转动_第3张图片
但所有的前提是要先学会时钟实验GPIO的初始化,这个时候就要补上上次STM32学习的内容了。
先进行STM32时钟和GPIO的学习
附上电机初始化代码

void Motor_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB,ENABLE);              //使能GPIOA和GPIOB
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 //推挽输出
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 |GPIO_Pin_7 ;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);                                         
	GPIO_ResetBits(GPIOA,GPIO_Pin_6 |GPIO_Pin_7);    //引脚先输出高电平
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 |GPIO_Pin_1 ;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);                                         
	GPIO_ResetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1);    //引脚输出高电平

之后,还需要自己写函数实现小车的前进,后退,左转和右转

需要注意的是PWM时钟输出的arr和psc的关系:
系统时钟设置为72MHz;
PWMFre=Sys/(arr+1)(psc+1)
TIM1_PWM_Init(999,71);//分频。PWM频率=72000/(999+1)*(71+1)=1Khz
周期为:1/1khz;

你可能感兴趣的:(stm32)