从零开始动手DIY一台桌面宠物狗(直播帖手动滑稽.jpg)——【三】

在这里插入图片描述

前言

昨天添加了I2C的驱动代码,OLED的表情代码
烧录进入初步测试一下,看起来基本正常。
第一个表情基本正常显示了。今天添加上PWM相关代码和接口
在这里插入图片描述

舵机操作部分

添加servo.c和.h文件,在main中去调用设置角度的接口完成舵机角度的设置。
我们使用TIM2定时器,左右舵机的控制定时器, TIM2的四路通道作为四个舵机的PWM输出口。

#include "servo.h"
#include "tim.h"

void Servo_Init(void) {
    // 启动 PWM 输出
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
}

void Servo_SetAngle(TIM_HandleTypeDef *htim, uint32_t Channel, uint8_t angle) {
    // 将角度转换为 PWM 占空比
    uint32_t pulse = (angle * 2000 / 180) + 500;
    __HAL_TIM_SET_COMPARE(htim, Channel, pulse);
}

main函数测试代码,四个舵机设置成不同的角度。

  // 设置舵机角度
  Servo_SetAngle(&htim2, TIM_CHANNEL_1, 90);
  Servo_SetAngle(&htim2, TIM_CHANNEL_2, 45);
  Servo_SetAngle(&htim2, TIM_CHANNEL_3, 135);
  Servo_SetAngle(&htim2, TIM_CHANNEL_4, 180);

总结

代码已上git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值