J20航模遥控器开源项目系列教程(一)制作教程 | 基础版V1.0发布,从0到1

我们的开源宗旨:自由 协调 开放 合作 共享
拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~
和一群志同道合的人,做自己所热爱的事!
项目开源地址:https://github.com/Cai-Zi/STM32_RC_Transmitter
QQ交流群:1091996634 【密码:J20】
经过近一个月的开发,基础版V1.0终于可以发布了,基础的8通道遥控功能已经实现,能满足日常飞行需求。更多人性化的功能还有待完善,接下来会持续维护。基础版教程分为了三篇文章——制作教程、使用说明、开发说明,面向不同人群的需求,大家各取所需哈~
之所以称为基础版,是因为这个版本的制作成本和门槛都比较低,面向初学者。采用最小系统板,不用焊接太多芯片,9元的烙铁基本能搞定。PCB文件待我们的项目成员画好后再发布,可加QQ群实时关注动态哈~


1. 购物清单
你的烙铁是否已经饥渴难耐,不要着急,“兵马未动,粮草先行 ”,我们先来购物一波~
以下购物列表的商品基本可以一站式购齐,如果要推荐一家电子店铺的话,那就是优信电子了,每种商品基本都是比较便宜的,6块6包邮解君愁!
1. STM32F103C8T6最小系统板*2

2. USB转TTL模块*1(串口监视用)

或下面这种冷启动的,我们不用它下载程序,也能满足需求

3. ST-LINK V2仿真器下载器*1
调试STM32性价比极高,可烧写程序,可断点调试
如果你手上有旧遥控器的话,直接改造也可。
这是笔者找遍全网性价比最高的遥控器外壳了,15元不包邮,上面的遥杆基本能满足需求。

这款遥杆和上面遥控器上的同款,都是自动回中的,不适合作为油门的遥杆,所以经济条件允许的话,还是直接买上面的遥控器外壳吧~

极不推荐那种蘑菇头的遥杆,手感太差,容易炸鸡!

5. 无线模块(NRF24L01)≥2
集芯微这家一个ID可购买两个样品,价格较低,再配个天线即可。

铜管天线配上面的模块(IPEX接头)
胶棒天线用于下面的模块(内针)


接收机端可选用这种100m的,两种引脚定义一样。
- 遥控器端用2000m的,接收机端用2000m的——通信距离在1000m以上
- 遥控器端用2000m的,接收机端用100m的——通信距离在500m左右
- 遥控器端用100m的,接收机端用100m的——通信距离在50m左右
6. 电解电容100uF*2(用来稳压)

7. 独石电容0.1uF*2(用来滤波),又称104电容

8. 金属膜电阻1k*2、10k*3、20k*1



9. 电位器50k*2、电位器帽子*2、钮子开关*2(三脚三档)
辅助通道用,两者总数量4个,可互相替代,看个人需求



10. 轻触开关*8,按键帽*8
轻触开关选用7mm高的,便于安装按键帽


11. 三极管SS8050(NPN型)*2

12. 洞洞板(7*9cm)*2

13. XH2.54mm插针插座若干


14. L7805CD2T稳压管*1(用于降压到5V)

15. AMS1117-3.3稳压降压芯片*2(用于降压到3.3V)

16. 有源蜂鸣器5V的(接电即响)

17. OLED显示屏0.96寸,IIC通信

18. 旋转编码器EC11(本遥控器用户交互的精髓)

19. 肖特基二极管(用来续流)

20. 三脚拨动开关(作为电源开关)

OK,现在您的购物车应该已经加满了,清空它吧~等待快递期间先看看电路图
这里不得不提一句,DIY并不一定能省钱,对于初学者来说,买一套电子元件和烙铁,甚至比买成品更贵。省钱只是DIY的副作用,感受DIY的乐趣才是第一位的!
2. 电路焊接
1. 遥控器端
遥控器端的电路比较复杂,先来看原理图。几乎把所有的引脚全用光了,可以说榨干了这个最小系统板。它提供了10个ADC的引脚,这里一个作为遥控器电池的电压检测,一个被编码器占用,剩下8个全部用作通道采集,所以基础版是8通道的遥控器。没有更多ADC可用,通道也就无法扩充了。所以进阶版和豪华版会采用其他芯片,以实现更多通道!

