STM32驱动舵机

合集下载

stm32控制舵机程序

stm32控制舵机程序

stm32控制舵机程序章节标题:基于STM32的舵机控制程序设计第一章:引言(约250字)1.1 研究背景控制舵机是机器人、无人机、航空模型等众多领域的关键技术之一。

而STM32系列的微控制器以其高性能、低功耗和丰富的外设资源被广泛应用于嵌入式控制系统。

本章主要介绍了舵机的作用及其在控制系统中的重要性,同时说明了选择STM32微控制器作为控制舵机的硬件平台的原因。

第二章:控制理论(约250字)2.1 舵机原理舵机是一种能够根据外部输入信号控制角度的电动执行器。

其通过接收PWM信号来确定输出位置和角度,通常在0至180度之间运动。

本章介绍了舵机的工作原理,包括PWM控制信号的作用、舵机内部的反馈控制电路等内容。

2.2 PID控制理论PID控制是一种常用的闭环控制方法,能够根据反馈信号调整输出信号,通过比较实际输出与期望输出的差异来实现控制。

本章详细介绍了PID控制的原理和算法,并提出了使用PID控制舵机的基本思路。

第三章:硬件设计(约250字)3.1 系统框架在舵机控制系统中,使用STM32微控制器作为控制芯片,通过引脚与舵机进行连接,实现对舵机的控制。

本章主要介绍了硬件设计的系统框架,包括STM32微控制器的选择、电源设计、信号输入输出设计等。

3.2 电路原理图本章详细描述了电路原理图设计,包括电源管理模块、驱动电路等详细设计内容。

同时对于舵机的接线方式和引脚定义进行了说明。

第四章:软件设计(约250字)4.1 程序流程本章介绍了在STM32上开发舵机控制程序的流程,包括初始化舵机控制模块、设置PWM输出引脚、编写控制算法等。

4.2 PID算法实现详细描述了如何在STM32上实现PID控制算法,包括参数调整、误差计算、控制输出计算等步骤。

同时,结合实际舵机控制需求,对PID控制算法进行优化。

4.3 实验验证通过实验验证了基于STM32的舵机控制程序的有效性和性能优势。

通过与传统控制方法进行对比,并分析实验数据,评估了该程序的稳定性和响应速度。

STM32控制舵机的原理及代码

STM32控制舵机的原理及代码

STM32控制舵机的原理及代码1、舵机的⼯作原理:舵机内部的控制电路,电位计(可变电阻器)和电机均被连接到电路板上,如内部结构图的右边部分。

控制电路通过电位计可监控舵机的当前⾓度。

如果轴的位置与控制信号相符,那么电机就会关闭。

如果控制电路发现这个⾓度不正确,它就会控制马达转动,直到它达到指定的⾓度。

舵机⾓度根据制造商的不同⽽有所不同。

⽐如,⼀个180度的舵机,它可以在0度⾄180度之间运动。

由于限位装置被安装在主输出装置上,超出这个范围机械结构就不能再转动了。

舵机的输出功率与它所需要转动的距离成正⽐。

如果输出轴需要转动很长的距离,马达就会全速运转,如果它只需要短距离转动,马达就会以较慢的速度运⾏,这叫做速度⽐例控制。

2、如何让舵机转到指定⾓度:控制线⽤于传输⾓度控制信号。

这个⾓度是由控制信号脉冲的持续时间决定的,这叫做脉冲编码调制(PCM)。

舵机的控制⼀般需要⼀个20ms左右的时基脉冲,该脉冲的⾼电平部分⼀般为0.5ms-2.5ms范围,总间隔为2ms。

脉冲的宽度将决定马达转动的距离。

例如:1.5毫秒的脉冲,电机将转向90度的位置(通常称为中⽴位置,对于180°舵机来说,就是90°位置)。

如果脉冲宽度⼩于1.5毫秒,那么电机轴向朝向0度⽅向。

如果脉冲宽度⼤于1.5毫秒,轴向就朝向180度⽅向。

