普冉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分配如下

ST7567XL2400摇杆1摇杆2调节1调节274HC165
PA0X
PA1x
PA2X
PA3X
PA4X
PA5X
PA6CLK
PA7QH
PA13SWD
PA14SWC
PB0RESET
PB1DC/AO
PB2CSN
PB3CSN/CE
PF0SCKSCK
PF1DATA
PF2NRSTMOSIDATA
PF4/PB6BOOT0SH/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原生PWM74HC595
PA0TIM1_3
PA1TIM1_4
PA2TIM3_1
PA3TIM1_1
PA4SER/DS
PA5SRCLK/SHCP
PA6TIM3_1
PA7TIM3_2
PA13SWD
PA14SWC
PB0TIM3_3
PB1TIM3_4
PB2CSN
PB3TIM1_2
PF0SCK
PF1DATA
PF2NRSTDATA
PF4/PB6BOOT0RCLK/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驱动).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/172393.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识shell脚本

目录 什么是shell脚本 面向过程语言 面向对象 windows 三种处理逻辑 常用的:usr/bin/bash 基本申明 三个基本语法 执行脚本 脚本错误 三种错误区别 set -e set -u 重定向 管道符 变量 常见的shell变量的类型包括 整数的运算 整数运算 $RANDOM 随机…

界面控件DevExpress WPF流程图组件,完美复制Visio UI!(一)

DevExpress WPF Diagram(流程图)控件帮助用户完美复制Microsoft Visio UI,并将信息丰富且组织良好的图表、流程图和组织图轻松合并到您的下一个WPF项目中。 P.S:DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至…

京东大数据(京东数据采集):2023年Q3线上投影仪品类销售数据分析报告

11月初,某知名投影仪企业发布了2023年三季度财报。数据显示,今年第三季度,公司营收依然不客观,连续第五个季度业绩持续下滑。 从鲸参谋数据也可以看出,今年Q3,京东平台上该品牌的销量环比下滑约35%&#x…

CyNix

CyNix 一、主机发现和端口扫描 主机发现,靶机地址192.168.80.146 arp-scan -l端口扫描,只开放了80和6688端口 nmap -A -p- -sV 192.168.80.146二、信息收集 访问80端口 路径扫描 gobuster dir -u http://192.168.80.146/ -w /usr/share/wordlists/dir…

GitHub 报告发布:TypeScript 取代 Java 成为第三受欢迎语言

GitHub发布的2023年度Octoverse开源状态报告发布,研究围绕AI、云和Git的开源活动如何改变开发人员体验,以及在开发者和企业中产生的影响。报告发现了三大趋势: 1、生成式AI的广泛应用: 开发人员大量使用生成式AI进行构建。越来越…

【Element】el-progress 自定义进度条

一、背景 要求弹窗内显示进度条&#xff0c;根据接口获取当前进度值&#xff0c;间隔5秒调用接口获取最新进度值&#xff0c;当进度值为100时&#xff0c;允许关闭进度条弹窗 二、效果 三、实现步骤 3.1、按钮绑定事件&#xff0c;打开弹窗 <el-button class"cance…

存储压测工具— — Cosbench教程

存储压测工具— — Cosbench教程 Cosbench是Intel团队基于java开发&#xff0c;对云存储的测试工具&#xff0c;全称是Cloud object Storage Bench&#xff0c;本文主要针对的是支持aws-s3协议的存储服务进行测试&#xff0c;包括seaweedfs、以及华为云存储。 1 安装 github地址…

[Docker]七.配置 Docker 网络

一.Docker0 网络 1.多个容器之间如何通信,是否可以直接连接 默认启动的所有容器都会加入到docker0这个网络中,所有各个容器件是可以直接通信的 先看看网卡信息: 启动几个容器来演示一下: #启动mycentos这个容器 [rootlocalhost zph]# docker run -it -d --name mycentos d757…

RedisInsight——redis的桌面UI工具使用实践

