设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: aosini

编码器速度和方向检测,371电机方向与速度检测,stm32编码器接口模式

  [复制链接]

该用户从未签到

发表于 2015-8-8 16:36:22 | 显示全部楼层
时文胜 发表于 2015-8-3 21:47
楼主,有两个问题,一,您的程序里有用到中断吗,没有发现;二,下面是我用库函数配置的定时器

        ...

编码器的AB相都接入了吗?只接一项好像是只有0 1,因为计数方向是有硬件决定的
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2015-8-30 11:27:36 | 显示全部楼层
void Motor_Speed_Control(s16 motorSpeed)         
{
    s16 speed = 0 ;        
        
    if(motorSpeed>100)  speed = 900;
            else if (motorSpeed<-100)  speed = -900;
                        else  speed = motorSpeed;
这里900和-900应该改成100和-100吧?因为下面TIM3->CCR1 = speed * 5 + 400;要保证CCR1在900只能啊!!!!
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

 楼主| 发表于 2015-8-31 08:12:55 | 显示全部楼层
wodezpy 发表于 2015-8-30 11:27
void Motor_Speed_Control(s16 motorSpeed)         
{
    s16 speed = 0 ;        

您好,是的 ,谢谢您我修改一下
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2015-9-2 11:48:32 | 显示全部楼层
你好我想请问一下:
这里最后一句return (int)((s16)(TIM2->CNT));该如何理解,因为当计数器清零后,在10ms内如果都是向下计数,那么就会下溢啊,怎么会返回负计数值呢?
我看了你上面说的什么补码,不过我的问题是当CNT为0,然后向下计数就是-1,可是CNT不能为负值啊!!为什么返回的就是负值呢!?
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

 楼主| 发表于 2015-9-3 19:06:23 | 显示全部楼层
wodezpy 发表于 2015-9-2 11:48
你好我想请问一下:
这里最后一句return (int)((s16)(TIM2->CNT));该如何理解,因为当计数器清零后,在10m ...

return (int)((s16)(TIM2->CNT));里面有个类型转换,强制转换返回有符型数据。数值都是以补码表示的,正整数补码是源码,负整数补码是绝对值取反加1。向下计数时减1,为0时,就需要向高位借位减“1”,可以这样理解,一个8位数00000000B-00000001B,但0不够减1的,就向不存在的第9位借1,100000000B-00000001B=11111111B,数是以补码形式表示的,这样11111111B就为-1了
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2015-9-4 17:47:36 | 显示全部楼层
aosini 发表于 2015-9-3 19:06
return (int)((s16)(TIM2->CNT));里面有个类型转换,强制转换返回有符型数据。数值都是以补码表示的,正 ...

嗯嗯,谢谢!我打算从这里买些配件做个小车还希望能给指导一下啊!
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2015-9-4 17:59:35 | 显示全部楼层
aosini 发表于 2015-9-3 19:06
return (int)((s16)(TIM2->CNT));里面有个类型转换,强制转换返回有符型数据。数值都是以补码表示的,正 ...

还有个问题,当计数器为0时,如果减1后CNT内的值就为减1后的补码形式存在?
但是手册里不是说CNT只能在0到ARR变化吗?就是下溢后CNT的值为多少?是不是ARR的值?
回复 支持 反对

使用道具 举报

签到天数: 63 天

[LV.6]常住居民II

 楼主| 发表于 2015-9-7 08:36:48 | 显示全部楼层
wodezpy 发表于 2015-9-4 17:59
还有个问题,当计数器为0时,如果减1后CNT内的值就为减1后的补码形式存在?
但是手册里不是说CNT只能在0 ...

是的。具体可以看STM32中文参考手册,第273页,14.3.12编码器接口模式。里面有较详细的说明,如果没有这个手册,请到http://www.yfrobot.com/forum.php ... 360&highlight=stm32下载,或留个邮箱我给您发一下。在主函数中,初始化,TIM2_Encoder_Init(0xffff, 0); //计数器自动重装值为最大
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2015-9-16 10:14:09 | 显示全部楼层
aosini 发表于 2015-9-7 08:36
是的。具体可以看STM32中文参考手册,第273页,14.3.12编码器接口模式。里面有较详细的说明,如果没有这 ...

手册有,不过还有个问题就是CNT重装值设置为0XFFFF,那它表示的数值是0-65535,还是32768~32767,因为-1的补码为1111 1111 1111 1111B,那么那么如果表示的是0-65536那么在向上计数其也能够计数到1111 1111 1111 1111B,这样返回数值的时候就搞不清正负了哦!其实就是想问CNT的数据类型!
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2015-9-16 10:16:03 | 显示全部楼层
我已经在贵在线商城买了小车的和其他配件,以后多多指教啊!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2018-10-17 05:02 , Processed in 0.095837 second(s), 19 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表