以180度舵机为例,对应的控制关系是这样的:0.5ms————-0度;1.0ms————45度;1.5ms————90度;2.0ms———–135度;2.5ms———–180度;3、舵机转动⾓度对应的占空⽐以及⽐较寄存器的值计算⽅法:舵机配置需要满⾜频率为50HZ,PWM占空⽐是指在⼀个周期内,信号处于⾼电平的时间占据整个信号周期的百分⽐,由于PWM周期为20ms,所以(以舵机会转动 45°为例),占空⽐就应该为1ms/20ms = 5%,所以TIM_SetCompare1的 TIMx 捕获⽐较 1 寄存器就为200-200*5% = 1904、STM32控制舵机的代码:控制舵机代码:Main.cpp#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"#include "timer.h"int main(void){u16 led0pwmval=185;//u8 dir =1;delay_init();LED_Init();TIM3_PWM_Init(199, 7199);//50hzwhile(1){led0pwmval=195;//45TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=190;//45TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=185;//90TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=180;//135TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=175;//180TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);}}Timer.h#ifndef __TIMER_H#define __TIMER_H#include "sys.h"void TIM3_PWM_Init(u16 arr , u16 psc);#endifTimer.c#include "timer.h"void TIM3_PWM_Init(u16 arr , u16 psc){GPIO_InitTypeDef GPIO_InitTypestrue;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypestrue;TIM_OCInitTypeDef TIM_OCInitTypesture;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//使能GPIO时钟,以及TIM3时钟使能GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//复⽤GPIO_InitTypestrue.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitTypestrue.GPIO_Pin=GPIO_Pin_5;GPIO_InitTypestrue.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitTypestrue); //GPIO初始化TIM_TimeBaseInitTypestrue.TIM_Period=arr;TIM_TimeBaseInitTypestrue.TIM_Prescaler=psc;TIM_TimeBaseInitTypestrue.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitTypestrue.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM3 ,&TIM_TimeBaseInitTypestrue); //定时器初始化TIM_OCInitTypesture.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitTypesture.TIM_OCMode=TIM_OCMode_PWM2;TIM_OCInitTypesture.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC2Init(TIM3 ,&TIM_OCInitTypesture );//CH2通道初始化TIM_OC2PreloadConfig( TIM3 ,TIM_OCPreload_Enable);//使能预装载寄存器TIM_Cmd(TIM3,ENABLE);}。

基于STM32的机械手臂控制系统设计

基于STM32的机械手臂控制系统设计

图2 . 1机械臂控制 系统结构
该系 统是通 过 计算 机 的事先 的编程 之后 ,通 过 数据 传输 下载 到 s t m3 2 当中通 过控f l i J  ̄ s t m3 2 的定 时器 产生 多路 的P WM波 。舵机 就会 依 据 给定 的P WM波 完成相 应 的运 动轨迹 或按照 预定 的计划完 成任务 。 2 . 3 机械臂 的臂部 设计 因为机 械臂 主 要是 由臂 部组 成 ,所 以在进 行 臂部 设计 时应 当 着 重 注 意 以下 几 点 : ( 1 )手臂 在机 械 臂 中起 着 重要 的作 用 :它 不光 可 以 让物 体 进行 移 动而 且 还 能进 行 一些 操 作 。 ( 2 )因 为机 械 臂 的 臂 部在 运动 中有 很大 负担 ,为 了减小 手臂 的 负担 ,需要 将手 臂 的截 面 形状 做 的更加 合理 。在 进 行 了各种截 面 对弯 曲度 的承 受力 的实验 后 发现 ,在 相 同力 的情况 下 ,工字 型 的截 面 能承受 的力 最大 ,因此 我 选择 使 用工 字 型截 面 做手 臂 的 截面 。 ( 3 )因为 机械 臂 在 直 线运 动 中可 能会 发生 突然 的方 向转 换 , 因此 ,为 了防止 机械 臂 的硬 件损 耗过 大 ,需要 采 用一 些装置 来 保护 机械 臂 。 同时要 采用 一定 形 式 的 缓冲 措 施 。 ( 4 )为 了减 少 臂 部在 运 动时 会产 生 较 大 的转 动惯 量 , 需要 将臂 部 的重量 减少 ,以免 在运 动 中产生 较 大 的误差 ,从 而影 响 机 械 臂 的整 体 运作 ,加 快机械 臂 的运行 速度 。 经过对预期任务 的特点和类型分析,该设计 需要机械臂具有较高 的 灵 活性和流畅性 ,因此在 多次 的比较和分析后 ,决定使用 多关节型机械 臂 。它不仅可 以灵活的完成预定任务 ,而且可以有更大 的运动空间 。 2 . 4 机械臂 自由度选择 通 常将机械 臂是 由几个 传动结 构组成 的就称为几 自由度 。例如人 类 的 自由度高 达2 7 个 ,而 手臂 部分 的 自由度 一般 为6 自由度 。所 以仿 照 人类 的特性 ,机械 臂 的 自由度 应 当选为6 自由度 ,这 样 既符合 了身 体力 学并且动 力传输 效率也很 高 。为 了更加流 畅的完成抓 取物体 ,并 将物体 移动到 指定 的位置 , 需要 采用6 自由度 。而 6 自由度 的机械 臂的 控制较为 繁琐,所 以工 业和生活 中机械 臂的 自由度 多少 于6 个。 2 . 5 机 械臂 控 制器类 型 控制 器 的主 要任 务就 是按 照预 先 设计 的程 序进 行相 应 的任 务 , 它是 机械 臂 中十 分重 要 的组件 。机 械臂 的控制 器就 相 当于 电脑 中 的 处理 器 ,只有 处 理器越 好 , 电脑 的运行 速度 和 处理 速度 才会 越 快 。 对 于 机械 臂来 说 也一样 ,只有 控制 器越 好 ,才 能更 加精 准快 速 的进 行控 制 。从控 制器 的数 量 和机 械臂 的控 制 方式 可分 为 以下几 种 :单

