跳转至

红点激光器(Laser)设备组件

理论

RoboMaster RL35 红点激光器是专为 RoboMaster 机器人设计的一款辅助瞄准设备,可发射出点状、出瞳光束为 5 mm 的红色激光以辅助瞄准,如下图所示:

image-20221207205128088

使用时,将电源线(红色为正极,黑色为负极)接入开发板电压为 5V 的直流电源接口。可以直接操作引脚来开关设备;或通过 PWM 调节占空比以改变输出电压,来控制红点激光器亮度(对预分频值没有要求)。

以 RoboMaster 开发板 C 型为例,板上已集成一个可控的激光专用 5V 电源接口,如下图所示:

image-20221207204102515

对应的开关控制 IO 为 PC8,PWM 由 TIM3 CHANNEL3 输出。

快速开始

组件源码仓库地址:https://github.com/ZJU-HelloWorld/HW-Components

外设驱动配置

在使用 PWM 波控制红点激光器时,使用 CubeMX 配置时将对应定时器调整至合理频率(如 1kHz)。例如对于RoboMaster 开发板 C 型板载的红点激光器,驱动流程如下:

  • 对于 TIM3,查看数据手册可知其挂载在 APB1 总线上,时钟频率 84MHz,为达到 1kHz 的频率 ,可将预分频值(Prescaler)设置为 83,计数周期(Counter Period)设置为 999。

image-20231210160415

使用前准备

使用前需要做以下准备:

  • config.cmake 文件中设置 use_hwcomponents_devices_laser 选项为 ON,开启该设备文件的编译,若为 OFF 则根驱动配置需求在 CMakeLists.txt 文件中重配置为 ON

示例

在项目中引用头文件:

C++
1
2
3
#include "laser.hpp"

namespace hw_laser = hello_world::laser;

实例化一个红点激光器设备并初始化,默认使能,如:

C++
1
2
3
hw_laser::Laser* laser_ptr = nullptr;

laser_ptr = new hw_laser::Laser(&htim3, TIM_CHANNEL_3, lumin);

设定红点激光器亮度百分数(0 - 100):

C++
float lumin = 50; // 设置亮度百分数为50%
laser_ptr->setLuminPct(lumin);

注意:由于内部使用了硬件句柄,因此如果计划将实例作为全局变量时(全局变量初始化时对应的硬件句柄可能会还未初始化完毕),建议采取一下方法:

  1. 声明指针,后续通过 new 的方式进行初始化。
  2. 声明指针,后续通过返回函数(CreateXXXIns)中的静态变量(因为该变量只有在第一次调用该函数时才会运行初始化程序)进行初始化。
  3. 使用无参构造函数,后续调用 init 方法进行初始化。
  4. 使用无参构造函数,后续使用拷贝赋值函数或是移动赋值函数进行初始化。

附录

版本说明

版本号 发布日期 说明 贡献者
2022.12.07 发布红点激光器组件 薛东来
2023.12.10 发布红点激光器组件(Cpp) 蔡坤镇