# 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