OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13907|回复: 12

帮忙看下这一段编码器的代码

[复制链接]

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2012-8-25
在线时间
1 小时
发表于 2013-7-19 10:14:50 | 显示全部楼层 |阅读模式
/*******************************************************************************
* Function Name : ENC_Get_Electrical_Angle
* Description   : Returns the absolute electrical Rotor angle 
* Input         : None
* Output         : None
* Return         : Rotor electrical angle: 0 -> 0 degrees, 
*                                          S16_MAX-> 180 degrees, 
*                                          S16_MIN-> -180 degrees                  
*******************************************************************************/
s16 ENC_Get_Electrical_Angle(void)
{
  s32 temp;
  
  temp = (s32)(TIM_GetCounter(ENCODER_TIMER)) * (s32)(U32_MAX / (4*ENCODER_PPR)); 
  return((s16)(temp/65536)); // s16 result
}                                ENCODER_PPR是编码器线数。为什么angle: 0 -> 0 degrees,  S16_MAX-> 180 degrees,  S16_MIN-> -180 degrees   
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-19 11:15:41 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2013-6-18
在线时间
0 小时
发表于 2013-7-19 13:16:03 | 显示全部楼层
不懂,帮顶!
只求每天都能把小事做好。
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-7-19 13:39:07 | 显示全部楼层
范围变换.

设a∈[0,100),经过b=a*65536/100后,b∈[0,65536).

经过32bit变换而不直接变换是为了保留计算精度.

剩下的自己想.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

21

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2013-4-12
在线时间
0 小时
发表于 2013-8-3 17:26:04 | 显示全部楼层
回复【4楼】shihantu:
---------------------------------
我左看右看这个函数的有返回值不会负数吧,而S16_MIN是-32768。还有就是(s32)(U32_MAX / (4*ENCODER_PPR))是什么意思?
大侠赐教。
自由的代价永远是警惕!
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-8-3 18:51:28 | 显示全部楼层
返回值不会负数吧,而S16_MIN是-32768
回去补补c语言,看看-32768在计算机长什么样子.

(s32)(U32_MAX / (4*ENCODER_PPR))是什么意思? 
回去看看这里3L,顺便看看小学4年级的数学,看看乘法除了分配律还有什么律.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

21

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2013-4-12
在线时间
0 小时
发表于 2013-8-3 22:54:22 | 显示全部楼层
回复【6楼】shihantu:
---------------------------------
temp/65536是取temp的高16位,这个值和角度有什么关系?
自由的代价永远是警惕!
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-8-3 23:48:34 | 显示全部楼层
有劳您看看1L的注释.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

16

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2013-8-10
在线时间
0 小时
发表于 2014-9-2 10:22:40 | 显示全部楼层
回复【5楼】西北风:
---------------------------------你搞懂了吗?给我讲讲啊
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-3-22
在线时间
8 小时
发表于 2015-5-2 13:45:43 | 显示全部楼层
 不会理解的使用电脑的计算器,程序型:
1.十进制输入32767 鼠标点击‘+-’按钮 就可以转化为负数 
2.不断的加一,观察窗口二进制的变化,高位为1(代表这是个负数,要选择字类型观察)可以看到二进制不断增加,即计数值超过32767(180度),就会进入32768(1 000 0000 0000 0000 )转化为有符号的即-32768(-180度),往后计数值继续增加代表着度数的增加。
第一次发表回复(勿喷
知行和一
回复 支持 反对

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
发表于 2015-7-21 22:18:35 | 显示全部楼层
回复【10楼】鬼谷子:
---------------------------------
可以告诉我U32_MAX是多少啊?
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-3-22
在线时间
8 小时
发表于 2015-12-6 08:37:05 | 显示全部楼层
回复【11楼】张晓斌:
---------------------------------
不是无符号数的最大值么
知行和一
回复 支持 反对

使用道具 举报

53

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2013-4-10
在线时间
84 小时
发表于 2016-2-2 08:46:16 | 显示全部楼层
楼主  这个函数分析透了吗,我也不接U32_MAX是什么意思???
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 07:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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