STM32 Nucleo + X-NUCLEO-IHM03A1 高功率步进电机驱动板用户手册说明书

STM32 Nucleo + X-NUCLEO-IHM03A1 高功率步进电机驱动板用户手册说明书

July 2015 DocID027979 Rev 1 1/12UM1910 User manualGetting started with the high power stepper motor driver expansion board based on powerSTEP01 for STM32 NucleoIntroductionThe X-NUCLEO-IHM03A1 is a high power stepper motor driver expansion board based on thepowerSTEP01. It provides an affordable and easy-to-use solution for driving high power bipolar stepper motors in your STM32 Nucleo project. The fully digital motion control through speed profile generation, dynamic positioning feedback and a complete suite of protection features offer high levels of performance and robustness The X-NUCLEO-IHM03A1 is compatible with the Arduino UNO R3connector and supports the addition of other boards which can be stacked to drive up to three stepper motors with a single STM32 Nucleo board.Figure 1: X-NUCLEO-IHM03A1 expansion board for STM32 NucleoContents UM1910 Contents1Getting started (3)2Hardware description and configuration (4)2.1Selecting the chip select and clock lines of the SPI (6)2.2Multi-motor configuration (6)3Revision history (11)UM1910Getting started1 Getting startedThe X-NUCLEO-IHM03A1 expansion board is a high power stepper motor driver covering a wide range of applications. In particular, the maximum ratings of the board are the following. ∙ Power stage supply voltage (VS) from 10.5 V to 50 V ∙ Motor phase current up to 10 A r.m.s.Follow this sequence to start your project with the board:1. Check the jumper position based on your configuration (see Section 2: "Hardware description and configuration").2. Plug the board to the STM32 Nucleo board through Arduino UNO R3 for the X-NUCLEO-IHM03A1.3. Supply the board through the input 1 (VS) and 2 (ground) of the connector CN1. The power OK (green) and fault (red) LEDs will turn on.4.Develop your application using the examples provided with the firmware library, X-CUBE-SPN3, high power stepper motor driver software expansion for STM32Cube. Further support material is available on the powerSTEP01 (/powerstep) and STM32 Nucleo web pages (/stm32nucleo).Up to three expansion boards can be stacked on the same STM32 Nucleo board as described in Section 2.2: "Multi-motor configuration".2 Hardware description and configurationFigure 2: "Jumper and connector positions" shows the position of the connectors and theconfiguration jumpers of the board.Figure 2: Jumper and connector positionsBelow are the pinout details for the Arduino UNO R3 and the ST Morpho connectors.Notes:(1)All the unlisted pins are not connected.Notes:(1)All the unlisted pins are not connected.2.1 Selecting the chip select and clock lines of the SPIThe chip select and the clock lines of the SPI interface can be selected via the appropriateresistors indicated in Table 3: "Chip select line selection" and Table 4: "Clock lineselection".2.2 Multi-motor configurationThe expansion boards can be stacked on a single STM32 Nucleo board in order to drive upto the three stepper motors (one expansion board for each motor is required).The configuration is changed by mounting the resistors from R3 to R8 as listed in Table 5:"Multi-motor setup table".The other resistors are not mounted.By default, the stepper driver board is configured for a single-motor setup, so the boardconfiguration must be changed in multi-motor setups before stacking the boards on theSTM32 Nucleo.UM1910 Revision history 3 Revision historyUM1910IMPORTANT NOTICE – PLEASE READ CAREFULLYSTMicroelectronics NV and its subsidiaries (“ST”) reserve the right to make changes, corrections, enhancements, modifications, and improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on ST products before placing orders. ST products are sold pursuant to ST’s terms and conditions of sale in place at the time of or der acknowledgement.Purchasers are solely responsible for the choice, selection, and use of ST products and ST assumes no liability for application assistance or the design of Purchasers’ products.No license, express or implied, to any intellectual property right is granted by ST herein.Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product.ST and the ST logo are trademarks of ST. All other product or service names are the property of their respective owners.Information in this document supersedes and replaces information previously supplied in any prior versions of this document.© 2015 STMicroelectronics – All rights reserved。

单片机控制舵机程序

单片机控制舵机程序

单片机控制舵机程序第一章:引言单片机作为一种重要的嵌入式系统开发工具,广泛应用于各个领域,舵机作为一种常用的机械驱动装置,也在各种应用中得到广泛的应用。

本论文通过设计单片机控制舵机的程序,旨在探究单片机如何通过编程实现舵机的精确控制。

第二章:舵机的基本原理舵机是一种常见的位置式伺服机构,它可以通过控制信号控制其角度位置,实现精确的运动控制。

它由直流电机、减速机构、位置检测传感器和驱动控制电路组成。

通过单片机控制舵机,可以实现根据需要精确调整舵机的位置和速度。

第三章:单片机控制舵机的设计与实现本章主要介绍如何使用单片机来控制舵机。

