本帖最后由 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端
核心源代码
|