本项目是【RT-Thread 2025年度嵌入式大赛——硬件拓展板赛道】优秀作品
本次大赛作品由 [华秋电子] 、[KiCad 华秋发行版] 提供硬件制作支持。
更多大赛作品:https://p.eda.cn/collection/rtthw
1. 前言
在2018年我本科在万宇杰老师的带领下和小伙伴们一起立了校级重点科研立项——《DIY电动滑板》,非常怀恋那时候的干劲,闲暇时分傍晚和枚金江一起玩滑板飞驰绿道,白天和刘姣一起画工程图,晚上和叶俊吉万金华他们做舞蹈机器人,时光就是这样一点点缓缓流淌过。
不知不觉中双元班的同窗们都各自高飞,而我还在艰难的求学中(2025年10月被OE、11月CEP拒稿)。恰巧也让我有了新的想法,之前的滑板是用Arduino Uno加拓展板设计的硬件,现在运输小船做实验就由我的滑板小小的身体承受着,每次都要走公里才能到达海边。滑板载着小船漫步过海滨小路,载着我跑过乡村小路,载着打印机溜过校园大道弯儿,值得高兴的是我的滑板已经累计有200公里左右,也没有出现什么故障,嘻嘻。
接着这样的机会尝试用本次《2025RTT硬件设计大赛》中的Vision board来移植原来的Arduino Uno方案,以此来纪念我的青春创作,保留原先Uno拓展板的电气与硬件。这次比赛首先是绘制类似Arduino Uno原先的端口封装与Vision board之间的拓展板,其次移植蓝牙控制程序和改进主动刹车功能。

2. 设计方案
本设计采用长板滑板版面,选用直流无刷电机,购买绘制特殊规格长板滑板的皮带轮及电机架,以航模电池3S5200MAH电池供电。配以专用直流无刷电机电调。主控电路与遥控电路均以Vision Board为核心,使用蓝牙数据通讯协议进行无线数据透传,采用PWM脉冲宽度调制方式,采用TOF激光距离传感器进行紧急制动判断。以下为各模块设计简介。
2.1 机械结构模块
机械模块主要解决传动系统搭建及电机的安装。车架架设计为高64MM,长248MM7.25英寸的支架。传动系统采用同步轮传动,使用皮带连接。齿轮比是大轮36齿,小轮12齿,用5M*270,11带宽齿的齿轮带连接,传动比为3:1,如图电机支架同步轮及配件。

2.2 电机模块
电机的KV值,决定着电机的转速增加量,KV值越大转速越快。电动滑板在启动时,由于静摩擦的原因,启动的阶段阻力非常大,之后阻力会突然变小。所以,电动滑板在启动之后常常有顿挫感。电机的选择对滑板的安全性的提升显得尤为重要。根据滑板的启动的特性,应选用KV值越小的电机。
2.2.1 电机选择
本设计电机选用N5065外转子无刷电机270KV,其各项参数指标如图左边为无刷电机N5065,右边为C5065

首先从电机型号上来说n5065表示电机尺寸为:直径50mm,长度65mm。前面的n和c表示系列号,其中n系列做工和工作效率高于c系,N电机比C电机功率大,发热小,扭力大。N电机比C电机的磁铁长度和定子长度稍微长一些,n系尾部为平面,c系尾部为锥形。详细参数如下: 可以看到,n5065的功率要比c5065大,一个是1820W,一个是1665W。电压比c5065高,重量也比c5065重50g。(注:这里只说了KV值400的,你也可以选择270的) 根据公式:转速=KV值X电压; n5065电机转速=KV (400)x22(v)=8800rpm ; c5065电机转速=KV (400) x20(v)=8000rpm ;
2.2.2 电机控制
单片机的控制信号,可以轻松输出0或1,如果需要控制电机信号就需要PWM脉冲宽度调制,也可参考SG90舵机控制。在本设计中使用KV值为270KV的N5065无刷电机,无刷电机和有刷电机有相似之处,也有转子和定子,只不过和有刷电机的结构相反;有刷电机的转子是线圈绕组,和动力输出轴相连,定子是永磁磁钢;无刷电机的转子是永磁磁钢,连同外壳一起和输出轴相连,定子是绕组线圈,去掉了有刷电机用来交替变换电磁场的换向电刷,故称之为无刷电机。依靠改变输入到无刷电机定子线圈上的电流波交变频率和波形,在绕组线圈周围形成一个绕电机几何轴心旋转的磁场,这个磁场驱动转子上的永磁磁钢转动,电机就转起来了,电机的性能和磁钢数量、磁钢磁通强度、电机输入电压大小等因素有关,更与无刷电机的控制性能有很大关系,因为输入的是直流电,电流需要电子调速器将其变成3相交流电,还需要从遥控器接收机那里接收控制信号,控制电机的转速,以满足模型使用需要。相比于传统直流有刷电机相比,无刷电机能量密度高,力矩大,重量轻,性能好等优点。增强了电机的可靠性,但是无刷电机的驱动比有刷电机要复杂得多,需要通过专门的电子驱动器才能正常工作,为降低开发难度的目的,该部分采用了车模用的无刷电机调速器,该调速器可根据输入的PWM信号占空比的大小来控制无刷电机的转速。
2.3 主控板及其遥控模块
本设计选用Vision board作为控制芯片,手机app收发作为上位机遥控。app使用参考

