首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨CANbus发送浮点/双值

跨CANbus发送浮点/双值
EN

Stack Overflow用户
提问于 2022-09-12 13:44:48
回答 1查看 97关注 0票数 0

我正在准备一个通过CANbus (电源、电压、电流等)发送各种电气参数的代码。在这种情况下,精度是必需的。

我看到有两种选择:

  1. 将值作为整数发送,但在发送和接收端(例如发送x100、接收/100 )进行缩放。如果我这样做,那么我可以将2.12V发送为212 (或0xD4)。
  2. 将其作为浮点数发送,这将需要32位,但不需要缩放。

我的问题如下:

  1. 可以在CANbus?
  2. 上发送浮点数,如果是Q1,这是一种常见的做法吗?还是大多数CANbus通信程序员使用缩放整数?

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-13 07:03:19

首先,请阅读这个答案,因为它回答了所有浮点关注的问题:

Does the "Avoid using floating-point" rule of thumb apply to a microcontroller with a floating point unit (FPU)?

  1. 可以通过CANbus?

发送浮点值。

是的,尽管像任何一个大的数字一样,它们依赖endianess,所以您必须为您的CAN应用层上的浮点指定一个网络endianess。在单个包中发送4或8个字节显然不是问题。

  1. 如果是Q1,这是一种常见的做法吗?还是大多数CANbus通信程序员使用缩放整数?

这是不常见的做法,未缩放的原始数据是目前为止最常见和最方便的。例如,如果您希望表示0到5V之间的电压,您可以发送0到65535之间的原始数据值,然后将其缩放为表示Volt,如果您确实需要在某个点使用该单元(例如,当在显示器上显示人类的电压时)。

原始数据表单还具有向前/向后兼容技术的优点。假设您使用10位ADC读取电压。您的值将在0到1023之间。您可以用(65536/1024) = 64乘以16位原始数据来表示。几年后,您切换到一个12位的ADC值高达4095。然后,您可以保持完全相同的can协议和格式,只需增加分辨率,减少原始数据的“步骤”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73690327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档