目录
SimpleFOC、ODrive和VESC 教程链接汇总:请点击
说明
在SimpleFOC代码中,ABZ信号和霍尔电机信号处理方式很像,都是信号边沿触发中断,在中断中获取状态计算角度。
本次移植驱动板103和官方代码保持一致。
驱动板405采用的是定时器计数脉冲,处理方式不同。
一、ABZ编码器介绍
- ABZ或者ABI,叫法不同但指的都是同一种编码器,也叫增量式编码器。
- ABZ编码器最大的优点就是接口统一,兼容性好。
- 不像SPI接口的磁编码器,不同厂家的芯片甚至同一厂家的不同型号,通信协议各不相同,换个编码器就要重新写代码。
1.1、ABZ信号
-
A、B两相相差90度,可通过比较A相在前还是B相在前,以判断编码器的正转与反转,通过零位脉冲,可获得编码器的零位参考位。
-
一般采用四倍频技术,比如500线的编码器,转一圈可以获得2000个脉冲信号,
1.2、光电式编码器
- 最初的ABZ编码器是光电式的,最有名的品牌是安华高( Avago),分辨率叫“线”,比如500线就是500ppr(2000cpr)。
- 拆开后是这样的:下图
- 500线属于正常分辨率,1000线算是比较高的,2000线的电机肯定很贵了。不像现在的磁编码器,起步就是1024ppr。
1.3、磁编码器
- 磁编码器体积小,性能强,价格便宜,发展的很快,会越来越多的代替光电编码器。
磁编码器购买链接:https://item.taobao.com/item.htm?ft=t&id=655599337824,图锐科技
- 需要说明的是,有些磁编码器上电后可以输出当前绝对位置对应的脉冲数(需要配置相应的寄存器)。下图:
ABZ编码器每次上电都需要校准,所以使用时会有不方便的时候,但这个功能完美的解决了校准问题。这也是光电编码器望尘莫及的功能,充分体现了磁编码器的灵活。
1.4、差分信号
- 在传输距离比较长的情况下(比如大于1m),信号容易发生变形和干扰,需要将编码器输出的TTL信号转为差分信号,待到控制器端再转为TTL信号。
- 工业应用中,ABZ差分信号是应用非常普遍的编码器接口。
- 在驱动板103或者驱动板405上,可以只用A+,B+,Z+做为ABZ信号,A-,B-,Z-悬空即可。虽然不够严谨,但是做为开发学习还是可以的。
二、电机驱动板103
ABZ编码器电机的代码是独立的,没有与其它编码器混在一起,不需要在 myproject.h 中设置编码器类型,代码看起来更简洁。
2.1、读ABZ信号的cpr
如果你已经知道编码器的cpr,可以跳过当前小节。
2.1.1、接线
A—SCL1(PB6/TIM4_1)、B—SDA1(PB7/TIM4_2)、Z—PA12
驱动板103 购买链接:https://item.taobao.com/item.htm?ft=t&id=656368067494,图锐科技
2804电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技
2.1.2、编译,下载代码
2.1.3、转动电机,观察串口打印
- 第一次输出的cpr肯定不准确,因为电机上电为任意位置,
- 可以发送指令“2”读取任意时刻的cpr。
2.2、驱动ABZ电机M1
2.2.1、接线
驱动板103 购买链接:https://item.taobao.com/item.htm?ft=t&id=656368067494,图锐科技
2804电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技
2.2.2、修改代码
-
在Myproject.h 中选择是否需要使用Z信号,然后修改cpr,
-
极对数按照实际写入,
-
voltage_sensor_align是电机零点校准时的电压值,需要根据电机功率设置,100W以内的电机基本属于小功率,可以设置的大一点,200W以上的属于大功率,设置的小一点。
-
如果不清楚电机功率,可以多试几个值,电源有电流显示的话观察下零点校准时的电流,只要在0.2A — 0.8A这个范围内就行,电流太小电机无力,校准可能不准确,电流太大电机会发热,容易损坏电机。
-
初次调试请选择 Type_voltage 模式,因为可以跳过电流环,电流环的PI参数非常难设置。
-
云台电机请选择 Type_voltage 模式,电机转速低且电流小,检测电流反而增加误差。
-
速度环的PI请自行设置,不清楚可以先把速度I参数设置为0,只用速度P参数,先让电机转起来再说。不同电机的PI参数不相同,具体请百度。
- 以下参数针对2804电机,编译后下载,
2.2.3、串口发送指令,观察电机运行
2.3、驱动ABZ电机M2
- A—SCL2(PB10)、B—SDA2(PB11)、Z—SWD(PA13),
- 其实最初的设计是打算接PA11引脚的,但是调试代码的时候发现PB11和PA11是同一个中断源EXTI_Line11,并且在中断代码中无法区分,所以用SWD(PA13)来代替。
- SWD(PA13)并没有设计外部上拉电阻,反复测试后确定只要代码中打开了内部上拉也可以的。
- 只是占用SWD后不能再用ST-link下载代码了,请大家使用串口下载。
- 串口下载的方法在 SimpleFOC移植STM32(二)—— 开环控制 的第3.2小节有说明,不清楚的可以去查看。
接线:
驱动板103 购买链接:https://item.taobao.com/item.htm?ft=t&id=656368067494,图锐科技
2804电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技
接下来的操作与 2.2小节相同,请参考上面。
2.4、驱动双ABZ电机
驱动板103 购买链接:https://item.taobao.com/item.htm?ft=t&id=656368067494,图锐科技
2804电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技
请结合上面的2.2和2.3小节操作。
需要注意的是,控制M1的电机发送指令以 A开头,比如 A6.28;控制M2的电机发送指令以 B开头,比如 B6.28。
三、电机驱动板405
- 驱动板405在最初设计的时候已经支持ABZ编码器,只需要在 Myproject.h 文件选择编码器类型即可。
- 与驱动板103的中断方式处理ABZ信号不同,驱动板405使用定时器计数AB脉冲。TIM3计数M0的AB相,TIM4计数M1的AB相。
- 定时器计数减少了中断,在角度处理的方式上与磁编码器类似,需要主动读取定时器,
四、总结
- 光电编码器的信号输出有开漏和推挽多种形式,不确定信号类型情况下,在单片机接口上最好能接 上拉电阻,
- 光电编码器的工作电压一般为5V,接3.3V后不工作。驱动板103没有5V电源输出。
- 磁编码器输出的ABZ信号一般为推挽输出,有一定的驱动能力,所以有没有上拉电阻不重要。
- 磁编码器的工作电压为3.3V-5V,接STM32单片机尽量用3.3V电源。
(完)