有网友说,看不懂这种模块化的原理图,更习惯看所有线连在一起的。
好的,没有问题,这里也提供实物连接图~ (笔者画了一上午)


好的,现在映入您眼帘的是一团乱麻,尽情飞线吧~(大概六七十根线)
要注意的是,无线模块和STM32最小系统板之间的连线一定要连接好,最好用排线,尤其是NRF_SCK、NRF_MISO、NRF_MOSI三根线是SPI通信主要的数据线,应避免缠绕,防止有寄生电容什么的干扰通信。
这里复用了ch1left【home键】、ch2up【返回】、ch2down【确定】、ch4left【数值-】、ch4right【数值+】五个微调按键,OLED屏幕显示主界面的时候,是微调功能;非主界面的时候,作为【】里面的功能。为了操作方便,可复制这几个按键,尤其是返回键和确定键,和旋转编码器放到一起,怎么舒服怎么来。
2. 接收机端
接收机端相比来说就简单多了,先看原理图。这里暂时还是用的最小系统板,体积比较大,现在只是作为验证电路。我们计划开发STM8/STM32/C51三种类型的接收机,针对体积小和多通道等不同需求,等发布后再制作接收机也可以。

无线模块竖着放

横着放

也可以倒着放

焊接完成后,用刷子(旧牙刷即可)蘸着酒精(家里的白酒也可)或者洗板水,刷一下焊点和走锡,去除焊接遗留的杂质,防止对电路产生不必要的干扰。
最后,用万用表的蜂鸣档测试各线路是否连接正确,尤其是GND和VCC!


3. 烧写固件
如果你的电脑安装了keil软件,那么编译工程再进行烧录即可,这里不再赘述,可参考笔者的这篇博客:
https://blog.csdn.net/weixin_42268054/article/details/106878860
如果你的电脑没有keil软件,又不打算开发调试源代码,那么这里推荐使用STM32 ST-LINK Utility软件。软件介绍、下载、安装、使用请参考strongerHuang的这篇博客:
https://blog.csdn.net/ybhuangfugui/article/details/52597133
先将ST-LINK下载器连接STM32开发板,接线如下:
GND 电源地
3V3 接3.3v
SWCLK 接DCLK
SWDIO 接DIO
打开软件,点击该按钮进行连接;

点击Target》Program...;

点击Browse,打开遥控器端或者接收机端的hex文件,点击Start进行烧写;

看到提示信息即说明烧写完成。

4. 常见问题汇总与解答
遥控器供电方案
由于使用L7805CD2T降压芯片来获得5V,它的输入电压是5-35V。

而一节锂电池(比如18650锂电池)的电压是3.7V-4.2V,所以要串联2节或者3节锂电池才能达到电压的要求。但是电池串联起来,平衡充电是个问题,所以这里笔者的建议是使用充放电一体模块(下图)。 用一节锂电池或者多节并联即可,3.7V通过这个模块升压到5V—7V,再输入给L7805CD2T,直接使用这个模块的microUSB口充电即可。

什么是通道,什么是8通道?
通俗来说,一个通道指的就是一个电位器或者钮子开关,遥控器所用的电位器遥杆实际上包含的是XY两个方向的电位器,所以一个遥杆包含的是两个通道,左右手两个遥杆加起来就是前4个通道,这4个通道是主要的控制通道,分别控制飞机的横滚、俯仰、油门和航向,对于固定翼来说,就是副翼、升降舵、油门和方向舵。而后4个通道是辅助通道,由单独的电位器或者钮子开关组成,用来控制飞机的模式、解锁、控制云台等等。
对于MCU(Microcontroller Unit,简称MCU,即微控制单元,又称单片微型计算机(Single Chip Microcomputer )或者单片机,我们使用的STM32/STM8/C51都可以称为MCU)来说,一个通道就是一个ADC引脚,电位器或者钮子开关的作用就是让用户操作产生电压的变化,而ADC的作用就是采集电压的大小,从而得到用户的输入值,再进行下一步的处理。
hex文件大于64k,为什么能烧录进FLASH=64k的最小系统板?
实际上hex文件包含了许多信息,要经过编译成二进制文件之后才会烧录进MCU,烧录进MCU的文件大小大约是hex文件大小的一半。要想看有多少烧录进MCU,可查看keil软件编译出来的信息,其中Code+RO Data+RW Data会烧录进FLASH中,18140+9468+2124=29732(再除以1024,约29k),程序运行的时候:RW Data + ZI Data。