2.3.1 主控芯片选择
Vision Board搭载全球首颗 480 MHz Arm Cortex-M85芯片,拥有Helium和TrustZone技术的加持。SDK包里集成了OpenMV机器视觉例程,配合MicroPython 解释器,使其可以流畅地开发机器视觉应用。Vision Board搭载了全球首款基于 ARM Cortex-M85 架构的瑞萨电子RA8 MCU,6.39 CoreMark/MHz,可以快速而高效地运行机器视觉算法,实现图像处理、等功能。虽然在这个电动滑板大材小用,但是给代码框架和使用安全上提高了不少。

参考资料见:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/make-bsp/renesas-ra/瑞萨VisionBoard开发实践指南
2.3.2 无线通信模块的选取
本设计的无线通信模块选择经典HC-05主从机一体蓝牙模块,该模块能耗低,稳定性强,具有很好的抗干扰能力。选用蓝牙模块以后,可以实现双向通讯,加入显示模块及其他传感器模块后,遥控器可显示电池电量,行驶速度,行驶里程和载重等。为之后功能的增加和改进,提供了便利,同时大量搭载蓝牙的设备可以用于控制滑板,例如开发手机APP控制端,将手机作为遥控端使用。

本设计的遥控器和主控板上,分别有一块Vision board和一个HC-05蓝牙模块。蓝牙模块设置了自动配对之后,上电之后它们就进入“传输”状态,这时,使用函数串口8编写读取解析程序,便可实现遥控器与主控板之间的数据传输。
2.3.3 自动紧急刹车控制
防追尾系统对于驾驶员来说是一大必要辅助驾驶利器。此次设计的防追尾系统主要利用超声波在空气中的传播速度和关系进行测量。超声波具有指向性强、能量消耗慢且在介质中传播距离较远特点。其实说到超声波,我们就会想到蝙蝠,是的,它的工作原理就是模仿蝙蝠的。先发出一个声音,然后在接收返回的声音,通过发出和返回的时间差来可以计算出距离,就这么简单。所以我们就要有一个机制,发出多长的光信号,回收采集的理论上应该是发出的同时就要采样收集了。
原先的方案是超声波测距,之前实测发现会频繁误触,而且采样时间非常长(两次连续判断1.5m障碍物大约需要0.5s,如果车速在2m/s,会明显刹车来不及,主要是反应时间有点长,发生碰撞危险),这次采用I2c距离TOF传感器,看看效果应该要好一点点

3. 实验步骤
3.1 实验材料
主控板:Vision board开发板,sensor shield拓展板,USB数据线 传感器:TOF传感器,光照传感器 执行器:N5056无刷电机,LED灯,一路高电平触发继电器,有源蜂鸣器 通讯:蓝牙HC05 辅助硬件:滑板,同步带结构,盒子,泡沫,热熔胶,公母线若干 软件:一台安装RT-Thread开发环境的电脑
3.2 根据原理图搭建电路
实验原理图: 
蓝牙RX接uart8的TX,蓝牙TX接uart8的RX
有源蜂鸣器引脚2
继电器引脚4,然后单独接led灯与外接电源串联
ESC定义无刷电机引脚9,电调提供电源
TOF测距SDA接A4,SCL接A5
光照检测接A0
3.4 PCB及三维图

整体元器件非常少,就2202.54排母下面连接Vision board,然后6/2*8/10排母在上方连接Arduino Uno拓展板
下面是硬件细节图 拓展板焊接效果 

控制器电源电调都安装在防水盒中
控制盒整体外观

3.5 源码分享
配置串口2

配置PWM12

配置软件I2C



配置ADC

rt-thread设备驱动勾选

下面是程序控制源码
/*
• Copyright (c) 2024, YourName
• 项目:基于 RT-Thread 的电机 ESC 控制(移植自 Arduino)
• 功能:通过串口接收指令控制电机转速、LED、蜂鸣器,集成VL53L0X主动刹车和光线检测自动夜灯
• 已移除:超声波、光敏电阻
、自动急停
• 新增:所有速度档位切换必须平滑加减速(逐步 ±1,每次延时 50ms)
• 修复:ESC电调上电初始化问题
• 新增:VL53L0X激光测距主动刹车功能
• 新增:光线检测自动夜灯功能
*/
#include
#include
#include
#include”hal_data.h”
// ====================== 引脚 / 设备 宏定义 ======================
#definePWM_DEV_NAME “pwm12” // PWM设备名,请根据实际连接修改
#definePWM_CHANNEL 0 // PWM通道
#defineLED_PI
N BSP_IO_PORT_00_PIN_01 // LED引脚(根据实际修改)
#defineBUZZER_PIN BSP_IO_PORT_05_PIN_05 // 蜂鸣器引脚(根据实际修改)
#defineSERIAL_DEVICE_NAME “uart2” // 串口设备名,如USB转串口 / 蓝牙模块
// ====================== VL53L0X 配置 ======================
#defineTOF_DEVICE_NAME “tof_vl53l0x” // VL53L0X设备名
#defineBRAKE_DISTANCE 1000 // 刹车距离阈值:1000mm = 1m
#defineBRAKE_SAMPLE_COUNT 2 // 连续检测次数
// ====================== AD
C 光线检测配置 ======================
#defineADC_DEV_NAME “adc1” // ADC 设备名称
#defineADC_DEV_CHANNEL 4 // ADC 通道
#defineREFER_VOLTAGE 330 // 参考电压 3.3V,数据精度乘以100保留2位小数
#defineCONVERT_BITS (1








