BetaFlight模块设计之十九:摄像头按键控制模拟任务分析

Posted lida2003

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BetaFlight模块设计之十九:摄像头按键控制模拟任务分析相关的知识,希望对你有一定的参考价值。

BetaFlight模块设计之十九:摄像头按键控制模拟任务分析

基于BetaFlight开源代码框架简介的框架设计,逐步分析内部模块功能设计。

摄像头按键控制模拟任务

描述:主要通过摄像头OSD控制引线,使用PWM的方式模拟电压,从而触发摄像头内部配置菜单。

注:模拟按键触发,主要通过OSD菜单(processRcStickPositions)或者Telemetry MSP协议(mspProcessInCommand)进行处理。

 ├──> 初始化
 │   ├──> [v]硬件初始化cameraControlInit
 │   └──> [v]业务初始化pgResetFn_cameraControlConfig
 ├──> 任务
 │   ├──> [x]实时任务
 │   ├──> [x]事件任务
 │   └──> [v]时间任务[TASK_CAMCTRL] = DEFINE_TASK("CAMCTRL", NULL, NULL, taskCameraControl, TASK_PERIOD_HZ(5), TASK_PRIORITY_LOW),
 ├──> 驱动
 │   ├──> [x]查询
 │   └──> [x]中断
 └──> 接口
     └──> void cameraControlKeyPress(cameraControlKey_e key, uint32_t holdDurationMs)

摄像头按键控制模拟原理

逻辑就是通过PWM占空比来模拟不同的电压输出来模拟摄像头原有控制板功能逻辑

从技术实现角度和代码层面分析,摄像头模拟控制存在以下三种方式:

  1. CAMERA_CONTROL_MODE_HARDWARE_PWM // 硬件PWM方式采用占空比模拟按键
  2. CAMERA_CONTROL_MODE_SOFTWARE_PWM // STM32 F1 F3 F4支持软件模拟PWM;STM32 F7 H7 G4不支持
  3. CAMERA_CONTROL_MODE_DAC // 尚未实现(4.3版本)

函数分析

taskCameraControl

主任务确保只有在未解锁的情况下才可以模拟。

taskCameraControl
 ├──> <ARMING_FLAG(ARMED)>
 │   └──> return
 └──> cameraControlProcess

cameraControlProcess

按键模拟通常来说,大致有几个动作,而这个摄像头控制按键模拟比较简单,有些是不需要的:

  1. 【MUST】push (action)
  2. 【MUST】release (action)
  3. 【NO NEED】click = push + hold(a short period) + release
  4. 【NO NEED】double click
  5. 【NO NEED】long push = push + hold(a long period)

这里主要为了模拟一个按键释放的过程。

cameraControlProcess
 └──> <endTimeMillis && currentTimeUs >= 1000 * endTimeMillis>
     ├──> <CAMERA_CONTROL_MODE_HARDWARE_PWM == cameraControlConfig()->mode>
     │   └──> *cameraControlRuntime.channel.ccr = cameraControlRuntime.period;  //周期到了恢复默认电平,模拟释放按键
     ├──> <CAMERA_CONTROL_MODE_SOFTWARE_PWM == cameraControlConfig()->mode>
     │   └──> ;
     └──> endTimeMillis = 0;

注:cameraControlKeyPress是通过PWM占空比来调整分压的电压值,从而模拟实际电阻按键分压板的效果。

以上是关于BetaFlight模块设计之十九:摄像头按键控制模拟任务分析的主要内容,如果未能解决你的问题,请参考以下文章

BetaFlight模块设计之十七:pinioBox任务分析

BetaFlight模块设计之十二:电传任务分析

BetaFlight模块设计之十四:高度计算任务分析

BetaFlight模块设计之十三:Gyro过滤任务分析

BetaFlight模块设计之十八:图传模块同步任务分析

BetaFlight模块设计之十:磁力计任务分析