5. 文件下载
固件: J20RC_ReceiverBase_V1.0.hex
J20RC_TransmitterBase_V1.0.hex
源代码: [KEIL5工程源代码] 文件夹
原理图: J20航模遥控器_基础版V1.0原理图.pdf
开发相关:[常用软件] 文件夹
STM32F103C8T6数据手册_V10.pdf
STM32中文参考手册_V10.pdf
这里提供四种下载方式,每种方式各有利弊,大家自行选择哈~
- CSDN(下载速度快,但是需要积分)
https://download.csdn.net/download/weixin_42268054/12679008
百度网盘(下载速度慢,但是可白嫖)
链接:https://pan.baidu.com/s/1rt9wa9yzWnbCm6uXZxR6jw
提取码:J20R
- QQ群(下载速度快,可白嫖)
QQ交流群:1091996634 【密码:J20】
- Github(下载速度慢,可白嫖,可实时获取更新)
https://github.com/Cai-Zi/STM32_RC_Transmitter
6. 焊接技巧
(1)烙铁头保养
士兵要保养自己的钢枪,学生要爱护自己的笔杆子,而对于电子爱好者,就是要保养好烙铁了。
新买来的烙铁,在第一次使用时,需要先接电待温度达到能融化焊锡,给烙铁头均匀包裹焊锡,这样能防止烙铁头氧化,确保烙铁头沾锡。
每次使用完烙铁,需要清洁烙铁头(使用湿润的高温海绵或者清洁钢丝球),然后均匀涂上焊锡。
不要拿烙铁烫塑料!不要拿烙铁烫塑料!不要拿烙铁烫塑料!

(2)焊接
焊接洞洞板和插针时,笔者喜欢用尖头;焊接贴片元件,使用刀头,可以根据自己的习惯来。
焊接时,确保烙铁头沾锡,这样能使焊锡浸润焊点,让焊点得到均匀快速地升温。烙铁头接触焊点3-5秒后,再将焊锡丝怼到焊点上,最后拿开烙铁。
焊接教学视频 https://www.bilibili.com/video/BV1eJ411K7rM
(3)走锡
方法一:先将两个点焊在一起,中间间隔一个点,待焊锡冷却后,再回来将剩下的一个点焊上。
如果直接将所有点连在一起,会导致焊锡都处于液态,全部粘连到了一起,不易控制焊锡走向。


方法二:借助铜线控制走向,先将铜线固定,再走锡就比较容易了。(可以使用电阻上多余的线)



(4)清洗
焊接完成后,用刷子(旧牙刷即可)蘸着酒精(家里的白酒也可)或者洗板水,刷一下焊点和走锡,去除焊接遗留的杂质,防止对电路产生不必要的干扰。
最后,用万用表的蜂鸣档测试各线路是否连接正确,尤其是GND和VCC!
写在最后
首先感谢项目中所有的贡献者!(截止2020.08.01)
* 蔡子CaiZi(B站up主) https://space.bilibili.com/349576976
* A-XIN;
* 小何;
* ZL_Studio(B站up主)https://space.bilibili.com/364251289
* 王天天@WangTiantian139 https://wangtiantian139.github.io/
* 刘桶桶;
* 简繁;
* 王博;
* 与非门;
* Talons;
* 大米粥;
* P a S S ||;特别感谢正点原子提供的STM32例程和开源社区http://www.openedv.com/
由于笔者学业繁忙,时间有限,无法投入过多的精力,所以欢迎更多学有余力的模友,加入到项目的开发和维护工作中哈,现在基础的程序框架已经搭建完成,剩下的要做的就是填充、优化和扩展了,有意愿的模友加群后请私聊群主喔~
QQ交流群:1091996634 【密码:J20】
本文欢迎转载,请注明出处哈~

