黄土马家

crsf convert 8/12 channel pwm

 
Overview

# CRSF转换PWM板说明
CRSF协议信号转为PWM信号。用于航模遥控控制信号转换,黑羊TBS、ELRS等接收机一般输出crsf信号给飞控板,经过此转换后拆分各个通道单独的PWM控制信号,接到各个舵机执行设备。

固件为capnBry网友的开源项目:[CRSevorF](https://github.com/CapnBry/CRServoF "crservof")
,本人根据网友分享和代码中引脚定义制作了PCB硬件,以及分享使用经验技巧。


## 使用
- 嘉立创打板
- 查看bom、ibom.html采购元件
- 焊接,推荐`PTC加热台`低成本‘烧烤’工艺
- 硬件检测
- 烧录固件
* 方法1:直接下载[release](https://github.com/CapnBry/CRServoF/releases)提供的`CRSevorF-F103.Vxx.bin`固件 ,使用stlink V2硬件工具通过STM32 ST-LINK Utility软件刷入。
* 方法2:自行编译,下载[CRSevorF](https://github.com/CapnBry/CRServoF "crservof")源码 xxx.zip,解压后使用VSCODE平台编译&烧录。
- 连接ELRS接收机,5v输入上电
- 对频,ELRS发射推荐设置
* `packt rate`选择`full 100hz`或`full 333hz`
* `telem ratio`选择`std`自动模式
* `switch mode`选择
* 8ch (1-4、6-9CH分辨率1024, 5ch为2段开关)
* 12ch MIX (前4ch分辨率1024, 5ch为2段开关,6-13分辨率512位)
* 16ch rate/2 (1-16ch分辨率512位)
- 指示灯
* 无CRSF接收机连接或接收机未与发射对频时,指示灯长亮。
* 正常转换输出pwm时指示灯不亮。



# 代码部分自定义修改说明
修改源码以达成一些个性化设置、适配硬件,或扩展功能。
修改完成需配合VSCODE编译出固件。

## 2 通道映射修改
1-8 PWM输出默认使用的是crsf接收机的ch 1-4、6-8、12这8个通道,
>constexpr int OUTPUT_MAP[NUM_OUTPUTS] = { 1, 2, 3, 4, 6, 7, 8, 12 };

如果要改成PWM输出与CRSF CH通道一一对应的,需要修改`src/main.cpp`文件:
>constexpr int OUTPUT_MAP[NUM_OUTPUTS] = { 1, 2, 3, 4, 5, 6, 7, 8 };

***TIPS:*** elrs高频头需要使用全分辨率模式 例如 `full 333hz`,但pwm5 依旧是2段开关式输出。


--------------------------------------------------
## 3 电压检测电阻修改
修改`include/target.h`文件,原代码使用`8.2K:1.2K`分压
> #define VBAT_R1 820
> #define VBAT_R2 120

以`10K:1K`为例,改成如下
> #define VBAT_R1 1000
> #define VBAT_R2 100



--------------------------------------------------
## 4 C6T6芯片替代
*使用STM32F103C6T6可以替代C8T6降低成本,但是只能输出8通道PWM*

需要改动`platformio.ini`文件:
1. C8改C6
>board = genericSTM32F103C6

2. 添加#注释掉USB
~~~
build_flags_cdc =
#-DUSBCON
#-DPIO_FRAMEWORK_ARDUINO_ENABLE_CDC
~~~


--------------------------------------------------
## 5 国产XX32芯片替代
直接使用会在upload时报错
~~~
Warn : UNEXPECTED idcode: 0x2ba01477
Error: expected 1 of 1: 0x1ba01477
~~~

解决办法:
- [ ] 方案1:修改cfg文件
  编辑`~/.platformio/packages/tool-openocd/scripts/target/stm32f1x.cfg` 把 `set _CPUTAPID 0x1ba01477` 改为
>set _CPUTAPID 0x2ba01477` 。
- [x] 方案2:修改工程配置文件 *【xi0n9FPV 推荐,已实测】*
  在工程配置文件platformio.ini中[env...]下添加一行
>upload_flags = -c set CPUTAPID 0x2ba01477

示例:
~~~
[env:F103_serial]
extends = env_common
build_flags = ${env_common.build_flags_cdc}
-DTARGET_BLUEPILL
upload_flags = -c set CPUTAPID 0x2ba01477
~~~
- [ ] 方案3: 修改 `stm32f1x.cfg`
  在`swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf` 后添加
>-expected-id $_CPUTAPID -expected-id 0x2ba01477



--------------------------------------------------
## 6 增加通道数达12CH
*默认输出8个通道,可修改达到输出12CH*

1. 修改`include/target.h`文件
增加9-12通道PWM引脚定义,根据作者说明使用硬件定时器,查datasheet使用TIM1的4个引脚PA8-11

>#define OUTPUT_PIN_MAP PA_15, PB_3, PB_10, PB_11, PA_6, PA_7, PB_0, PB_1 // TIM2 CH1-4, TIM3CH1-4

改为:

>#define OUTPUT_PIN_MAP PA_15, PB_3, PB_10, PB_11, PA_6, PA_7, PB_0, PB_1, PA_8, PA_9, PA_10, PA_11 // TIM2 CH1-4, TIM3CH1-4, TIM1CH1-4



2. 修改platformio.ini文件
- 2.1 通道总数
>#define NUM_OUTPUTS 8

改为

>#define NUM_OUTPUTS 12



- 2.2 通道输出序列
>constexpr int OUTPUT_MAP[NUM_OUTPUTS] = { 1, 2, 3, 4, 6, 7, 8, 12 };

改为

>constexpr int OUTPUT_MAP[NUM_OUTPUTS] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };



- 2.3 通道失控保护输出
>1500, 1500, 988, 1500, // ch1-ch4
>fsaHold, fsaHold, fsaHold, fsaNoPulses // ch5-ch8

改成

>1500, 1500, 988, 1500, // ch1-ch4
>fsaHold, fsaHold, fsaHold, fsaHold, // ch5-ch8
>fsaHold, fsaHold, fsaHold, fsaNoPulses // ch9-ch12
参考设计图片
×
 
 
Search Datasheet?

Supported by EEWorld Datasheet

Forum More
Update:2024-11-15 02:46:06

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号