名人堂再聚首 2024-03-02 11:41 采纳率: 52.8%
浏览 3
已结题

输出电压缓起的算法问题

大家好!请教下下面代码片断中的输出电压缓起(V54_Slow这个变量)是什么算法(最后4行代码)?V_SampleValueFilt是经过AD模块滤波检测后的值,谢谢了!

long    l2;
        
    if(SampleFlag != 0)
    {
        l2 = V_SampleValueFilt;                            //54V输出电压计算
        l2 *= 6450;//3.5V-->maximum value is :64.5V, 54V输出引脚当为5V时对应的电压是64.5V,这里放大100倍
        l2 >>= 12;
        #if 1
        l2 *= Para_A[1];//斜率,校准参数1,默认是10000,都是从EEPROM读取
        l2 /= 10000;
        l2 += Para_B[1];//截距,校准参数2,默认是0
        #endif
        if(l2 <= 0)
            V54 = 0;
        else
            V54 = l2;
        **lOutVolt = V54 + (lOutVolt - (lOutVolt >> 3));//用于54V输出缓起计算**
        Disable_Int();    
        **V54_Slow = (lOutVolt >> 3);//54V输出缓起**
        Enable_Int();
}

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-02 11:41
    关注

    引自免费微信小程序:皆我百晓生

    这段代码是用来计算并实现54V输出电压缓起功能的。我将逐步解释这个算法:

    1. 原始电压采样及转换

      • 首先,当SampleFlag不为0时,获取经过AD模块滤波后的电压值V_SampleValueFilt
      • 将该值放大到一个合适的范围(这里放大了100倍,对应于最大64.5V),然后右移12位进行量化调整。
    2. 电压校准

      • 使用从EEPROM读取的校准参数对计算出的电压进行校准:首先用斜率参数Para_A[1]乘以转换后的电压值,然后除以10000作为标准化因子;接着加上截距参数Para_B[1],得到校准后的电压V54
    3. 输出电压缓起处理

      • 对校准后的电压V54做缓起处理,这里的缓起算法是这样的:
        • lOutVolt用于存储当前实际输出电压的缓起过程中的中间值。
        • 更新lOutVolt的值,让它缓慢接近V54,通过(lOutVolt - (lOutVolt >> 3))实现分阶段增加,其中(lOutVolt >> 3)相当于将lOutVolt的值四舍五入到八分之一精度。
        • 然后将新的lOutVolt加上这个差值,使得输出电压逐渐升高至目标值。
    4. 最终缓起输出值设置

      • 在关闭中断的情况下,将更新后的lOutVolt右移3位,得到V54_Slow,这个变量表示的是54V输出电压缓起的结果值。
      • 开启中断后,系统会根据V54_Slow来控制实际的输出电压,从而实现输出电压的缓起效果。

    总结来说,这段代码利用校准后的电压值,并结合一个简单的增量式算法实现了输出电压的平滑上升,避免了电压突变可能带来的冲击和设备损坏风险。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line