STM32系列(HAL库)——F103C8T6 控制SG90舵机
控制 系列 STM32 HAL 舵机
2023-09-11 14:21:44 时间
1.软件准备
(1)编程平台:Keil5
(2)CubeMX
2.硬件准备
(1)F1的板子,本例使用经典F103C8T6
(2)一个捡来的舵机
(3)ST-link 下载器
(4)杜邦线若干
3.关于舵机控制原理
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
4.CubeMX配置
(1)芯片选择
(2)配置RCC、SYS、时钟树
配置RCC
配置SYS
配置时钟树
(3)配置定时器产生PWM波形
此时产生PWM波形频率:72M / 719 / (1999+1) = 50HZ
波形周期:1 / 50 = 20ms
初始占空比为:0%
(4)设置路径、生成代码工程
5、Keil5代码
(1)main函数
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//***定时器初始化
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
int i=1000; //循环时间间隔1s
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,50); //相当于一个周期内(20ms)有0.5ms高脉冲
HAL_Delay(i);
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250); //相当于一个周期内(20ms)有2.5ms高脉冲
HAL_Delay(i);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
可以通过修改句柄__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250)里的参数可以实现舵机角度控制。
6.接线图及效果
本例程源码下载:本例程源码下载:点击跳转
相关文章
- UDP数据转发解决WiFi与有限以太网之间控制命令传递:RGBLink
- LXD 2.0 系列(四):资源控制
- RHCSA 系列(十一): 使用 firewalld 和 iptables 来控制网络流量
- 《OpenStack实战》——1.3 关联OpenStack及其控制的计算资源
- SwiftUI 如何通过Button控制NavigationView的切换
- Spring Security 实战干货:动态权限控制(下)实现
- iOS开发系列之远程控制事件
- STC8H8K系列汇编和C51实战——开关控制定时器秒表(汇编版)
- 【正点原子FPGA连载】第三章GPIO之EMIO按键控制LED实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
- Java多线程编程— 概念以及经常使用控制
- python使用pexpect与screen进行交互控制启动ffmpeg
- PHP输出控制函数(ob系列函数)
- FFmpeg的使用——PHP转换视频、截取视频以及JW Player播放器控制