栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

BetaFlight模块设计之十九:摄像头按键控制模拟任务分析
  • 摄像头按键控制模拟任务
  • 摄像头按键控制模拟原理
  • 函数分析
    • taskCameraControl
    • cameraControlProcess

基于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
 ├──> 
 │   └──> 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
 └──> = 1000 * endTimeMillis>
     ├──> mode>
     │   └──> *cameraControlRuntime.channel.ccr = cameraControlRuntime.period;  //周期到了恢复默认电平,模拟释放按键
     ├──> mode>
     │   └──> ;
     └──> endTimeMillis = 0;

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号