首先,需要选择合适的单片机和舵机。

常见的单片机有51系列、AVR、STM32等,而舵机则有舵机舵盘、舵机电机和舵机控制器等。

随后,在硬件设计上,需要连接单片机和舵机,并根据舵机的电气特性设计相应的电路保护措施。

在软件设计上,需要编写单片机的控制程序。

通过控制程序发送特定的PWM(脉宽调制)信号给舵机,从而控制舵机的角度位置和运动速度。

第四章:单片机控制舵机的应用与改进在本章中,将介绍单片机控制舵机的应用与改进。

首先,在机器人领域,单片机控制舵机可以实现机器人的运动与动作控制,从而实现更复杂的功能。

其次,在航模、智能家居等领域,单片机控制舵机也应用广泛,可以实现遥控、智能调节等功能。

最后,对现有的单片机控制舵机的程序进行改进,如优化舵机的运动曲线、增加舵机的控制精度等,可以提升系统的性能。

总结:本论文通过设计单片机控制舵机的程序,探究了单片机通过编程实现舵机的精确控制的原理和方法。

同时,介绍了舵机的基本原理和单片机控制舵机的设计与实现过程,并讨论了单片机控制舵机的应用与改进。

通过本论文的研究,可以帮助读者了解和应用单片机控制舵机的技术,为单片机在舵机控制方面的应用提供参考。

第五章:实验及结果分析在本章中,我们将介绍根据上述设计和实现的单片机控制舵机的程序的实验,并对实验结果进行分析。

六自由度迎宾机器人手臂控制系统设计与实现

六自由度迎宾机器人手臂控制系统设计与实现

六自由度迎宾机器人手臂控制系统设计与实现吴春富;王小龙;蔡小伟;杨元慧【摘要】设计并实现一个六自由度迎宾机器人手臂动作控制系统。

该系统采用舵机实现六自由度伺服驱动,控制系统硬件部分主要包括ARM芯片 STM32、多路舵机PWM驱动电路、通讯模块等;软件上采用嵌入式μC/OS-II来实现舵机驱动与动作的规划。

实验结果表明,设计的迎宾机器人手臂具有动作灵活可靠、性能稳定、价格便宜等特点,能够较好地实现迎宾娱乐等功能。

