项目需求
在制作一个使用全向轮的机器人底盘,对于全向轮,电机的精度是影响效果的重要因素。所以使用了步进电机,使用步进电机的优点是可以不使用编码器,开环控制即可达到高精度的效果。
调整占空比或者调整周期
众所周知,PWM有两个重要参数,周期与占空比。
步进电机的运动方式是,每收到一个脉冲,就旋转指定的角度。因此影响电机速度的唯一参数就是PWM的频率。以下附图两张来说明调整占空比与调整周期的区别。
周期固定,调整占空比
上图中有4个PWM,它们的周期是一样的,不同之处是拥有从80%至20%的占空比。可以看出,无论占空比为多少,在1s内,它们产生的高电平的数量是一样的,即无论占空比为多少,PWM的频率都一致。因此也就无法调整步进电机的速度。因为步进电机的速度仅与PWM的频率有关。
占空比固定,调整周期
上图中有4个PWM,它们的占空比都固定为50%,却拥有不同的周期。可以看出,即使占空比固定,只要动态调整周期,PWM就能在相同时间内产生数量不同的脉冲。因此,固定占空比,动态调整PWM周期,即可达到控制步进电机速度的效果。
基于STM32的实现
在STM32F1中,定时器具有PWM模式,可以用来产生PWM。但是,STM32的PWM模式,只要确定了时基单元(即确定了PWM周期),改变输出比较寄存器,仅可改变PWM的占空比。
若需要改变PWM周期,需不停地改变定时器的时基单元。但时基单元与硬件相关,不适合频繁变更。因此,步进电机的调速,不适合使用STM32下定时器的PWM模式来控制。
在多方查找资料后,确定了一种利用输出比较精确控制PWM周期的方式。
利用输出比较产生频率可变的PWM
利用输出比较产生频率可变的PWM,原理简单介绍如下:
首先配置定时器时基单元,确定脉冲最小长度单位CK。
然后开启定时器的输出比较,设置模式为翻转模式,并开启输出比较中断。
将定时器内计数器CNT当前值,加上脉冲长度X(单位为CK),写入输出比较寄存器。
在X个CK后,将会触发输出比较中断。同时电平翻转。
在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。
在X个CK后,将会触发输出比较中断。同时电平翻转。
在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。
如此往复……
以此即可得到一个占空比为50%,周期为2X个CK的PWM。
确定最小单位CK,配置时基单元
首先确定一个最小的间隔CK,规定PWM的高电平长度和低电平长度的单位都是CK。
即高电平的长度一定是CK的整数倍。低电平亦然。
然后配置定时器的时基单元,通过CK的长度确定预分频系数。
已知STM32F103的主频为72MHZ,则时基单元中预分频系数为
PSC = 72M / (1/CK)
例如,rtz所确定的CK长度为10us(0.00001s),即可得出方程。
预分频系数确定为720后,由高速晶振产生的72MHZ的时钟信号被720分频,得到100000HZ的时钟信号。即时钟信号每秒变动100000次。每次10us。同时可将重装载值设定为0XFFFF(16位定时器的最大值)。因为本次使用的输出比较模式不使用更新中断,该值可随意设置。
TIM_TimeBaseStructure.TIM_Period = 0XFFFF;
TIM_TimeBaseStructure.TIM_Prescaler =720;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
开启输出比较通道,设置输出比较模式为翻转模式,并配置NVIC,开启输出比较中断,配置输出比较通道:
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Pulse = 500;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
开启输出比较中断,配置NVIC优先级:
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
编写中断服务函数
在输出比较中断中,唯一要做的事情就是把当前CNT的值取出,加上脉冲长度X,写入输出比较寄存器。
当计数器达到0XFFFF(之前设定的重装载值)后,再加一会自动变为0.
例如,当前CNT值为0XFFFF,脉冲长度为5,很明显,输出比较寄存器应设置为0X0004才可触发下一次中断,而不是0X10004,这样会造成溢出。
因此将CNT的值与脉冲长度相加后,需要取0XFFFF的余数后,再写入输出比较寄存器。
int t_m=5;//低电平和高电平的长度
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) {
TIM_SetCompare1(TIM2,(TIM2- >CNT+t_m)%0XFFFF);
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
}
}
动态调整中断服务函数中的变量t_m,即可达到修改PWM频率的效果。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
机器人
+关注
关注
211文章
28394浏览量
206967 -
PWM
+关注
关注
114文章
5186浏览量
213832 -
电机
+关注
关注
142文章
9007浏览量
145398
发布评论请先 登录
相关推荐
智能电子创新制作-机器人制作入门
多涉及诸如电子学理论或软件编程等基础细节,书中提及的理论并不十分高深难懂,也没有复杂的数学公式,而是重点介绍构成机器人的机械、电路、电源、传感器、直流电机、步进电机、舵机以及常用电子元
发表于 08-14 23:18
履带机器人 金属底盘
` 本帖最后由 威凯-智控 于 2012-8-14 23:28 编辑
今天给大家分享一个全金属的履带机器人底盘准备最履带机器人的朋友们,可以一起交流一下机器人疯狂爱好者 让思维沸腾
发表于 08-14 23:25
鸥鹏四轮全向自主移动足球机器人
四轮全向自主移动机器人是鸥鹏科技2007年8月份推出的极具竞争优势的机器人核心产品之一,其机械、电气及软件设计标准完全遵循Robocup中型组比赛规则,因此,用户可直接使用并参加年度R
发表于 03-24 11:05
自律型机器人制作入门.基于Arduino
了一层硬件接口的Dreamer,使得硬件模块的连接更加方便、简单。《自律型机器人制作入门:基于Arduino》是关于Drearner控制板的第一本书,内容循序渐进,图文并茂。从最基础的控制电机和舵机
发表于 06-23 11:18
机器人底盘传感器位置坐标及底盘配置工具的使用
SLAMWARE模块通过control bus和机器人底盘连接,机器人底盘需要将底盘的正确配置信息上传至SLAMWARE模块,否则会导致定位
发表于 01-24 14:42
怎样去制作一种球上自平衡机器人
,该机器人根据陀螺仪的位姿数据,通过三全向轮驱动底部球体调整自己在球上的位置,保持动态平衡的同时实现全向移动。二、硬件清单材料价格数量淘宝链接 56mm
发表于 08-17 08:44
全向轮机器人有哪些特性?
)速度空间范围不同:如图 4.1所示,在之前的文章《两轮差速驱动机器人运动模型及应用分析》中对两轮差速驱动机器人的速度空间做了分析,其只有2个自由度,不能沿着
发表于 08-30 09:15
麦克纳姆轮全向移动的原理是什么
什么是麦克纳姆轮在竞赛机器人和特殊工种机器人中,全向移动经常是一个必需的功能。「全向移动」意味着可以在平面内做出任意方向平移同时自转的动作。
发表于 08-30 08:50
如何搭建实体机器人ros底盘
目录介绍一、底盘主控板二、嵌入式开发板1. 与上位机pc的关系2. 与STM32主控板的关系介绍自下而上的分析实体机器人(差分轮速机器人)搭建中的关键过程。一、
发表于 01-20 07:36
基于RT-Thread+RA6M4的麦轮结构的底盘运动控制系统设计案例
,使其驱动4个麦轮的电机。其地盘可实现全向移动,即平面的纵向,横向移动和原地的旋转移动。应用背景在目前移动机器人开发中,除了仿生结构的机器人
发表于 08-17 14:50
评论