# NEP_STM32_Project **Repository Path**: Createtree/nep-stm32-project ## Basic Information - **Project Name**: NEP_STM32_Project - **Description**: 智能水果采摘器程序 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-03-04 - **Last Updated**: 2025-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 电子产品国赛进程 - STM32主控工程 - 驱动部分 - [X] 蜂鸣器(PC13) - [X] RS232(UART4)配置DMA+空闲中断接收 - [X] RS485(USART1) 配置DMA+空闲中断接收 - [X] USB调试接口(UART5)空闲中断接收 - [X] LCD12864(PG2~PG11) - [X] 12864菜单框架 - [X] 数码管(位选PG0-PG7)(段选PF0-PF7) - [X] X轴 - [X] 直流电机(TIM1_CH1-PE9,TIM1_CH3N-PE12) - [X] 速度控制 - [X] 位置检测(编码器A-PB0) - [X] 复位控制 - [X] 位置控制 - [X] 无刷电机 `[EN:PB11][PWM:TIM2_CH3-PB10][DIR:PB12]` - [X] 速度控制 - [X] 位置检测 - [X] 复位控制 - [X] 位置控制 - [X] 步进电机 `[EN:PB11][PWM:PB10][DIR:PB12][限位左:PB14(上升沿)][限位右:PB13(上升沿)]` - [X] 速度控制 - [X] 位置检测 - [X] 复位控制 - [X] 位置控制 - [X] Y轴(TIM1_CH1N-PE8,TIM1_CH2-PE11) - [X] 速度控制 - [X] 位置检测(编码器B-PB1) - [X] 复位控制 - [X] 位置控制 - [X] 限位检测 - [X] Z轴(**TIM4_CH3-PB8**)/(TIM1_CH1-PE9,TIM1_CH3N-PE12) - [X] 速度控制 - [X] 电容式位移传感器(SPI:PA5,PA6,PA7,PA0(0关,1开)) - [X] ADS1118 - [X] ADS7950 - [X] 激光测距传感器(SCL:PC4,SDA:PC5) - [X] 红外测距传感器(外部ADC芯片) - [X] 机械爪 - [X] 舵机(TIM4,CH4,PB9) - [X] 舵机抓取 - [X] 舵机松开 - [X] 压力传感器(PC3) - [X] 手柄摇杆(PC0,PC1,按键PC2) - [X] 矩阵键盘和按键(PD8~PD15) - [X] 摄像头(RS232,PC10,PC11) - [X] 摄像头识别颜色 - [X] 摄像头校准抓取:`使用摄像头得到目标距离图像中心的误差,定位后再通过偏移来抓取` - FreeRTOS - 输出控制任务 - 运行灯 - 蜂鸣器 - 电机控制器 - 综合运动控制 - 复位控制 - X位置校准控制 - 多项式拟合校准电容传感器对应的位置数据 - 命令运动控制 - 自动扫描控制 - 自动摘取控制 - 摇杆控制 - 传感器扫描任务 - 串口处理任务 - 摄像头数据解析 - 上位机命令解析 - 电机运动命令控制 - 舵机校准 - 参数调整 - 电容式位移传感器扫描 - 摄像头通信 - 按键扫描任务 - 按键输入扫描 - 菜单按键回调 - 显示任务 - 菜单控制器 - 上位机命令服务 ### ToDo - 隐藏菜单增加XY轴起点设置功能 - Menu菜单支持串口交互(显示和输入) - 完善所有电机控制程序的退出接口,避免强制退出后出bug - 利用偏差直接控制电机跟踪色块 ### Idea - 摄像头指定识别的颜色 - 发送完成中断+队列+DMA发送 # Log > data:2022年5月17日 - 新增 - 添加了校准功能(基于VOFA上位机) - 舵机校准 - PID调试 - 电机控制调试 - 添加了判断点是否在区域内的宏(矩形,圆形,三角形) - info工具在获取字符的基础上添加了获取 `int`和 `double`类型的宏接口;新增 `St_CHECK()`宏更方便的检测是否有数据需要解析 - 重构 - 重构了舵机控制部分,增加舵机控制的抓取和松开的函数接口 - DEBUG宏:将变参发送和字符串发送分开,提高发送效率 - 修复 - 修复 `iMath`库中某些函数可能导致溢出的错误 - 修复 `Motor_Go_Aim()`在无法达到目标时卡死的情况 - 优化 - 优化舵机夹取功能的逻辑 - 优化全局变量的声明,在.h文件中做全局声明 > data:2022年5月19日 - 菜单 - 优化可变类型的菜单页面内容的设定 - 新增电容式位移传感器校准程序 - 电机控制 - 将电机驱动和电机控制部分拆分成了两个文件 - 优化了电机控制模式和状态的设置 - 新增了电机控制的断言宏 - 更新了一些变量的名字 > data:2022年5月20日 - 舵机 - 修复了舵机抓取时力度过大的问题 - 电机 - 将电机抓取逻辑由写入缓存再判断再抓取改为先判断再写入抓取缓存再抓取,实现抓取与判断的解耦 - 将抓取缓存优化为 `fruitBuf_t`结构 - 增加将抓取缓存结构体按条件写入舵机抓取缓存 - 修改了部分文件的include > data:2022年5月22日 - 菜单 - 修复 `Menu_Set_Twinkle()`无法设置第一行的bug - 优化了 `Menu_Set_xxx`的数组序号的计算使用 `row-=Rowx`代替固定减1 - 舵机 - 细化校准流程 - 再次优化舵机的抓取的力度 - 抓取时对压力一直监控直到放开,若压力达到达到最大阈值则将抓取力度改为 `(PICK_START_DUTY+PICK_END_DUTY)/2` - 电机 - 将运动自动扫描部分的路线规划解耦 - 新增三个形状的路径规划函数函数 - 实现了摄像头自动扫描模式 - 摄像头 - 更新了摄像头的解析程序 - 增加摄像头校准菜单 > data:2022年5月30日 - 新增多项式拟合算法 - 电机 - 将复位与定位的函数分解为x与y方向 - 将电机控制总程序拆分为多个子函数 - 在复位程序和目标执行程序增加了超时检测机制,避免电机卡死 - 增加x距离测量方式的参数 `MC.XEncode` - 电容 - 对测量的电压进行一维卡尔曼滤波 - 新增查表校准 - 新增多项式拟合校准 - 更新电容校准菜单功能 - 增加ADC芯片切换参数 `CA.ADSChip` - 添加了TIM5作为软件捕获时间工具的时钟 - 菜单 - 新增按键测试功能 `使用矩阵键盘的左右键来切换翻页` > data:2022年6月19日 - 电机运动 - 新增摄像头静态校准功能(待完善) - 摄像头 - 摄像头收发逻辑更新 - 电机校准 - 键盘控制电机移动 > data:2022年7月1日 - 优化摄像头校准抓取,加入了校准颜色的参数 - 修正了大部分不规范的变量名 - 将电容校准的多项式拟合深度改为4 - 优化了 `zh_info_tool`的API - 更新了电容校准菜单,可以通过按键修改和保存编码器和ADS芯片的选择 - 修复 `Motor_Timeout()`超时时间计算错误的问题 - 修复使用电容位移传感器时限位开关判断失误的问题 > data:2022年7月8日 - 修正电机驱动底层的问题 - 修复 `运动停止检测`的错误 - 新增了无刷电机驱动并完善了运动控制接口 - 新增激光测距驱动并做了滤波 - 新增卡尔曼调参模板命令函数 > data:2022年7月12日 - 重写摇杆数据结构 - 新增脉冲数开环控制步进电机 - 修复一些小问题 > data:2022年7月19日 - 新增红外测距及校准 - 新增无刷电机霍尔测量X位置 - 新增数码管驱动 - 新增部分文件的Keil Configuration Wizard > data:2022年8月7日 - 将debug菜单分离到zh_config - 优化舵机相关状态命名 - 新增一边扫描一边采摘和放置 - MC中新增手动采摘模式 - 新增MC部分模式配置功能(在 `.h`中) - 完成2022赛题1 > data:2022年8月8日 - 修复无法使用ADS校准的bug(关闭了传感器扫描导致) - 修复ADS校准时第一个点可能导致的错误 - 修复扫描路径设置成区域范围的bug - 完成2022赛题2 > data:2022年8月8日 - 修复三角形区域识别的问题 - 修复压力传感器电压滤波刷新的问题 - 添加了放置模式变量 `MC.PutMode` 来记录采摘完成时放置到采摘处还是指定位置 - 完成2022赛题3 > data:2022年8月9日 - 修复Y轴GoAim运动超时等待造成的Bug - 完成2022赛题4 > data:2022年8月9日 - 实现了步进电机和无刷电机同时运动 - 实现了直线运动控制 MC_GoLine_Start() - 增加了电机参数配置的选项 - 完成2022赛题5 > data:2022年8月11日 - 修复采摘静态校准时颜色不匹配仍然会移动的问题 - 修改部分调试信息 - 新增摄像头偏移值串口调试 - 完成2022赛题6 > data:2022年8月12日 - 更新数码管控制器 - 增加对数码管单个控制小数点显示的API - 更换数码管的接口到 `JB(PF0-PF7)` - 完成2022赛题7 > data:2022年8月12日 - 新增 `J-Llink` RTT 日志打印功能 - v2022.7.0版本中手动采摘切换失败的问题 > data:2022年8月13日 - 完成2022赛题8 - 修复DTC通过ID切换页面不会触发回调初始化的问题 > data:2022年8月13日 - 完成2022赛题9 > data:2022年8月14日 - 验证了红外测距校准功能 - 添加部分校准菜单界面的功能到串口5 - 新增VOFA命令 - 完成了2022赛题10 > data:2022年8月14日 - 更新2022赛题1 - 优化位置控制 - 同步更新程序框架 - 去除摇杆位置设定区域 > data:2022年8月14日 - 更新2022赛题4 > data:2022年8月15日 - 修复摇杆在SLR模式控制的bug - 更新2022赛题7 - 串口新增速度控制 > data:2022年8月16日 - 修复三角形切片中使用printf导致卡死的bug - 修复MotorControl中AutoPick模式结束时状态设定错误的bug - 新增MotorControl中ScanPick模式扫描区域选择的API - 新增水果缓存按条件查询的API - 更新2022赛题8 > data:2022年8月16日 - 新增MC_AutoPick_Start()来启动AutoPick模式 - 更新2022赛题5 > data:2022年8月16日 - 新增扫描区域的参数保存到Flash - 修复LCD12864边界点绘制的问题 - 更新2022赛题2 > data:2022年8月17日 - 修复步进电机无法使用的问题 - 更新2022赛题3 > data:2022年8月17日 - 修复圆形区域读取Flash错误的问题 - 更新2022赛题6 > data:2022年8月17日 - 更新2022赛题9 > data:2022年8月18日 - 修复 `Fruit_Search()` 没有处理 `'N'`颜色 - 更新2022年赛题10 > data:2022年8月18日 - 修复水果位置判断的错误 - 更新2022赛题4 `v2022.4.2` - 更新2022赛题7 `v2022.7.3` - 更新2022赛题8 `v2022.8.2` - 更新2022赛题5 `v2022.5.2` - 更新2022赛题2 `v2022.2.2` - 更新2022赛题3 `v2022.3.2` - 更新2022赛题6 `v2022.6.2` - 更新2022赛题9 `v2022.9.2` > data:2022年8月23日 - 2022电子产品国赛总结软件部分 - 从结果来看 - 程序要符合题意,但是裁判往往不是很明白赛题,评分的时候不一定会和赛题一致(参考2022赛题5三角形巡边),因此对于某些功能如果描述模糊或者没有对应的描述应当记录下来,比赛前提问(参考2022赛题5存放到指定位置功能),对于有多种可能的功能项也可以全部准备,依据现场测试来启动合适的备用功能程序(可以准备一个简单版本数据好看,一个标准版本完全符合题意) - 现场测试依据的是评分表,流程正确就可以拿到大部分的分,很多细节裁判不会一一核对 - 事实胜于雄辩,在恰当的时机据理力争可以让裁判改变评测标准,让自己多拿分(因此在赛场上哪怕有人和你的程序一模一样,分数也有可能相差很大) - 在准备阶段,赛题公布到比赛开始大概有二十多天,十套题都要准备,但是要有重点的准备,认真统计赛题信息 - 裁判动口不动手,操作都是选手来完成 - 技术细节 - 参数的配置要灵活(比如X轴起点设置,因为不知道测试是在那个范围,所以限位开关的距离应当尽量的大),同时必须要能在脱离电脑的情况下调整这些参数 - 采摘时水果的位置,评分时不会放太多水果(这次要摘的只有3个),也不会放太密(起码1个果子以上的距离),范围也比较大(几乎整个果树) - 评分测试的时候最好要控制环境与调试时保存一致(主要是灯光的强度和方向)