1) 方向定义 2) 功能函数 3) 功能说明 4) 测试结果

常用的编码器有绝对值编码器和增量编码器,那么什么是软件增量编码器呢?
对于步进电机举例,在不考虑电机失步的情况下,外部接硬件增量编码器,那么定时器每输出M个PWM,那么步进电机转动一定角度,硬件增量编码器输出N个PWM波形,那么定时器输出的M个数与硬件增量编码器输出的N个数就是一一对应的。不同的电机驱动器细分或硬件增量编码器,比值可能不同,一旦硬件确定,那么M/N比值就确定了。
那么即使在没有硬件增量编码器的情况下,只要知道输出了多少波形,就可以知道对应编码器输出多少波形,也就知道了转动角度位置。输出波形的个数,对应转动角度位置,这就是软件增量编码器的原理。
该数据仅为PWM个数统计,对于实际的距离或角度,应用层需要根据实际结构进行转换。
所以对于定时器输出PWM的个数统计和方向,就是软件增量编码器。
1) 方向定义
定义电机旋转方向:以面向电机轴的视角,顺时针为正转,逆时针为反转。
定义方向IO 低电平为:顺时针为正转;高电平为:逆时针为反转
定义 CW IO脉冲:顺时针为正转;CCW IO脉冲:逆时针为反转
+X+Y+Z 轴方向,表示 顺时针为正转;-X-Y-Z 轴方向,表示 逆时针为反转
定义软件增量编码器个数:正数:顺时针为正转;负数:逆时针为反转。0:表示原点
2) 功能函数
使用s32类型数据表示软件增量编码器个数,其中
get:获取当前数值
init:归零时设置零点值,
set:设置累加值,仅driver层使用。
s32 mt_motor_real_coordinate_get(E_MOTOR index){ mt_assert(index < MOTOR_MAX,0);return motor_pwm[index].pwm_coordinate;}void mt_motor_coordinate_init(E_MOTOR index){ mt_assert(index < MOTOR_MAX); motor_pwm[index].pwm_coordinate = 0;//此时位置为坐标原点}static inline void mt_motor_coordinate_set(E_MOTOR index,s32 num){ motor_pwm[index].pwm_coordinate += num;}3) 功能说明
软件增量编码器,理论上,如果在不是失步的情况下,等于硬件编码器。在一定情况下,替代硬件增量编码器。
8轴运动控制器,每路都有一个的软件增量编码器,该软件增量编码器适用于所有的运动情况,T型曲线,S型曲线,直线插补,圆弧插补,空间插补。
软件增量编码器,难点在于插补,限位停止时,单双脉冲模式的数据计算。
4) 测试结果
测试条件:1/3/5/7轴单脉冲模式;2/4/6/8轴双脉冲模式;
1轴:正转,速度50000Hz,输出个数4123456。 2轴:反转,速度50000Hz,输出个数4123456。 3轴:正转,T型曲线,速度50000Hz,加速时间1000ms,输出个数4123456. 4轴:反转,S型曲线,速度50000Hz,加速时间1000ms,输出个数4123456. 5/6轴:直线插补,速度50000Hz,终点坐标(4123456, 4123456>>2) 7/8轴:圆弧插补,速度50000Hz,起点坐标(4123456>>2, 0)终点坐标( 4123456>>2, 0),顺时针旋转。
软件增量编码器 数值 通过串口通讯打印出。32位最高位表示正负,其余表示大小,十进制。
7/8轴 为0 ,因为画一个正圆后,坐标回到原点。

夜雨聆风