本帖最后由 jobszheng5 于 2023-4-15 16:43 编辑  
 
【N32电机控制大赛】基于N32G455VE微控制器的电机控制机械臂 
 
项目概述 
本次参赛题目是基于N32G455微控制器的电机控制机械臂。  
我国是制造业大国,之前以劳动密集型产业为主,廉价的劳动力是主要特征,也是明显优势。随着时代的发展,工业技术的进步,国家在工业制造业上的战略调整。智能制造伴随着工业4.0的科技浪潮便被推上前沿。  
本次DIY参赛亦出于对工业4.0的向往,利用国民技术高性能工业MCU,型号N32G455VE作为核心主控,对六自由度机械臂系统进行设计。设计制作了一款具有人机交互功能的机械臂。  
通过对系统总体方案的设计,建立机械臂模型,选取关节连接器,电机,主控芯片和电源等部件。  
通过手动发送命令,控制机械臂运动操作,对泡沫块,小木块分别进行抓取实验。  
实验结果表明,对物体的抓取成功。实验过程稳定可靠,满足设计系统可行性要求。  
本次实验为使用视觉识别,AI主动定位与抓取等应用提供技术基础。初探机械臂在工业领域的应用,对改善传统工业结构具有重要意义。  
 
硬件设计 
系统框图 
 
设计需求 
本次对六自由度机械臂的舵机驱动均使用PWM波方式。在N32G455中使用TIM2与TIM3各3路PWM输出引脚。  
6路PWM输出引脚分配列表如下:  
            外设 
 | 引脚 
 | remap配置 
 |  TIM2,CH2 
 | PA1 
 | TIM2_REMAP=10 
 |  TIM2,CH3 
 | PB10 
 | TIM2_REMAP=10 
 |  TIM2,CH4 
 | PB11 
 | TIM2_REMAP=10 
 |  TIM3,CH1 
 | PC6 
 | TIM3_RMP[1:0] = 11 
 |  TIM3,CH2 
 | PC7 
 | TIM3_RMP[1:0] = 11 
 |  TIM3,CH3 
 | PC8 
 | TIM3_RMP[1:0] = 11 
 |  
 在电源设计上面,针对6路舵机设计单独供电,即舵机控制板驱动侧电源电压为+5V供电,在本次实验中,我们选用一款5v2A输出的手机充电器电源做为电机驱动侧供电电源。  
由于控制板信号侧使用开发板电源,电压为+3.3V供电,因此,借助光耦电路模块对信号进行隔离,保护信号侧电路。  
光耦电路的设计中,PWM波需要的正向脉宽,但光耦对信号有反向器的作用,因此,我们在光耦的输出侧又串连的三极管电路,将反向的信号再次反向,使得隔离模块对信号正向实现,保证隔离驱动电路与MCU侧信号电平保持一致。原理图如下:  
说完与硬件交互的外设,再来说说人机交互的外设——CAN外设。  
本次实验将CAN外设做为人机交互的通讯接口。本次采用手动控制方式,做为基础实验原理性验证。后续将结合边缘计算与AI系统,依旧使用CAN通讯接口操控机械手臂。  
调试接口  
本次使用串口usart1,9600-n-8-1,做调试数据输出接口,实时打印操作记录,便于我们调试与发现问题。  
     
  
 
测试 
PCB原理图 
表情 
 
 
软件设计 
设计需求 
软件架构上面,本次移植使用FreeRTOS嵌入式操作系统,提升系统的功能可扩展性,配置便捷性等。  
FreeRTOS移植  
由于N32G455VE属于高性能带浮点运算的Cortex-M4内核的微处理器,因此,我们在移植FreeRTOS时,也兼顾其高性能的特点,不损失性能。在系统时基上面,我们采用1ms的时基,满足我们本项目的实时性要求,又方便我们计算延时等。  
这里我们主要参考国民技术官方的白皮书,来完成FreeRTOS的移植,并修改FreeRTOSConfig.h头文件,裁剪内核的大小。  
FreeRTOS任务划分  
本项目共划分10个任务:  
首先启动时钟配置,并创建LED工作状态任务led_blink任务。  
在led_blink任务中创建其余9个任务,包括:  
- 任务1-6:控制6路舵机的驱动PWM波产生任务;
 - 任务7:ADC周期采样,并分析。通过信号量阻塞;
 - 任务8:CAN接收处理任务。通过信号量的方式+共享内存形式传递脉宽值
 - 任务9:串口日志发送。将操作日志上传到PC端
 
 
  
 
 
核心源代码 
 
 
 |