STM32小车篇之电机转动

STM32F103实现小车的转动

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

PWM波输出的原理图如下:
ARR为实际周期,CCRx为实际的占空比

其次,我用到了L298N型号的电机驱动,于是我通过淘宝的拍立淘或者是百度进行了电机的初步了解
下面我从网上找到了一个L298N电机驱动实物图,进行详细的描述:(通过此图可以进行实物连接)
:千万小心,不要把引脚接反了,会少了芯片。
左边部分是进行电机和电源的连接,右边部分时进行STMMINI板的连接

然后,进行代码的编写,可以引用正点原子的例程代码,在此基础上进行代码的编写。
我小车是直接控制两个电机,四个电机分成两组。让其中一侧电机的状态相同,另一个状态相同,,没有分别单独控制。
通过下图可以参考:IN1 IN2 IN3 IN4
1 0 1 0 实现电机的正转 小车前进
0 1 0 1 实现电机的反转 小车后退
1 0 0 1 小车右转
0 1 1 0 小车左转
在这里插入图片描述
但所有的前提是要先学会时钟实验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;

  • 20
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值