打印
[学习笔记]

AC7811-FOC无感控制代码详解

[复制链接]
楼主: 狗啃模拟
手机看帖
扫描二维码
随时随地手机跟帖
41
狗啃模拟|  楼主 | 2023-9-30 11:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
Stall_Check_Sensorless 堵转保护(无位置传感器)
可通过两种方式判断无传感模式下发生堵转情况:

1. 方差与平均转速平方的比例超过设定阈值。

2. 反电动势幅值与当前估算转速的比例超过设定阈值。

使用特权

评论回复
42
狗啃模拟|  楼主 | 2023-9-30 11:12 | 只看该作者
/*!
* @brief Motor stall protection detection for position sensorless application.
*
* @param[in] pHandle: pointer to SPEED_RAMP_HANDLE structure
* @param[in] smc: pointer to SMC_ESTIMATOR structure
* @return status: fault diagnosis status, 0 OK; 1 fault; 2 unknown
*/
int16_t Stall_Check_Sensorless(SPEED_RAMP_HANDLE *pHandle, SMC_ESTIMATOR *smc)
{
    int16_t status = DIAGNOSTIC_OK;

    static int16_t bemfReliableCnt = 0;
    int32_t avgSquareSpeed = 0;

    int32_t bemfReliableThreshold = 0;
    #if ((defined FLUX_OBSERVE) || (defined MRAS_OBSERVE))
    int32_t estBemfSq = 0;
    #endif

    if ((g_startUpCtrl.startUpFlag >= 3) && (g_startUpCtrl.startUpFlag < 6))
    {
        //ASR_AvgSpeedCalc(pHandle);
        avgSquareSpeed = (int32_t)(pHandle->avgSpeedFbk) * (int32_t)(pHandle->avgSpeedFbk);
        bemfReliableThreshold = avgSquareSpeed;
        g_bemfReliableThreshold = bemfReliableThreshold;
        #if (defined SMC_OBSERVE)
        Smc_GetBemfSq(smc);
//        g_estBemfDebug = (smc->estBemfSq * BEMF_CONSISTENT_THRESHOLD) >> 4;
        if ((((smc->estBemfSq * BEMF_CONSISTENT_THRESHOLD) >> 4) < bemfReliableThreshold))
        {
            if (++bemfReliableCnt >= BEMF_DBC)
            {
                status = DIAGNOSTIC_FAIL;
                bemfReliableCnt = 0;
                g_protector.stallProFlag = 1;
                #if (defined STARTUP_CHECK_RESTART_ENABLE)
                #else
                Fault_Report(MOTOR_STALL_FAILURE);
                #endif
            }
        }
        else
        {
            bemfReliableCnt=0;
        }
        #elif (defined FLUX_OBSERVE)//磁链观测
        estBemfSq = (g_fluxObserver.emfAlpha * g_fluxObserver.emfAlpha + g_fluxObserver.emfBeta * g_fluxObserver.emfBeta) >> 8;
        g_estBemfDebug = estBemfSq * BEMF_CONSISTENT_THRESHOLD;
        if (((estBemfSq * BEMF_CONSISTENT_THRESHOLD) < bemfReliableThreshold) && (pHandle->varianceSpeed < 500000))
            //保护方差与反电动势
        {
            if (++bemfReliableCnt >= BEMF_DBC)
            {
                status = DIAGNOSTIC_FAIL;
                bemfReliableCnt = 0;
                g_protector.stallProFlag = 1;
                #if (defined STARTUP_CHECK_RESTART_ENABLE)
                #else
                Fault_Report(MOTOR_STALL_FAILURE);
                #endif
            }
        }
        else
        {
            bemfReliableCnt = 0;
        }
        #elif (defined MRAS_OBSERVE)
        estBemfSq = (g_mrasObserver.vdFilter * g_mrasObserver.vdFilter + g_mrasObserver.vqFilter * g_mrasObserver.vqFilter) >> 8;
//        g_estBemfDebug = estBemfSq * BEMF_CONSISTENT_THRESHOLD;
        if (((estBemfSq * BEMF_CONSISTENT_THRESHOLD) < bemfReliableThreshold) && (pHandle->varianceSpeed < 500000))
        {
            if (++bemfReliableCnt >= BEMF_DBC)
            {
                status = DIAGNOSTIC_FAIL;
                bemfReliableCnt = 0;
                g_protector.stallProFlag = 1;
                #if (defined STARTUP_CHECK_RESTART_ENABLE)
                #else
                Fault_Report(MOTOR_STALL_FAILURE);
                #endif
            }
        }
        else
        {
            bemfReliableCnt = 0;
        }
        #endif
    }
    else
    {
//        g_estBemfDebug = 0;
//        g_bemfReliableThreshold = 0;
    }

    return status;
}

