ODrive0.5.1程序分析#1 电机校准(motor_calibration)

本文详细分析了电机校准程序,重点介绍了电阻和电感检测过程。在电阻检测中,通过设置最大校准电压和电流,利用控制循环测量相电阻。电感检测则采用正负电压进行,通过计算电压变化率来确定电感值。整个过程涉及SVPWM技术及ADC中断处理,展现了电机控制系统的精密运作。

电机校准程序分析

固件版本 fw-0.5.1(0积分下载)

代码分析

状态命令

当发送状态为AXIS_STATE_MOTOR_CALIBRATION时进行电机校准,执行run_calibration函数
axis.cpp
对于函数run_calibration,当电机类型设置为MOTOR_TYPE_HIGH_CURRENT(大电流电机)或MOTOR_TYPE_ACIM(感应电机)时,进行电机电阻检测和电感检测

1. 电阻检测

1)

将GUI设置的calib_max_voltage(最大校准电压)赋值给R_calib_max_voltage,与设置的calibration_current(校准电流)一同作为电阻检测函数的输入,运行measure_phase_resistance函数
motor.cpp

2)

对于函数measure_phase_resistance,①先设置根据电流偏差算电压所需要的KI参数,然后根据测试时间除以采样周期得出run_control_loop函数的循环次数,run_control_loop函数内为循环函数,用{}内程序返回值作为判断条件,当返回false/0时停止循环;
②{}内函数首先根据检测的bc相电流直接得到Ialpha,然后计算与输入的calibration_current的差值得到校准电压test_voltage进入函数enqueue_voltage_timings

motor.cpp

3)

对于函数enqueue_voltage_timings输入为test_voltage作为v_alpha,v_beta等于0,然后根据等幅值变换之后的电压最大值算出新的alpha、beta(此为SVPWM一种写法的预处理),作为输入传进函数enqueue_modulation_timings
motor.cpp

4)

对于函数enqueue_modulation_timings,首先根据输入alpha、beta经过SVPWM算开启时刻tA、tB、tC,然后计算开启时刻比较寄存器的值next_timing,同时将next_timing_valid置为true
motor.cpp

5)

对于函数pwm_trig_adc_cb——此函数在ADC注入组中断中调用,时间顺序为:高级定时器CH4触发ADC注入组采集,注入组采集完成根据标志位进入ADC中断,然后调用该函数。
next_timing_valid置为true后会将计算的next_tings作为输入进入函数safety_critical_apply_motor_pwm_timings
low_level.cpp

6)

对于函数safety_critical_apply_motor_pwm_timings,将输入的next_timing赋值给CCR进行驱动电机。
low_level.cpp

7)

此时回到1.2)中③,算是完成了一次run_control_loop函数判定条件的一次循环,重复进行到指定次数,得到最终的test_voltage根据公式R=U/I,U=得到的test_voltage,I=输入的校准电流test_current得到相电阻R

2. 电感检测

1)

将GUI里设置的最大校准电压的正负值作为measure_phase_inductance函数的输入
motor,cpp

2)

对于函数measure_phase_inductance①首先将负的最大校准电压作为输入的voltage_low正的的最大校准电压作为输入的voltage_high构成数组test_votage设置电流数组Ialpha 分别对应最大值最小值下的电流;设置循环次数num_cycles=5000注意循环判定中有num_cycle<<1,则num_cycle=10000,由于i=t&1,故每次循环后i=0/1交替故为两电压各循环500次。②将电压作为输入进入函数enqueue_voltage_timings,经过计算同1.3)—1.6)驱动一次循环。③根据公式L=U/(di/dt)U=voltage_high 由于俩电压有正负之分,故产生的两电流也有正负之分,di/dt=两电流绝对值之和/(采样周期*num_cycles)(注意采样周期*cycles不等于测试时间,因为总循环次数为二倍的num_cycle)。
motor.cpp

本部分结束

原创不易,如果对你有帮助的话,希望可以点赞关注收藏,谢谢😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值