目录
前言:
从做一个遥控车,做一个项目中,一步步学习,这篇文章将持续更新,是遥控车保姆级教程,将从一开始的方案测试到后续车板原理图、PCB绘制、软件调试。
使用HAL库,使用STM32CubeMX配置
PCB使用立创EDA专业版绘制(使用立创EDA才能免费开板)
控制方案
后续将逐渐从方案一到方案二,后续会做升级
方案一:
初始调试使用一个蓝牙模块通信,使用手机控制
方案二:
增加遥控器,实现遥控器控制遥控车行走
器件准备
1、SPT5410HV-180舵机
![](https://img-blog.csdnimg.cn/b3f0b81603104b48a708d6c18c8414e9.jpeg)
2、GB37-520减速电动机
![](https://img-blog.csdnimg.cn/6f097829930c435488db6cbc3aa83821.jpeg)
3、STM32F103VET6开发板
注:博主使用的是野火STM32F103开发板,此处只是用于验证方案(野火开发板贵)
![](https://img-blog.csdnimg.cn/72c641be6399445a96ddb3887f7e1929.jpeg)
4、HC-05无线蓝牙模块
![](https://img-blog.csdnimg.cn/22a512751de1447eb45a5499c08921ad.jpeg)
5.电源模块(后续制作)
开始制作
一、小小驱动一下舵机
舵机基本资料
![](https://img-blog.csdnimg.cn/e19e6b1347f84a8285838476abb649f4.jpeg)
从舵机SPT5410HV-180资料中,显示:
- 棕线:GND
- 红线:VCC
- 黄线:PWM(信号线)
- 周期(Cycle):20ms “同mg996r舵机”
- 电机电压范围(Voltage Range):4.8V/6.0V/8.4V
- 脉宽范围 500-2500us Angle:180°/PWM
- PWM信号周期: 20000us
- 0度时,高电平时长: 500us
- 180度时, 高电平时长: 2500us
- 每增加1 °,需增加高电平时长:(2500-500)÷180 = 11.1us
- 某角度值A,需要的总高电平时长:(A x11.1 +500)us
180度舵机为例:
0.5ms-------2.5%---------0度;
1ms ----------5%-------45度;
1.5ms--------7.5%--------90度;
2ms ----------10%-------135度;
2.5ms --------12.5-------180度;
STM32ClueMX配置
定时器
STM32的通用定时器是一个通过可编程预分频器(Prescaler)驱动的16位自动重装主计数器(counter period)构成。可以对内部时钟或触发源以及外部时钟或者触发源进行计数。
基本工作原理:定时器时钟信号送入16位可编程预分频器(prescaler),该分频器系数是0~65535之间的任意数值。预分频器溢出后,会向16位的主计数器发出一个脉冲信号。
预分频器本质上是一个加法计数器,预分频系数实际上就是加技术的溢出值。
定时器发生中断时间的计算方法:
定时时间=(Prescaler + 1)× (Counter Period + 1)× 1 定时器时钟频率
开启定时器3的通道1,APB1上的时钟频率为72Mhz。
![](https://img-blog.csdnimg.cn/d43e522cc955484aaa90a8e775dafe92.jpeg)
图1.1下方
- Prescaler (PSC-16 bits value) 预分频器(PSC-16位值):72-1
- Counter Mode 计数器模式:up
- Counter Period(AutoReload Register - 16 bits value) 计数器周期(自动重载寄存器):20000-1
- Internal Clock Division (CKD) 内部时钟部(CKD):No Division
- auto-reload preload 自动重载预加载:Disable
72M/72=1Mhz,即在1s内计数一百万次,我们需要设定20ms,则重装载值应为20000。
![](https://img-blog.csdnimg.cn/ad16a03c218942ffaf645c9ada19ba3a.png)
软件程序:
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,600);
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,1350);
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,1900);
HAL_Delay(1000);
未完待续!