下载 官网下载安装。下载地址在这里 填个邮箱地址就可以下载了。 安装使用。 安装成功后开始使用。 1. 你可以add一个地址。或者登录redis cloud 去auto-discover 2 . 新增你的redis库地址。注意index的取值 3。现在可以登录到redis了。看看结果 这是现在 在服务器上执行…

二十一、数组(3)

本章概要 Arrays的setAll方法增量生成 Arrays的setAll方法 在Java 8中&#xff0c; 在RaggedArray.java 中引入并在 ArrayOfGenerics.java.Array.setAll() 中重用。它使用一个生成器并生成不同的值&#xff0c;可以选择基于数组的索引元素&#xff08;通过访问当前索引&…

Mrakdown Nice:格式

标题 缩进 删除线 斜体 加粗

90天,广告商单43张,小红书AI庭院风视频制作详解教程

今天给大家分享一个目前在小红书很火的AI绘画商单号案例。 首先给大家看看案例视频形态 这类视频内容非常简单&#xff0c;主要展示农家庭院的别致景色。通过AI绘画工具生成图片&#xff0c;再利用剪辑工具将画面增加动态元素&#xff0c;让整个视频逼真鲜活&#xff0c;加上…

分析Bug的维度

本文从测试人员的角度&#xff0c;尝试梳理出一些常见的Bug根本原因分析的维度&#xff0c;并列举每个维度中的根本原因的例子。 在软件开发交付过程中&#xff0c;难免会出现Bug。针对每一个已发现问题的Bug&#xff0c;完成修复工作后&#xff0c;我们可以对其进行全面的根本…

集群路径规划学习(一)之EGO-swarm仿真

代码调试与编译 源代码下载 https://github.com/ZJU-FAST-Lab/ego-planner-swarm/tree/master 按照代码要求配置安装环境 sudo apt-get install libarmadillo-dev 文件对应拷贝与调整 新建工作空间文件夹 XF_EGOworkspace 新建src 在src文件夹下开启终端&#xff0c;输…

JVM对象创建与内存分配

对象的创建 对象创建的主要流程&#xff1a; 类加载推荐博客&#xff1a;JVM类加载机制详解 类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析…

海外IP代理科普——API代理是什么?怎么用?

随着互联网的不断发展&#xff0c;越来越多的企业开始使用API&#xff08;应用程序接口&#xff09;来实现数据的共享和交流。而在API使用中&#xff0c;海外代理IP也逐渐普及。那么&#xff0c;什么是API代理IP呢&#xff1f;它有什么作用&#xff1f;API接口有何用处&#xf…

Tomcat 9.0.54源码环境搭建

一. 问什么要学习tomcat tomcat是目前非常流行的web容器&#xff0c;其性能和稳定性也是非常出色的&#xff0c;学习其框架设计和底层的实现&#xff0c;不管是使用、性能调优&#xff0c;还是应用框架设计方面&#xff0c;肯定会有很大的帮助 二. 运行源码 1.下载源…

数据类型扩展02

1、字符串拓展 所有的字符本质还是数字。 char c1 a;char c2 中;System.out.println("c1:"c1);System.out.println("c1转换:"(int)c1);System.out.println("c2:"c2);System.out.println("c2转换:"(int)c2); 执行结果 c1:a c1转换:…

Linux:动静态库

目录 一、软硬链接 1、软链接 2、硬链接 二、动态库和静态库 编写一个库 ①静态库 使用静态库的方法 ②动态库 使用动态库的方法 库存在的意义 一、软硬链接 软硬链接的本质区别就是&#xff1a;有无独立的inode 软链接有独立的inode&#xff0c;也就意味着软链接是一…

redis高可用---持久化

redis高可用 在集群当中有一个非常重要的指标&#xff0c;提供正常服务的时间的百分比(365天) 99.9%&#xff0c;redis高可用含义更广泛&#xff0c;支持服务是指标之一&#xff0c;数据容量扩展&#xff0c;数局的安全性。&#xff08;容量、安全性&#xff09; redis中实现高…