普冉PY32系列(十) 基于PY32F002A的6+1通道遥控小车I - 综述篇
目录
- 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介
- 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境
- 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单
- 普冉PY32系列(四) PY32F002A/003/030的时钟设置
- 普冉PY32系列(五) 使用JLink RTT代替串口输出日志
- 普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD
- 普冉PY32系列(七) SOP8,SOP10,SOP16封装的PY32F002A/PY32F003管脚复用
- 普冉PY32系列(八) GPIO模拟和硬件SPI方式驱动无线收发芯片XN297LBW
- 普冉PY32系列(九) GPIO模拟和硬件SPI方式驱动无线收发芯片XL2400
- 普冉PY32系列(十) 基于PY32F002A的6+1通道遥控小车I - 综述篇
- 普冉PY32系列(十一) 基于PY32F002A的6+1通道遥控小车II - 控制篇
- 普冉PY32系列(十二) 基于PY32F002A的6+1通道遥控小车III - 驱动篇
基于PY32F002A的6+1通道遥控小车I - 综述篇
以下介绍基于 PY32F002A 和 XL2400 的低成本无线遥控实现. 因为内容较多, 分三篇说明.
实物图
先放上最终的实物
遥控器
- 遥控器包含两个十字电位器, 两个旋钮电位器, 六个轻触开关和两个滑动开关, 显示部分为12864LCD.
- 两个十字电位器, 两个旋钮电位器组成了六个模拟通道. 模拟通道数量受PY32F002A的PIN脚限制, 全部用上可以做到八个, 因为我想保留SWD口, 所以只做了六个. 普通应用只需要双摇杆加两个双调节, 基本够用了.
- 第七个通道是一组开关量, 六个轻触开关和两个滑动开关共8个bit, 是通过74HC165扩展实现的, 当前的设计只用了一片74HC165, 采集8个开关信号, 通过串联更多的74HC165可以扩展到16个或24个开关信号.
- 无线模块是可插拔设计, 便于替换XL2400和XN297LBW, 以及测试不同天线的性能
驱动器
- 中间9个通道为高速IO通道, 直接关联到PY32F002A的PIN脚, 这些PIN都关联到TIM1或TIM3(看下面的PIN分配表), 可以设置为原生PWM输出
- 两侧的8PIN排针一共16个通道为扩展IO通道, 使用74HC595扩展产生, 可以输出开关量或低速PWM
- 当前的小车的电机控制仅用到扩展IO
- 无线模块是可插拔设计
- 驱动端可以控制的通道并不受6+1限制, 驱动器并不局限于驱动小车, 9路高速IO加16路扩展IO可以驱动很多设备
- 模块的螺丝孔位是针对这种小车底盘设计的, 但是只能上一边, 不能全上
设计目标
看完实物, 回到最初的设计思路. 因为是从零开始, 在这一阶段设计中为快速验证, 先确定结构, 避免复杂设计, 只考虑数显和单向传输, 不考虑回传数据.
无线控制端
- 双十字摇杆加双调节, 需要至少共6个模拟通道
- 2+6或4+4开关按键, 共8个开关信号
- LCD屏显
电机驱动端
- 至少8个高速IO通道, 支持原生PWM信号输出
- 16个低速IO通道, 支持开关信号输出, 或模拟PWM信号输出
硬件部分
主要组件
硬件选型
- MCU: PY32F002A TSSOP20
- 2.4GHz: XL2400 or XN297LBW
- IO Ext: 74HC165, 74HC595
- LCD: ST7567 12864
- Motor Driver: YX-1818
PIN分配
控制板
- 为保持调试的便利, 保留SWD口PA13, PA14作为SWD, SWC使用, 在开发中使用JLink RTT输出日志. JLink RTT日志输出可以参考这篇 使用JLink RTT代替串口输出日志.
- 将NRST口复用为IO, 屏蔽RST功能, 参考 SOP8,SOP10,SOP16封装的PY32F002A/PY32F003管脚复用
- 使用ST7567是因为正好手里有不少1寸的ST7567LCD屏, 而且能和XL2400复用SPI口(其实也就复用了两个PIN), 可以换成I2C接口的SD1306.
- XL2400使用了硬件方式的SPI通信, 具体可以看前一篇GPIO模拟和硬件SPI方式驱动无线收发芯片XL2400
- ST7567和XL2400合用一个硬件SPI口, 通信时使用PB2和PB3进行选择
- 模拟信号的输入使用 PA0, PA1, PA2, PA3, PA4, PA5 这六个ADC通道
- 开关信号的输入使用一片74HC165进行转换, 理论上可以级联2~3片, 每片能扩充出8个开关信号
具体的PIN分配如下
ST7567 | XL2400 | 摇杆1 | 摇杆2 | 调节1 | 调节2 | 74HC165 | ||
---|---|---|---|---|---|---|---|---|
PA0 | X | |||||||
PA1 | x | |||||||
PA2 | X | |||||||
PA3 | X | |||||||
PA4 | X | |||||||
PA5 | X | |||||||
PA6 | CLK | |||||||
PA7 | QH | |||||||
PA13 | SWD | |||||||
PA14 | SWC | |||||||
PB0 | RESET | |||||||
PB1 | DC/AO | |||||||
PB2 | CSN | |||||||
PB3 | CSN/CE | |||||||
PF0 | SCK | SCK | ||||||
PF1 | DATA | |||||||
PF2 | NRST | MOSI | DATA | |||||
PF4/PB6 | BOOT0 | SH/LD |
驱动板
- 保留SWD口PA13, PA14作为SWD, SWC
- 将NRST口复用为IO, 屏蔽RST功能
- ST7567和XL2400合用一个硬件SPI口, 通信时使用PB2和PB3进行选择
- 一共9个高速IO输出通道, 都有对应的时钟, 可以产生PWM信号. 使用PIN脚: PA0, PA1, PA2, PA3, PA6, PA7, PB0, PB1, PB3
- 使用两片74HC595作为IO输出扩展, 产生16个低速IO输出通道
具体的PIN分配如下
XL2400 | 原生PWM | 74HC595 | ||
---|---|---|---|---|
PA0 | TIM1_3 | |||
PA1 | TIM1_4 | |||
PA2 | TIM3_1 | |||
PA3 | TIM1_1 | |||
PA4 | SER/DS | |||
PA5 | SRCLK/SHCP | |||
PA6 | TIM3_1 | |||
PA7 | TIM3_2 | |||
PA13 | SWD | |||
PA14 | SWC | |||
PB0 | TIM3_3 | |||
PB1 | TIM3_4 | |||
PB2 | CSN | |||
PB3 | TIM1_2 | |||
PF0 | SCK | |||
PF1 | DATA | |||
PF2 | NRST | DATA | ||
PF4/PB6 | BOOT0 | RCLK/STCP |
电路原理图
遥控器
- 遥控器使用了一片PY32F002A TSSOP20和一片74HC165D SOP16,
- 手柄输入使用的是两个16x16的摇杆电位器. 摇杆电位器有13x13和16x16两种尺寸, 如果需要使用13x13可以自行更换.
- 电源部分使用的是一节18650. 除了XL2400耐压为3.6V以外, PY32F002A和其它元件都可以工作在5V, 因为满电电压会超过4V, 为了防止损坏XL2400, 这里使用一颗二极管做简单降压兼反接保护. 经实测验证 XL2400 可以工作在 3.8V.
- 如果需要严格意义上的3.3V输入, 可以替换成低压降的XC6206P332MR.
- 微动开关都加了上拉电阻
- 两侧摇杆电位器的开关和对应最外侧的开关相通, 按压等效
- 遥控面板不包含无线模块
驱动控制
- 驱动端使用的是一片 PY32F002A TSSOP20 和两片 74HC595D SOP16
- PY32F002A 和 74HC595D 供电由一片AMS1117提供, 工作在3.3V. 因此电源输入不能低于4V, 不能使用单节18650
- 电机供电部分与电源输入直通. 为避免复杂度, 电路中未内建DC-DC转换, 如果电机/舵机需要5V或6V的准确电压, 需要外接DC-DC模块供电
- 电源部分有一个1A的自恢复保险
- 控制板不包含无线模块, 不包含电机驱动
电机驱动
电机驱动使用的是 YX-1818, 支持两组有刷直流电机, 外围元件简单, 也可以采用成品的 MX1616 驱动模块或者L9110, L298等. 驱动玩具DC电机只需要几百毫安, 选择哪种都可以.
无线模块
无线部分使用的是 XL2400, 也可以换成XN297LBW, 这两个芯片的电路是兼容的. 具体可以参考GPIO模拟和硬件SPI方式驱动无线收发芯片XL2400, 这里的电路一样但是PCB部分做了改进, 占用尺寸更小. 注意模块的PIN脚和遥控器, 驱动板的排针孔位是对应的, 如果买成品的XN297LBW模块, 需要自行修改PIN脚顺序.
PCB
在一块 10cm x 10cm 的 PCB 上集中了上面提到的所有模块, 可以在嘉立创上一次打印, 但是需要自行分割. PCB上包含的内容
- 遥控面板 * 1
- 驱动控制板 * 1
- 电机驱动 * 2
- 无线模块 * 3
正面
反面
参考
- PY32F002A+Ci24R1遥控器
在立创开源广场搜到的一个同类设计, 参考了部分元件选择(例如YX-1818驱动).
普冉PY32系列(十) 基于PY32F002A的6+1通道遥控小车I - 综述篇的更多相关文章
- 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- 普冉PY32系列(七) SOP8, SOP10和SOP16封装的PY32F003/PY32F002A管脚复用
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- 普冉PY32系列(四) PY32F002/003/030的时钟设置
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- 普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 PY32F0系列上市其实相 ...
- 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 以下介绍PY32F0系列在 ...
- 普冉PY32系列(五) 使用JLink RTT代替串口输出日志
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- JavaScript系列-----对象基于哈希存储(<Key,Value>之Value篇) (3)
JavaScript系列-----Objectj基于哈希存储<Key,Value>之Value 1.问题提出 在JavaScript系列-----Object之基于Hash<Key, ...
- JavaScript系列-----对象基于哈希存储(<Key,Value>之Key篇) (1)
1.Hash表的结构 首先,允许我们花一点时间来简单介绍hash表. 1.什么是hash表 hash表是一种二维结构,管理着一对对<Key,Value>这样的键值对,Hash表的结构如下图 ...
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
随机推荐
- return true 与 return false的妙用——jQuery
var arr = [1, 3, 5,7,9]; jQuery.each(arr, function(key, value){ if(key === 2){ return true; } consol ...
- Pytorch 最全入门介绍,Pytorch入门看这一篇就够了
本文通过详细且实践性的方式介绍了 PyTorch 的使用,包括环境安装.基础知识.张量操作.自动求导机制.神经网络创建.数据处理.模型训练.测试以及模型的保存和加载. 1. Pytorch简介 在这一 ...
- quarkus依赖注入之五:拦截器(Interceptor)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<quarkus依赖注入> ...
- C#.NET 国密SM3 HASH 哈希 与JAVA互通 ver:20230803
C#.NET 国密SM3 HASH 哈希 与JAVA互通 ver:20230803 .NET 环境:.NET6 控制台程序(.net core). JAVA 环境:JAVA8,带maven 的JAVA ...
- KVM下windows由IDE模式改为virtio模式蓝屏 开不开机
KVM安装Windows默认使用的是qemu虚拟化IDE硬盘模式,在这种情况下,IO性能比较低,如果使用virtio的方式可以提高虚拟机IO性能. 于是我想将这台虚拟机迁移到openstack中管理 ...
- P1830题解
思路: 利用桶存储轰炸区域,双重循环. 在存储轰炸区域时将次数刷新,也就是pos[j][k]=i;. 下面是核心代码: for(int i=1;i<=x;i++) { int x1,x2,y1, ...
- React仿大众点评外卖app
主要使用技术: react react-router4 redux: action.reducer.store管理数据 fetch: 进行数据交互 prismjs : 页面嵌入代码,高亮显示插件 bu ...
- 【RocketMQ】消息的拉取总结
在上一讲中,介绍了消息的存储,生产者向Broker发送消息之后,数据会写入到CommitLog中,这一讲,就来看一下消费者是如何从Broker拉取消息的. RocketMQ消息的消费以组为单位,有两种 ...
- EXE一机一码打包加密大师1.4.0更新-支持导出注册机
EXE一机一码打包加密大师可以对EXE文件进行加密处理,可以让EXE支持一机一码功能,也可以支持静态打开密码功能, 方便开发人员想用户收费. 详细软件使用说明可以查看下面的说明文档: EXE一机一码打 ...
- 云原生(docker jenkins k8s)docker篇
docker (1)架构 ● Docker_Host: ○ 安装Docker的主机 ● Docker Daemon: ○ 运行在Docker主机上的Docker后台进程 ● Client: ○ 操作D ...