完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前段时间我使用电机的时候,在电机的数据结构体中都是使用int类型
struct CAN_Motor { int fdbPosition; //电机的编码器反馈值 int last_fdbPosition; //电机上次的编码器反馈值 int bias_position; //机器人初始状态电机位置环设定值 int fdbSpeed; //电机反馈的转速/rpm int round; //电机转过的圈数 int real_position; //过零处理后的电机转子位置 }; 电机的通信协议如下: [tr]数据域内容[/tr]
motor->position = CanReceiveData[0]<<8|CanReceiveData[1]; motor->speed = CanReceiveData[2]<<8|CanReceiveData[3]; 但是这样有个问题,就是当速度为负值的时候,比如现在电机转速是-1,但是我接收到的数据为65535,也就是原本应该是有符号的整形变成了无符号整形,所以我必须加下面的语句手动处理: /* 将电机速度反馈值由无符号整型转变为有符号整型 */ if(motor->fdbSpeed > 32768) { motor->fdbSpeed -= 65536; } 这样一来就显得非常麻烦,还好现在我找到了解决办法,就是把结构体里面的int类型改成short类型,就没有这个问题了。 struct CAN_Motor { short position; short speed; }; 这是因为short类型默认是由符号的,取值范围为-32768~32767,哪怕输入的确实是65535,它也会在数据类型转换的时候自动转变为-1,省去了我们手动处理的步骤。 |
|
|
|
只有小组成员才能发言,加入小组>>
2382 浏览 0 评论
8872 浏览 4 评论
36458 浏览 18 评论
4979 浏览 0 评论
24266 浏览 34 评论
1365浏览 2评论
1614浏览 1评论
2003浏览 1评论
1428浏览 0评论
1861浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 14:52 , Processed in 1.156839 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号