J20航模遥控器开源项目系列教程(一)制作教程 | 基础版V1.0发布,从0到1的更多相关文章
- J20航模遥控器开源项目系列教程(七)PPM输出 | 关于按键版本和旋转编码器版本的兼容说明、布局建议 | 关于MINI版PCB的兼容说明
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/J ...
- J20航模遥控器开源项目系列教程(五)| 制作STM32F0接收机,8路PWM输出,SBUS输出,PPM输出 | 加密狗无线化,畅玩飞行模拟器
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/J ...
- J20航模遥控器开源项目系列教程(二)使用说明 | 遥控器制作完成了,怎么用?
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- J20航模遥控器开源项目系列教程(四)PCB打印 | 嘉立创PCB下单教程,5元顺丰包邮解君愁!
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/J ...
- J20航模遥控器开源项目系列教程(三)开发说明 | 想要自己改造程序,扩充功能,怎么实现?
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- J20航模遥控器开源项目系列教程(六)亚克力外壳制作
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/J ...
- 致敬学长!J20航模遥控器开源项目计划【开局篇】 | 先做一个开机界面 | MATLAB图像二值化 | Img2Lcd图片取模 | OLED显示图片
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- 来自GitHub的优秀开源项目系列
开发必看: 如何设计大型系统? 架构师技术图谱. 互联网Java工程师进阶扫盲 Java学习指南 Java工程师成神之路 有趣开源项目: 中华古诗词数据库 表情包博物馆
- Jeasyframe 开源框架 稳定版 V1.5 发布
这是Jeasyframe开源框架的第一个稳定版本,感谢一起帮忙测试并给予反馈的网友们. 框架官网:http://www.jeasyframe.org/ 产品介绍: Jeasyframe开源框架是基于S ...
随机推荐
- 番外:socketserver用法
进击のpython ***** 番外:socketserver使用 是不是被一般写法,多进程写法,多线程写法甚至是协程写法搞的不可开交 云里雾里,仿佛将要放弃~再配上服务器要服务多个客户端 完蛋了,全 ...
- laravel开发调试工具laravel-debugbar的安装
一.使用 Composer 安装该扩展包 composer require barryvdh/laravel-debugbar --dev 二.(可选)修改配置文件app/config.php Lar ...
- Python os.open() 方法
概述 os.open() 方法用于打开一个文件,并且设置需要的打开选项,模式参数mode参数是可选的,默认为 0777.高佣联盟 www.cgewang.com 语法 open()方法语法格式如下: ...
- Python os.lchflags() 方法
概述 os.lchflags() 方法用于设置路径的标记为数字标记,类似 chflags(),但是没有软链接.高佣联盟 www.cgewang.com 只支持在 Unix 下使用. 语法 lchfla ...
- PHP fputs() 函数
定义和用法 fputs() 函数将内容写入一个打开的文件中. 函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行. 如果函数成功执行,则返回写入的字节数.如果失败,则返回 FAL ...
- P5468 [NOI2019]回家路线 斜率优化 dp
LINK:回家路线 (文化课 oi 双爆炸 对 没学上的就是我.(我错了不该这么丧的. 不过还能苟住一段时间.当然是去打NOI了 这道题去年同步赛的时候做过.不过这里再次提醒自己要认真仔细的看题目 不 ...
- Python PIL方式打开的图片判断维度
1. PIL方式打开的图片判断维度 好久没更新啦,哈哈哈~~!今天跟宝宝们分享一篇如何判断灰度图像和彩色图像维度的方法.我们在读取灰度图像和彩色图像时,发现读取出来的图片维度不同,当我们要做后续 ...
- Java线程池的了解使用—筑基篇
前言 Java中的线程池是一个很重要的概念,它的应用场景十分广泛,可以被广泛的用于高并发的处理场景.J.U.C提供的线程池:ThreadPoolExecutor类,可以帮助我们管理线程并方便地并行执行 ...
- What is 测试金字塔?
我的女朋友是一名测试工程师,但她之前却不知道测试金字塔的概念,为此我曾经在家里的白板上画了一个图一层一层给她讲解过.我和同事在给团队面试测试和开发岗位时,也会必问到这个问题,想到可能有很多开发童鞋都不 ...
- 基于asp.net core 从零搭建自己的业务框架(三)
前言 根据业务处理部分,单体马上就能得知错误与否,快速做出处理,而分布式系统,会因为各种原因,无法如同单体一样立刻处理,所以这个时候需要 处理异常 的,做 补偿.转移.人工干预. 当然也可以直接在消费 ...
