分享

用单片机造一个 “巡检机器人”

 爱萨摩 2024-01-20 发布于湖北

写总结、聊职场,赢大疆无人机、红米平板、华为耳机、京东卡!参与《年末写总结、聊职场》活动,分享过去的电子从业经历,亦或是总结一下自己的2023。



项目开发背景


轨道巡检机器人建设实现通过智能化的轨道式巡检机器人基于5G通讯技术、搭载数据采集器和实时智能分析软件,实现瓦斯,可燃性气体检测,安全隐患报警消除。创建一个标准化、现代化、智能化的安保巡检方案。提高了巡检效率,还起到了降本增效、节约运维成本的功能。
机器人结构:
图片
悬挂轨道巡检机器主要有机器人主体,充电箱,轨道部门,摄像头传感器系统组成。整个系统可以用于企业园区,校园园区,化工工厂,变电站,高速铁路,矿井等巡检。通过架空轨道避免人为干扰,安全性极高,各种传感器系统模块可以更换,适应不同巡检场景,通讯系统基于5G/4G ,Lora模组,网桥等模组实现在线或者离线没有运营商网络也能实时控制。

详细设计


 嵌入式系统硬件设计
电路板主控采用STM32单片机,电机驱动芯片开始项目中使用的驱动是BTN7971A,VHN5019A 是一款全桥电机驱动器,AEC-Q100 认证。封装MultiPowerSO-30为恶劣的汽车环境而设计,由于采用裸露的芯片焊盘,可提供更高的热性能。适用于各种车规级电机应用。该器件包含一个双单片高侧驱动器和两个低侧开关。高端驱动器开关采用 STMicroelectronics 众所周知且经过验证的专有 VIPower® M0 技术设计,该技术允许在同一芯片上有效地集成一个真正的低功耗 MOSFET,具有智能信号/保护电路。VNH5019ATR-E三个芯片组装在电隔离引线框架上的 输入信号 INA 和 INB 可以直接连接微控制器以选择电机方向和制动条件。
图片
图片
图片
ST公司的另外一款IC为VNH5019的电机全桥驱动IC价格不高,全桥驱动,一片可以驱动一个直流电机。四片可以驱动四个电机。驱动器不需要用专门的总线进行连接,只需要两个数字引脚控制方向、一个PWM引脚控制速度、一个模拟引脚(可选)来读取流经电机的电流即
图片
图片
图片
实物图:
图片
软件设计:

主控制器采用Cortex-M3内核的STM32F103。控制器内部共有8个定时器,其中TIM1_CH1和TIM8_CH1为高级控制定时器引脚,TIM1_CH1用于电机编码器计数。TLM8_CH1用于舵机控制基准时间。通用定时器引脚TIM2 CH1、TIM3 CH1、TIM4_CH1、TIM5_CH1分别用于电机和舵机驱动电路上下桥壁PWM的产生。触发EXIT0中断的PA0口和PB0口分别用于电机过流中断保护。
#include 'pwm.h'void TIM1_Int_Init(u16 arr, u16 psc){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; //当定时器从0计数到999,即为1000次,为一个定时周期 TIM_TimeBaseStructure.TIM_Prescaler = psc; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分频系数:不分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //设置切换值,当计数器计数到这个值时,发生电平切换。 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于CCR1_Val时,产生高电平 TIM_OC1Init(TIM1, &TIM_OCInitStructure); //启用通道1 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //设置切换值,当计数器计数到这个值时,发生电平切换 TIM_OC2Init(TIM1, &TIM_OCInitStructure); //启用通道2 TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); // 使能TIM1重载寄存器ARR TIM_CtrlPWMOutputs(TIM1, ENABLE); TIM_Cmd(TIM1, ENABLE);}
  
软件设计思路


根据实际运行的需要由PC端上位机通过以太网转串口对机器人巡检速度和巡检位置进行给定。电机的转速是由设定的速度值和由增量式编码器的采集值相比较,经过速度PID算法实现闭环控制。机器人的位置主要是由绝对值式编码器反馈现在位置,根据动作时间要求调节舵机转动的速度。机器人电机控制系统软件要实现的功能如下:


◆上位机给定速度和巡检位置和巡检时间设定,位置点设定;
◆要求电机转速连续可调并且具有良好的静、动态性能,转速没计采用PI算法调节;
◆要求机器人快速到达指定角度,有位置反馈作为电机给定转速的调整;
◆具有一定的故障保护功能。当电机出现堵转、电流过大以及舵机触动限位开关时,要求停止驱动模块工作。  
针对以上要实现的功能,可以将应用程序设计分为以下几个任务:

1)启动任务。对系统进行初始化,创建初始电机状态,然后自我删除,启动任务进入睡眠状态。
2)电机和舵机保护任务。用于在过流或限位开关动作时响应外部中断,进入中断状态通过发任务信号量,任务程序检测信号量有效并响应该任务,停止输出。任务优先级设为0级。
3)上位机给定任务。用于上位机控制电机和舵机,任务优先级设为1级。上位机数据输入寄存器时将产生一个中断,该中断将收到的字节送入缓冲区并释放上位机给定任务的信号量;任务中检测到信号量有效便开始执行,将对应的字节信息解析成对应的电机转速和舵机转角位置信息给相应变量赋值。
4)电机转速控制任务。用于电机的闭环调速,任务优先级设为2级。
5)舵机控制任务。用于控制舵机在规定时间内到达指定位置,任务优先级设为3级。

    
上位机设定


基于C++ QT开发的PC端小程序 ,通过以太网实时显示机器人位置和监控视频机器人控制软件,显示电池电量;显示机器人内部温度;控制风扇开关;控制器人运行,分手动模式和自动巡航模式定时模式:
1)手动模式控制机较简单,首先设定速度一般设计3挡,再按向前,向后,停止,回库,机器人便会做出相应动作。
2)自动模式,首先手动跑一次,根据Realplay数据或者目测参照物,设定巡航点。东边最大210,北边最大172。再设定巡视时间段,机器人会自动巡航    
图片图片
云台控制介绍:
通过方向键控制云台 8 个方向的转动,通过拖动条可控制云台转动的速度。点击 ,云台开始自动扫描,再次点击停止云台自动扫描。点击右侧功能键可进行焦距、光圈和变倍的调节。云台控制界面提供了很多球机功能快捷键,包括 3D 定位、辅助聚焦、灯光雨刷控制、手动跟踪、一键守望、一键巡航、球机菜单调用、手动除冰等,点击 可查看其余的快捷键。  
图片
图片
作者:abner_ma, 来源:面包板社区

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多