%A 6-DOF arm control system for tour-guide robot is designed and implemented in which electric actuators are adopted to realize 6-DOF servo drive. The hardware mainly consists of STM32 ARM chip, PWM drive circuit for multi-channel servo and communication modules while the software uses embedded μC / OS-II to achieve the servo drive and action planning. The experimental results show that the tour-Guide robot arm so designed features flexibility, reliability and economy, which can better realize the duties as a tour guide robot.【期刊名称】《龙岩学院学报》【年(卷),期】2015(000)005【总页数】6页(P32-37)【关键词】舵机;伺服驱动;网络化控制;STM32【作者】吴春富;王小龙;蔡小伟;杨元慧【作者单位】龙岩学院福建龙岩 364000;龙岩学院福建龙岩 364000;龙岩学院福建龙岩 364000;龙岩学院福建龙岩 364000【正文语种】中文【中图分类】TP242工业技术随着社会的不断进步,大型博物馆、科技馆、图书馆、超市、会展中心、旅游景点以及各种公共休闲娱乐场所的不断涌现,势必需要大批的导购人员、迎宾接待人员以及其他服务人员.随着劳动力成本的急剧上升,迎宾机器人代替人类为公众服务,不仅可以提供准确丰富的信息服务,还能通过语音、动作、表情为人们提供人性化的娱乐服务.迎宾机器人手臂控制系统是迎宾机器人系统的重要环节,手臂的功能主要体现在增强与用户的互动效果上,即配合个性化的迎宾语音,通过手臂表现各种自由的人性化舞蹈动作,增加宾客的参与性、娱乐性,产生良好的互动效果.与传统工业机器人手臂功能相比,迎宾机器人可以不执行抓取、传递物品等动作.由于迎宾机器人被控对象较多,控制模型复杂,采用传统的CLIENT/SERVER等控制模式,很难达到较好的效果[1-2].本文设计的迎宾机器人手臂采用六个自由度,舵机驱动、CAN总线网络化控制系统,具有开发简单、性能稳定、动作灵活、价格便宜、易于扩展等诸多优点.人的手臂主要由肩关节、大臂、肘关节、小臂、腕关节、手掌等六个器官组成,肩关节设计两个自由度(肩部与大臂)实现大臂的摆动与旋转,肘关节设计两个自由度(肘部与小臂)实现小臂的摆动与旋转,腕关节设计两个自由度(腕部俯仰与腕部旋转)实现手腕的摆动与旋转,迎宾机器人手臂机构三维设计效果图如图1所示.目前机器人手臂关节的驱动方式有三种:伺服电机、步进电机和舵机[3].伺服电机能够实现闭环控制,没有误差积累,但成本较高,目前一般用于精度高的工业机器人和家庭服务机器人.步进电机虽然结构简单、比较容易控制,但步进电机体积、重量和功耗较大.舵机体积、重量和功耗相对较小,且控制简单,非常适合在自由度较多、负重较小的迎宾机器人手臂中应用[4].迎宾机器人手臂主要功能是与客人互动,无需执行抓取、传递物品等动作,灵活性高,承载轻是它的主要特点,所以本文设计的迎宾机器人手臂关节采用舵机驱动.舵机根据内部控制的方式不同分为普通舵机和机器人专用舵机.虽然普通舵机动态输出扭矩和静态保持扭矩都比较小,但是价格便宜,由于迎宾机器人腕部承载很轻(基本上只有手掌本体承载,没有承受其他载重),所以腕部俯仰和腕部旋转两个自由度驱动采用普通舵机.机器人专用舵机输出扭矩大、性能稳定、且能够独立实现速度控制和位置控制,因此其他四个自由度驱动则选择机器人专用舵机.设计机器人的承重为80 g,预设各部件的自重及力矩规划,并考虑足够的余量,确定了机器人手臂各个部位的舵机型号,如表1所示.专用机器人舵机采用Dynamixel系列,普通舵机采用SM系列.图2是手臂控制系统框图.迎宾机器人手臂控制核心选用Cortex-M3内核的ARM 处理器STM32103RCT6,通过多路PWM控制两个普通舵机,实现对腕关节两个自由度(腕部俯仰与腕部旋转)的控制;通过RS-485总线驱动控制四个机器人专用舵机,实现对肩关节两个自由度(肩部与大臂)和肘关节两个自由度(肘部与小臂)的控制.手臂ARM控制器通过CAN总线与机器人大脑—工控机实现数据交换.选择ATMEL公司AVR系列ATmega8-8AI[5]实现整个系统的电源管理.根据参考STMicroelectronics发布的STMF10xxx硬件开发入门文档,设计了STM32F103VCT6的最小系统电路和复位电路[6-7],如图3所示.图3中,STM32采用模拟电源与数字电源独立供电,分别由一片线性电压转换芯片TI公司的REG1117-3.3变换得到,电源电路如图4所示,模拟地与数字地分开,并且在每个电源输入端设计有滤波电路,保证控制器芯片电源供电的稳定.为了增强系统工作的可靠性,设计有电源检测复位电路,采用Catalyst半导体公司的CAT811R(2.63 V),不仅可以保持STM32复位所需要的低电平持续时间(CAT811R可提供230 ms复位信号),还能对电源电压进行检测,当电源电压低于2.63 V时,复位电路自动完成STM32的复位.舵机转动的角度是通过调节PWM信号的占空比来实现的,标准PWM信号的周期固定为20 ms,脉宽可由0.5 ms到2.5 ms之间,脉宽和舵机的转角0~180°相对应.本文设计了基于定时器和移位寄存器的多路舵机控制电路,如图5所示,一个定时器和一个八位移位寄存器电路实现8路舵机的控制,即每个定时器输出8路脉宽可调的PWM信号.采用RS-485通信主要是为了实现对机器人专用舵机的控制,即给每个机器人舵机设定一个ID,并把它们都挂载到RS-485总线上.485芯片选用Maxim公司的低功耗MAX485CPA,电路原理图如图6所示.STM32集成了CAN总线控制器,支持控制器局域网bxCAN[8-9],根据系统应用的需要,CAN总线通信报文采用扩展数据帧的格式:32位扩展标示符+数据区(1~8个字节).32位扩展标示符去掉IDE位、RTR位以及一个无效位,可自定义的扩展标示符有29位.根据bxCAN的标示符过滤功能,对扩展标示符的29位进行规划,设计了迎宾机器人控制系统的高级通信协议,命名为Rob CAN.系统为CAN总线中的每个节点定义了唯一的ID,是该节点唯一的属性.根据bxCAN的标示符滤波功能,只有接受报文的标示符相应的位置与该节点的ID完全匹配,该节点才接受此报文数据,实现硬件的滤波与屏蔽.系统中各节点ID的定义,如表2所示.迎宾机器人控制系统的通信数据有两种:一是数据,二是指令.数据主要指机器人各控制器回传的机器人状态信息和传感器;指令主要指机器人上位机监控与任务规划端向各控制器下达的控制命令,分为数据指令和控制指令(如机器人的肩关节抬起90 °).本文设计的基于bxCAN的机器人控制通信协议Rob CAN,如表3所示. PC机端的CAN总线通信的报文采用MCP2510/2515 的对齐方式,即第16、17、18位为不可自定义位,分别为IDE位、RTR位和“0”位.当PC中央控制节点发送如下:55 20 AA 03 + 02 06 05 08 07 07 aa 44,表示PC中央控制节点向手臂控制器节点发送命令指令,命令字(command)为03,携带八个数据 02 06 05 08 07 07 aa 44,且需要回执数据包.依据普通舵机的驱动原理,参见2.2节,一个定时器输出8路脉宽可调的PWM输出信号的程序实现流程框图,如图7所示.舵机属性结构体定义如下:typedef struct{ INT16U ANG_NOW;//舵机当前角度INT16U ANG_SET; //舵机设置角度INT16U MAX_ANG; //舵机最大角度INT16U MIN_ANG; //舵机最小角度INT8U SPEED;//舵机的动作速度}STE.舵机关联动作组结构体定义如下:typedef struct{ INT8U NUM;//舵机编号INT16U ANG_SET_PREV;//初始角度INT16U ANG_SET_NEXT;//最终角度INT32U DELAY;//动作后的延时(ms)INT8U SPEED;//动作速度}STE_Action.根据上述定义的舵机的结构体,利用μC/OS-II的系统时钟,使得机器人的舵机角度按照某一速度稳定地增加或减小,即可实现舵机的速度控制.迎宾机器人手臂的自由度较多,要实现如挥手这样简单的动作,需要上位机发送多条指令.首先,大臂舵机向前旋转120°,然后肘部舵机旋转至垂直位置,肘部平行于躯干的舵机左右摆动,另外,腕部的舵机跟随着左右小幅度地摆动.上述动作常用,但是控制会给上位机增加较大的通信负担.因此,系统为应用封装常用的关联动作组,模型如上述结构体STE_Action.关联动作的实现过程即是对结构体STE_Action的遍历过程,如图8所示.机器人专用舵机的控制较容易,只用通过RS-485总线向指定ID的舵机发送角度和速度值即可.迎宾机器人手臂的伺服驱动设备为普通舵机和机器人专用数字舵机,本文通过舵机的极限角度测试、多路舵机同时动作时的性能、多路舵机的保持性能以及抖动发生的情况等四个内容测试手臂动作的可靠性,测试结果如表4所示.本文设计并实现了一款六自由度迎宾机器人手臂控制系统,对手臂的机构设计及系统各个部分的硬件电路、通讯协议及软件实现进行了详述.实际测试表明,本文设计的迎宾机器人具有手臂控制简单、抖动小、性能稳定、动作灵活、价格便宜、易于扩展等诸多优点.【相关文献】[1] 吴学礼,刘浩南,许晴.机器人手臂控制系统的设计与研究[J].河北科技大学学报,2014,35(4):361-365.[2] 熊彪.机械式娱乐机器人手臂联动机构的设计与研究[J].起重运输机械,2014(7):20-23.[3] 李云江.机器人概论[M].北京:机械工业出版社,2011:121-196.[4] (美)尼库.机器人学导论—分析、控制及应用[M].2版.孙富春等译.北京:电子工业出版社,2013:232-273.[5] 马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2007:163-298.[6] 喻金钱,喻斌.STM32F系列ARM Cortex-M3核微控制器开发与应用[M].北京:清华大学出版社,2011:56-398.[7] 彭刚,秦志强.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践[M].北京:电子工业出版社,2011:78-206.[8] 张培仁.CAN总线设计及分布式控制[M].北京:清华大学出版社,2011:242-398.[9] 胡洪坡,梁书剑,杨华,等.STM32F107VCT6平台的bxCAN标识符过滤技术与应用[J].单片机与嵌入式系统应用,2012,12(10):16-18.。

基于STM32智能物流分拣机器人设计

基于STM32智能物流分拣机器人设计

基于STM32智能物流分拣机器人设计作者:顾鹏飞于朋程张金生主浩唐蕾杨玲玲杨永杰来源:《电脑知识与技术》2020年第19期摘要:本文采用STM32为智能物流分拣机器人主控芯片,该系统由车轮、电机、驱动、主控板、循迹模块、舵机、OLED显示屏、机械臂、爪子等部件组成,摄像头由wife模块进行信号采集控制识别功能,物料识别抓取功能等。

本设计可塑性高,智能程度高,实用性强,能够很好地从根本上解决人工的分拣工作效率低,成本高,容错率低的问题。

关键词:STM32;分拣;搬运;机器人;物流中图分类号:TP24 文献标识码:A文章编号:1009-3044(2020)19-0168-02开放科学(资源服务)标识码(0SID):1 引言在现代工业生产和作业中,机器人在有效提高产品生产企业的劳动生产率、产品质量与降低生产成本和生产效率等方面起到重要的作用和意义。

随着现代计算机网络技术的发展和信息社会技术时代的进步,智能工业机器人的物流技术研究和其应用逐渐成为社会广泛关注的热点,并且在经济社会的各个领域中广泛使用。

现如今我国物流和工业生产发展迅速,机器人在物流技术的应用程度逐渐成为企业之间竞争的重要因素之一。

同时,这项技术也决定了相关企业的未来,2 智能分拣物流机器人本文以轮式机器人理论为出发点,涉及广泛,参考相关研究资料,分析现如今所应用在物流机器人上的技术研究现况以及在此方向上所存在的问题。

在此基础上,运用三维建模、嵌入式控制、图像处理、软件设计等工程技术搭建与实现智能物流机器人平台。

该机器入主要由车轮、电机、底板、传感器、驱动、主控板、舵机、颜色传感器、OLED显示屏、机械臂和爪子组成如图1所示。

本项目设计的智能分拣搬运机器人,其系统功能框图[1]如图2所示,将电源、电机驱动、直流电机、舵机、驱动板、黑线检测模块、OLED显示器[2]、摄像机各部分连接,保证其部分能够正常工作。

其工作过程为:智能机器人通过循迹模块、电机控制模块,实现路径的识别行走;通过摄像头扫描二维码,读取信息,领取任务:利用颜色传感器识别物料确定夹取顺序;舵机模块用来控制机械臂,实现物料的抓取与放置。

2.STM32控制舵机方法

2.STM32控制舵机方法

单片机控制舵机我们知道,舵机和步进电机,直流电机等都是感性负载,单片机的驱动电流较小,我们驱动直流电机,步进电机的时候都是用了驱动模块,也就是功率放大器件。

那驱动舵机时候是否需要呢?因为舵机内部集成了驱动电路,可以对我我们输入的PWM信号直接采样,所以,控制舵机的时候,用一个单片机的PWM引脚即可,这大大精简了电路设计。

1.舵机供电电压和电流要使舵机工作在额定功率下,电路方面需要满足舵机的要求,包括电流和电压,这个我们可以根据舵机的具体参数选择,比如某款舵机参数如下:*扭力:13kg/cm(at4.8V)15kg/cm(at6V)*速度:0.18sec/60度(at4.8V)0.15sec/60度(at6V)*工作电压:4.8V-6V根据以上信息,我们最好能够提供6V的电压,我们知道,设备的电流是由负载决定的。

比如舵机空载控制的时候一般电流是不大于400mA,但是带负载时候可能大于1A,然后我们设计机械臂的时候有5或者6个舵机,因为处于不同关节,所以实际使用中不会每个舵机都同时达到最大电流,那这里可以选择6V5A的电源。

要输出这么大的电流,一般的LDO(线性稳压器)是无法满足的了,需要选择开关稳压芯片,而一般的芯片也没有固定5V输出,需要选择可调版本,通过电阻调节电压输出到6V。

这里我们选择XL4015,根据手册,这款芯片可以满足我们的要求,如下图所示。

下面是XL4015的应用电路。

2舵机的速度控制舵机的驱动是比较容易的,当我们使用了单片机控制的时候,通过输出50HZ(20ms 周期)的PWM,控制PWM的脉宽调节舵机的转角。

为了节约篇幅,较长的PWM初始化代码就不贴出来了,大家翻看程序即可。

前面章节有说明:舵机的转角和脉宽(高电平长度)存在一一对应关系,如果要控制舵机到某一角度,就改变输出的脉宽即可,比如从1ms到1.5ms,显然,很容易就实现了舵机位置控制,但是我们如何进行舵机速度控制呢?这里我们引入了PID算法,下面先看一下程序Velocity1=Position_PID1(Position1,Target1);Position1+=velocit1;TIM4->CCR1=Position1;其中我们使用Velocity1用于代表舵机的速度,这个值根据目标值和舵机的实际位置计算得到,然后通过累积的方法,赋值给相关寄存器作用到舵机。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32驱动舵机
STM32驱动舵机
1 2 3 4 软件环境安装 硬件连接方法
舵机的控制方法
STM32驱动舵机实例
2/45
1 MDK集成开发环境
安装程序来源:
1.1首先安装J-Link驱动
开发软件\Setup_JLinkARM_V468,双击要安装的 “Setup_JLinkARM_V468.exe”, 安装过程全选“next”直到安装成功, 将JLINK插接到电脑的USB口,即可在我的电脑\管理\ 设备管理器\通用串行总线控制器中看到一个J-Link driver。
26 /45
3 舵机的控制方法
3.3 舵机控制
舵机的控制一般需要一个20ms左右的时基脉冲,该脉 冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制 脉冲部分。 以180度角度伺服为例,那么对应的控制关系: 0.5ms----------- 0度 1.0ms----------- 45度 1.5ms----------- 90度 2.0ms-----------135度 2.5ms-----------180度。
USER/main.c USER/stm32f10x_it.c USER/pwm.c
30 /45
12.4 STM32驱动舵机实例
4.2 配置工程环境 本定时器PWM输出实验中用到GPIO、RCC、TIM外设,没 有使用中断,所以先把以下库文件添加到工程 stm32f10x_gpio.c、stm32f10x_rcc.c、stm32f10x_tim.c。 新建pwm.c及文件,并在 stm32f10x_conf.h 中把使用到 的ST库的头文件注释去掉。
33 /45
12.4 STM32驱动舵机实例
4.4 定时器初始化 pwm.c中函数TIM_PWM_Init() 配置TIM: void TIM_PWM_Init (u16 arr,u16 psc) { //定义初始化结构体
GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 使能定时器时钟TIM3/TIM4/TIM5 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5, ENABLE); //使能GPIOA/GPIOB外设时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
27 /45
3 舵机的控制方法
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲 的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲 部分。 以180度角度伺服为例,那么对应的控制关系:
28 /45
3 舵机的控制方法
小型舵机的工作电压一般为4.8V或6V,转速也不是很快, 一般为0.22/60度或0.18/60度,所以假如更改角度控制脉冲 的宽度太快时,舵机可能反应不过来。如果需要更快速的 反应,就需要更高的转速。 舵机上有三根线,分别为VCC、GND、信号线,不需要另 外接驱动模块,直接用单片机的管脚控制,控制信号一般 要求周期为20ms的PWM信号。 如果要更为精确的控制舵机(转动角度差<=1度),则需 要控制输出PWM信号的占空比, 例如:可以把0~180分为1024份(可以任取,决定于定时器 的时钟频率),范围为0.5ms~2.5ms 则可以得到0.09度/us,因此可以由 PWM=0.5+N/0.09(N是 角度)控制舵机转动0~180度间的任意角度。
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.2舵机线连接
s+-
s+-
s+/45
2 硬件连接方法
2.2舵机线连接
多功能支架 短U支架 长U支架 L型支架 大脚板 U型梁 杯士轴承 6个 2个 4个 8个 2个 1个 6个
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 选择安装目录C:\keil,点击 Next。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 在用户名中填入名字(可随便写或者空格),在邮件地 址那里填入邮件地址(可随便写或者可空格),点击 Next。
1 MDK集成开发环境
1.2 安装MDK
破解MDK 安装完MDK开发环境后,在编译程序的时候会有40K 的代码限制 开发软件\MDK 找到KEIL_Lic.exe。
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 点击KEIL_Lic.exe,在 弹出的界面中的CID选 项框中填入MDK的CID。
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 正在安装,请耐心等待。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
/45
1 MDK集成开发环境
1.3 编译、下载
Translate:编译修改过的文件,只检查语法错误, 不链接库也不生成可执行文件 Build:编译修改过的工程,检查语法、链接动态库 文件、生成可执行文件 Rebuild:重新编译整个工程的所有文件,耗时较长 Load:程序下载

/45
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 然后点击Generate按钮,复 制产生的CID Code
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK MDK环境菜单栏File\License Managemant,把刚刚 在注册机复制到的CID Code粘贴到New License ID Code (LIC):框中,然后点击
3 舵机的控制方法
3.1 什么是舵机
舵机是一种位置(角度)伺服的驱动器,适用于需要角 度不断变化并可以保持的控制系统。舵机是一种俗称, 其实是一种伺服马达。
25 /45
3 舵机的控制方法
3.2 舵机工作原理
控制信号由接收机的通道进入信号调制芯片,获得直流偏 置电压。 内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较, 获得电压差输出。 电压差的正负输出到电机驱动芯片决定电机的正反转。当 电机转速一定时,通过级联减速齿轮带动电位器旋转,使 得电压差为0,电机停止转动。
库文件 :
startup/start_stm32f10x_hd.s CMSIS/core_cm3.c CMSIS/system_stm32f10x.c FWlib/stm32f10x_gpio.c FWlib/stm32f10x_rcc.c FWlib/stm32f10x_tim.c
用户文件:
29 /45
4 STM32驱动舵机实例
4.1 实验描述及工程文件清单 实验描述:通用定时器TIM2、 TIM3 、TIM4产生6路PWM舵机控制信号。 硬件连接:TIM3_CH1-4: PA6/PA7/PB0/PB1 (控制板P11-13)
TIM4_CH1-4: PB6-9 TIM5_CH1-4: PA.0-3 (控制板P4、5、6、14) (控制板P7、8、9、15)
34 /45
12.4 STM32驱动舵机实例
4.4 定时器初始化 pwm.c中函数TIM_PWM_Init() 配置TIM: void TIM_PWM_Init (u16 arr,u16 psc) { //初始化GPIO
32 /45
12.4 STM32驱动舵机实例
4.3 main文件
调用用户函数 TIM_PWM_Init() 把 TIM初始化成50Hz的 PWM输出模式。 While循环中根据角 度改变相应定时器通 道的占空比,产生舵 机控制信号,驱动舵 机转动到相应的角度。
for(angle=180;angle>=1;angle--) { SetJointAngle(4, angle); SetJointAngle(5, angle); SetJointAngle(6, angle); SetJointAngle(7, angle); SetJointAngle(8, angle); SetJointAngle(9, angle); SetJointAngle(10, angle); SetJointAngle(11, angle); SetJointAngle(12, angle); SetJointAngle(13, angle); SetJointAngle(14, angle); SetJointAngle(15, angle); Delay(0x000FFFF); } } }
相关文档
最新文档