
crsf转换8/12通道pwm
简介
CRSF协议信号转为PWM信号,用于航模遥控控制信号转换。STM32F103C8
简介:CRSF协议信号转为PWM信号,用于航模遥控控制信号转换。STM32F103C8开源协议
:GPL 3.0
描述
CRSF转换PWM板说明
CRSF协议信号转为PWM信号。用于航模遥控控制信号转换,黑羊TBS、ELRS等接收机一般输出crsf信号给飞控板,经过此转换后拆分各个通道单独的PWM控制信号,接到各个舵机执行设备。
固件为capnBry网友的开源项目:CRSevorF
,本人根据网友分享和代码中引脚定义制作了PCB硬件,以及分享使用经验技巧。
使用
- 嘉立创打板
- 查看bom、ibom.html采购元件
- 焊接,推荐
PTC加热台
低成本‘烧烤’工艺 - 硬件检测
- 烧录固件
- 连接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
文件:
-
C8改C6
board = genericSTM32F103C6
-
添加#注释掉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` 。
-
方案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
-
修改
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
- 修改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
设计图

BOM


评论