阿豪博士 发表于 2024-6-28 10:52:37

CANFD计算公式或者计算软件,大家有推荐的吗?

本帖最后由 阿豪博士 于 2024-6-28 12:22 编辑

CANFD计算公式或者计算软件,大家有推荐的吗?
比如根据 主频,仲裁域、数据域期望值,列出各数值可能性!

lingdianhao 发表于 2024-6-28 12:18:31

要计算什么得说清楚。

qwe2231695 发表于 2024-6-29 15:03:32

编写一个用于计算CAN FD (Controller Area Network Flexible Data-Rate) 总线参数的程序是一个实用的项目,尤其是对于那些需要优化其嵌入式系统通信性能的工程师而言。以下是一个基础示例,展示如何根据给定的主频、期望的仲裁域位速率和数据域位速率来计算可能的CAN FD参数。请注意,实际应用中还需考虑CAN FD规范的限制和其他硬件约束。
def calculate_canfd_timing(frequency, nominal_bitrate, data_bitrate):
    """
    计算CAN FD定时参数。
    参数:
    frequency - 控制器的工作频率(单位:Hz)。
    nominal_bitrate - 期望的仲裁域位速率(单位:bit/s)。
    data_bitrate - 期望的数据域位速率(单位:bit/s)。
   
    返回一个包含可能的CAN FD定时参数的字典,如样本点、相位缓冲段1、相位缓冲段2等。
    """
    # CAN FD规范中的最小时间量子(QT),单位为ns,这里简化处理,实际应根据具体控制器确定
    QT_NS = 1
   
    # 计算仲裁域和数据域的时间段
    nominal_tq = int(frequency / nominal_bitrate)
    data_tq = int(frequency / data_bitrate)
   
    # 确保时间量子数符合CAN FD规范的最小要求,此处假设最小1个时间量子
    nominal_tq = max(nominal_tq, 1)
    data_tq = max(data_tq, 1)
   
    # 示例计算:分配相位缓冲段1和2,这里简化处理,实际配置需满足同步、相位误差等要求
    prop_seg_nominal = 1# 传播时间段,简化起见设为1 Tq
    phase_seg1_nominal = nominal_tq - prop_seg_nominal - 1# 确保至少1 Tq的相位缓冲段2
    phase_seg2_nominal = 1# 同上,简化处理
   
    prop_seg_data = 1# 数据域的传播时间段,同样简化处理
    phase_seg1_data = data_tq - prop_seg_data - 1
    phase_seg2_data = 1
   
    # 返回计算结果
    return {
      "Nominal Bit Timing": f"{nominal_tq} Tq ({nominal_bitrate} bit/s)",
      "Data Bit Timing": f"{data_tq} Tq ({data_bitrate} bit/s)",
      "Nominal Phase Seg1": phase_seg1_nominal,
      "Nominal Phase Seg2": phase_seg2_nominal,
      "Data Phase Seg1": phase_seg1_data,
      "Data Phase Seg2": phase_seg2_data,
    }

# 示例使用
frequency = 80e6# 80 MHz 主频
nominal_bitrate = 500e3# 500 kbit/s 期望仲裁域位速率
data_bitrate = 2e6# 2 Mbit/s 期望数据域位速率

canfd_params = calculate_canfd_timing(frequency, nominal_bitrate, data_bitrate)
for key, value in canfd_params.items():
    print(f"{key}: {value}")

阿豪博士 发表于 2024-6-30 13:37:36

很厉害啊!
页: [1]
查看完整版本: CANFD计算公式或者计算软件,大家有推荐的吗?