使用特权

评论回复
43
狗啃模拟|  楼主 | 2023-9-30 11:13 | 只看该作者
Current_Sensor_Check 相电流中点检测保护
上电初始化阶段调用,获取三相电流中点偏移大小,超过 5%中点偏移电压

使用特权

评论回复
44
狗啃模拟|  楼主 | 2023-9-30 11:13 | 只看该作者
#if (CUR_SAMPLE_MODE == THREE_SHUNT_SAMPLE) //电流传感器采样零点漂移检查,电流采样ADC零漂移值超过限制,这是故障。
    /* 2048 *5% = 102 */
    if (Math_Qabs(adcSampleReal->icOffset - 2048) > 102)
    {
        Fault_Report(PHASEC_CURRENT_MIDPOINT_FAILURE);
    }
    else
    {
        Fault_Clear(PHASEC_CURRENT_MIDPOINT_FAILURE);
    }
#else
#endif

使用特权

评论回复
45
tpgf| | 2023-10-12 09:22 | 只看该作者
转速和电流之间的算法是固定的关系吗

使用特权

评论回复
46
qcliu| | 2023-10-12 10:14 | 只看该作者
如何控制步进电机的转速以及采集转速呢

使用特权

评论回复
47
coshi| | 2023-10-12 10:35 | 只看该作者
我们如何精准的测得当前电机的转速呢

使用特权

评论回复
48
wiba| | 2023-10-12 11:01 | 只看该作者
发生堵转的时候电流会不会明显增大呢

使用特权

评论回复
49
caigang13| | 2023-10-12 20:36 | 只看该作者
矢量控制对三相电流采样要求确实要高些。

使用特权

评论回复
50
kxsi| | 2023-10-12 21:21 | 只看该作者
如果对这些信号检测的实时性要求高的话 是不是就需要跑一下系统了呢

使用特权

评论回复
51
drer| | 2023-10-12 21:59 | 只看该作者
这种双环控制的交互关系如何进行处理呢

使用特权

评论回复
52
tpgf| | 2023-10-21 11:50 | 只看该作者
这种无感的控制算法可以分为几大类呢

使用特权

评论回复
53
xiaoqizi| | 2023-10-21 13:10 | 只看该作者
三相电流的相位差是不是是固定值呢

使用特权

评论回复
54
八层楼| | 2023-10-21 13:45 | 只看该作者
一般这种算法所用的参数是全局变量还是局部变量啊

使用特权

评论回复
55
keaibukelian| | 2023-10-21 20:23 | 只看该作者
一般这种电机控制的代码 为了保证实时性能是不是都需要跑系统呢

使用特权

评论回复
56
wowu| | 2023-10-21 21:00 | 只看该作者
电机做零速保护的作用是什么呢

使用特权

评论回复
57
paotangsan| | 2023-10-21 21:30 | 只看该作者
我们采集的电流是脉动电流 通过什么算法得到有效值呢

使用特权

评论回复
58
天天向善| | 2023-11-6 10:09 | 只看该作者
是否有必要运行系统以确保通用电机

使用特权

评论回复
59
LinkMe| | 2023-11-6 12:13 | 只看该作者
三相电流的相位差是一个固定值吗

使用特权

评论回复
60
软核硬核| | 2023-12-8 12:39 | 只看该作者
怎么节制步进机电的转速和收集转速呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则