试着去做驱动器 SDrive系列
项目地址:https://github.com/yltzdhbc/SmartDrive_BDC
项目地址:https://github.com/yltzdhbc/SmartDrive_BDC2
项目地址:https://github.com/yltzdhbc/SmartDrive_DS
项目地址:https://github.com/yltzdhbc/SmartDrive_STP
注意
未完待续...
- SDrive-BDC
- SDrive-STP
SDrive_BDC 直流有刷伺服驱动器
直流有刷伺服驱动器(SmartDrive - Brushed DC)
综述
该驱动是 智驱系列 的直流有刷电机版本,该版本具有使用了DRV8701全桥栅极驱动器 ,CSD18537NQ5A大功率MOS,长时间负载能力达到了最高36V、持续10A ,24KHZ PWM 调速,三环控制。
功能特点
- 支持电压6V~24V,精巧尺寸,尺寸仅仅为4MMX4MM
- 一键电机相序适配,温度监测,最大可2倍额定电流输出,大启动力矩
- **支持CAN总线通讯;1MHZ频率支持
- 支持电机过载限流、堵转停机、温度测量、过热限流/保护。
- 电机电流PID调节控制,最大启动/负载电流、制动电流可分别配置;
- 支持电位器与开关、模拟信号与逻辑电平、PWM/频率/脉冲信号、RS485多种输入信号
- 支持占空比调速(调压)、速度闭环控制(稳速)、位置闭环控制(步进/伺服)、力矩控制(限流)多种调速方式
- 支持加减速缓冲时间与加减速加速度控制,可在指定行程内自动加减速并精确定位
- 支持单电位器、双电位器独立、双电位器比较控制正反转速度
- 支持模拟信号电压范围配置与逻辑电平电压配置,模拟信号支持0~3.3V电压范围,逻辑电平可支持0~24V等电压;支持模拟信号线性度调整与逻辑电平阈值配置
- 支持外部PWM、频率信号对电机调速,支持外部脉冲信号对电机进行步进控制
- 支持外接限位开关限位和堵转限位
- 24kHz的PWM频率,电机调速无PWM嚣叫声
电气参数
项目 | 参数 |
---|---|
电源输入电压 | DC 9V~24V |
额定输出电流 | 8A;3A |
最大输出电流 | 额定8A款:10A(非倍流)/16A(倍流输出); 额定3A款:4A(非倍流)/6A(倍流输出) |
霍尔传感器接口电压 | 5V |
最大软制动电流 | 3A |
输出通道数 | 单路 |
电位器阻值 | 10K~50K |
输入信号端口接受电压范围 | -0.5V~25V (故障/完成信号输出端口除外) |
模拟信号范围 | 0~3.3V范围内任意 |
数字信号电压范围 | 0~24V范围内任意,LvTTL,TTL,HvTTL等 |
PWM输入信号支持频率范围 | 100Hz~10kHz;注:输出PWM频率固定18kHz |
频率输入信号支持范围 | 0~10kHz |
输出PWM频率 | 18kHz |
输出PWM分辨率 | 1/1000 |
电流检测分辨率 | 0.04A |
稳流控制精度 | 0.1A |
占空比调速范围 | 0~100.0% |
稳速控制调节范围 | -3276.8~3276.7Hz |
位置控制调节范围 | -2147483648~2147483647 |
转矩控制调节范围 | 0~额定电流 |
软启动/软制动 | 支持;可限流启动、制动及设定加减速时间与加速度 |
过流/堵转保护 | 支持;过流时限流输出;堵转时可停机 |
输出短路保护 | 可配置 |
制动动作时间 | 软制动通常0.1s~0.3s |
主板工作温度 | -25℃~85℃ |
通信方式
- CAN总线,使用SmartDrive SDK可以快速的集成到系统中,使用起来非常方便。
- USART(串口),默认115200通信速率,使用SmartDrive SDK。
- USB,使用VCP协议直接连接电脑,与上位机进行通信,可直接对控制器进行调试,配置参数。
SmartDrive SDK
SmartDrive SDK是专为SmartDrive系列驱动器开发的通信协议,支持CAN 和 USART两种方式通信,现主要支持STM32 F1、F4系列,使用HAL库。
为了使SmartDrive系列驱动的开发变得简单,自带了很多例程,对通信协议部分做了单独的解耦合,确保使用HAL库的用户可以很轻松的移植上手。
SDrive_BDC2 直流有刷伺服驱动器
双路直流有刷伺服驱动器(SmartDrive - Brushed DC 2 way)
简介
"智驱" 的双路直流有刷电机版本,该版本可以同时驱动两个直流有刷电机。
BDCM2 带有位置环、速度环、电流环,具有过流报警、自动保护的功能。
该版本可以提供单路 最高36V、持续10A 的大电流输出。
通信方式
兼容两种通信方式
分别是 STEP/DIR ,兼容一般的步进电机,私服系统。
USART(串口),使用115200通信速率,遵循私有协议,可发送位置、速度指令进行控制。连接上位机可进行PID调参、实时监控电流、速度、位置信息。
SDrive_DS 一体化舵机驱动
总线舵机/pwm舵机 一体化驱动控制器(SmartDrive Digital Servo)
综述
该驱动是 智驱系列 的串口总线舵机版本,该版本具有3个串口总线舵机接口,支持博创CDS55XX系列舵机、Robotics的Dynamixel系列总线舵机,使用单线半双工串口,1M的波特率,波特率可调。支持8路PWM舵机可轻松驱动普通50HZ的PWM舵机,且PWM分辨率达到了1/2000,控制更精准。支持更改PWM周期,可配置为330HZ以用于相应速度更快的数字舵机。对于PWM舵机内置了速度斜坡,速度限制等,以获取更平稳的运动。 ·
功能
- 支持舵机:博创CDS55XX系列、Robotics Dynamixel系列、普通PWM舵机、数字PWM舵机。
- 通信能力:最高1M波特率串口半双工总线,DMA接收。
- 最多支持:最多253个总线舵机、8个PWM舵机。
- 控制方式:CAN总线、USART串口
- 控制协议:SmartDrive SDK
硬件参数
元件 | 型号 | 说明 |
---|---|---|
处理器 | GD32F103CBT6 | 20KRAM 128K FLASH 72MHZ |
串口逻辑 | SN74HC126 | 具有三态输出的四路总线缓冲器闸 |
CAN收发器 | TJA1051 | 最高1M HZ 可选则的120R电阻 |
总线舵机接口 | XH2.54-WI-3P | 总线舵机接口 |
PWM接口 | HRD2.54-LI-3P | 3p舵机接口 |
用户交互接口 | KF2EDGR-3.81-9P | 高品质3.81接口 |
通信方式
- CAN总线,使用SmartDrive SDK可以快速的集成到系统中,使用起来非常方便。
- USART(串口),默认115200通信速率,使用SmartDrive SDK。
- USB,使用VCP协议直接连接电脑,与上位机进行通信,可直接对控制器进行调试,配置参数。
SDrive SDK
SmartDrive SDK是专为SmartDrive系列驱动器开发的通信协议,支持CAN 和 USART两种方式通信,现主要支持STM32 F1、F4系列,使用HAL库。
为了使SmartDrive系列驱动的开发变得简单,自带了很多例程,对通信协议部分做了单独的解耦合,确保使用HAL库的用户可以很轻松的移植上手。
SDrive-STP 步进伺服闭环驱动
步进闭环伺服驱动(SmartDrive Stepper)
我的博客:https://yltzdhbc.top/SmartDrive-Stepper/
Github: https://github.com/yltzdhbc/SmartDrive-Stepper/
Gitee: https://gitee.com/yltzdhbc/SmartDrive-Stepper/
驱动简介
硬件参数
名称 | 参数 |
---|---|
主控芯片 | 意法半导体STM32F030C8T6 |
驱动芯片 | 两颗A4950(最大电流3.5A) |
编码器芯片 | 英飞凌15位工业级TLE5012B |
性能参数
名称 | 参数 |
---|---|
工作电压 | 12-30V |
工作电流 | 额定1.3A 最大2.5A |
控制精度 | 0.08度 |
软件细分 | 4/8/16/32可选 |
步进伺服原理
步进电机本身是一个开环伺服系统,因为开环就能实现伺服的效果,因此运用广泛,但我们对电机的精度要求越来越高,有些场合不适用于开环系统,因为开环系统会造成丢步、控制精度降低、不稳定等一系列因素。闭环对于步进电机来说也十分重要。
以下来源于HyperCNC杨工的开源网站
首先讲一下二相步进电机闭环驱动和开环驱动的区别。假设现在上位机主机发DIR/STEP指令给步进驱动器的指令角度是90.5度。开环的驱动器收到指令后即根据细分电流表调整步进电机的两相电流,将电流矢量也指向90.5度,然后步进电机永磁转子就会在电磁力作用下运动到90.5度这个位置上了,这其中步进电机AB两相的驱动电流在设置好后就不变了,只要接下来没有新的角度指令那就一直保持原样不改变。闭环控制器则不然,当闭环控制器收到90.5度的指令角度时,首先利用角度传感器(编码器)测出步进电机现在的实际角度假设是90度,然后跟开环的驱动器一样根据细分电流表调整步进电机的两相电流,但是要将电流矢量指向91.8度(指令角度比实际角度大那就在实际角度上加1.8度,反之减1.8度),与开环控制器不同的是闭环的驱动电流大小不是恒定不变的,而是根据角度误差经过PID算法计算出来的,简单的讲就是指令角度和实际角度的误差大那驱动电流就大相反误差小驱动电流就小,误差为0那驱动电流就为0(这就是闭环步进低发热省电的原因)。闭环驱动和开环驱动的最大区别大体上就是这样,当然想要了解具体的细节的还得看源程序,这里限于篇幅就不再多说。
接下来讲一下我自己做的这个闭环步进和原版的区别,先讲硬件上的。主控芯片用价格4.5块的STM32F030C8T6代替了价格25块钱的ATSAMD21G18A,省钱的同时性能有增无减。驱动芯片用两颗最大驱动电流为3.5A的A4950代替了原来的最大驱动电流为2A的单颗A4954芯片,原版的这颗A4954驱动芯片标的最大驱动电流可以达到2A,实际测试最大也就1.2A左右只能勉强用来驱动3D打印机用的42小步进。因为这颗芯片内部驱动MOS管内阻过大有0.8欧姆以上,导致发热非常严重,电流一大芯片温度就飙升,然后芯片就停机过热保护了,有一次上机测试过程中Z轴就因此停机导致直接撞坏了一把4mm的铣刀。编码器方面用英飞凌的TLE5012B代替了原版的AS5047D,原版的这款编码器芯片货源很不稳定经常会买不到,代替用的TLE5012B是15位更高一级精度的,而且是汽车工业标准的,可靠性和工作容许温度比消费级标准的来的更高。然后加入高速隔离光耦TLP2168,没光耦作隔离的话万一步进驱动器出问题连带烧了雕刻器的驱动板那就得不偿失了。还有一些稳压芯片也作了调整,基本上硬件方面的芯片算是全换了遍。
软件方面也是完全重新编写,编程软件用官方专业软件KEIL-MDK替代了玩具级编译软件ARDUINO。程序里加入了开环模式,虽然闭环优点多多但开环也非一无所长,这样即使编码器坏了还可以切到开环模式继续使用。然后加入了拨码盘的细分选择项,可以利用拨码选择不同细分选向。不管是原版的还是我这修改版的驱动器在初次安装或者二次安装后都要就行编码器芯片的角度校正,因为这种磁编码器芯片都有近2度的非线性误差所以不能直接使用需要二次校正才行,校正的另外一个作用是让编码器的0度位置和步进电机的电位角0度位置对齐。校正的原理是让步进电机在开环的情况下以整步跑1到2圈,因为现在市面上的步进电机都能做到整步5%以下(0.09度)的精度,据此就可以校正编码器芯片。原版的校正过程非常麻烦,需要连着电脑通过串口发指令然后还要二次编程烧录程序等等,我这边程序优化直接拨码盘拨好位置后上电,其它工作全部由程序自动完成。为了加强产品的可靠性,程序中加入看门狗,工控产品没看门狗怎么能行呢。
上叙的都是一些程序中的小升级部分,相应的增加了一部分功能和提高了使用便捷性。除此之外程序中最大的升级优化则在于精度、速度的提高和噪声、振动的减小。国外版的编码器校正程序有一个大的BUG,校正完后编码器的0度位置和步进电机的电位角0度之间有0.3度以上的误差。这个误差值对闭环步进的实际使用性能影响非常大,理论上越接近0度越好,误差值大了导致步进电机左转和右转性能不一,往往一边转动时很平顺但向另一边转动时振动就很大,两边转动时的最高转速和扭矩也不一样,极限情况下甚至会导致步进电机向一个方向乱转无法正常工作。我这边重新改写了编码器校正程序,新的校正程序可以将误差角度值降低到0.1度以下。顺便再说一下现在市面上现在的闭环步进用的是光电编码器(1000线为主),这一对齐编码器的0度位置和步进电机的电位角0度位置的活是在出厂前用专业设备(编码器相位检测器)配合专门的电机驱动来完成的,所以千万不要乱拆闭环步进的编码盘。程序中另外一个大的升级之处是采用了可变PID控制角代替了原版固定的1.8度PID控制角。固定的1.8度PID控制角会产生两个非常严重的问题,第一是步进电机低速运行时振动非常大甚至比开环驱动器驱动时振动更大,另外一个问题是高速时转速上不去,原版的程序驱动普通48mm长度的42步进电机实测最高转速400RPM都达不到,再高的话就会因为电机实际转速跟不上指令转速而导致失步。采用升级后的可变PID控制角算法则可以将转速提高到近800RPM而不失速,与此同时在低速时振动和噪声可以做得很小几乎可以跟伺服电机的振动和噪声程度相媲美。
最后再总结一下闭环步进和开环步进的优缺点吧:闭环步进的优点是扭矩大、振动小、精度高不易失步缺点是可靠性稳定性低价格贵;开环步进的优点是可靠性稳定性高价格便宜。这里再着重讲一下转速这个问题,很多淘宝商家都宣称他们的闭环步进转速比一般开环步进高很多可以工作在1500RPM,其实两相闭环步进相较与开环步进在工作转速上基本是只低不高,现在市面上卖的加长两相57闭环步进最高工作转速也就600RPM左右,再高就会失步。想要更高工作转速的就必须花更多的钱买3相的闭环步进或者5相闭环步进。
国内外开源项目
Mechaduino
链接:https://github.com/jcchurch13/Mechaduino-Firmware
这个国外的一个基于Arduino的驱动,使用AVR芯片,项目已经进3年没有更新了,有些期间国内很耐买到,成本较高,性能、稳定性方面达不到工业级别。
HyperStepper
链接:http://www.zuojiaju.com/thread-894162-1-1.html
这是国内HyperCNC杨工基于Mechaduino改的,虽说是参考了上一个项目,但无论是从硬件底层,还是到软件上,都几乎是重新写了一遍,使用STm32,加入光耦,换用A4950驱动等等,使得该项目真正的可以被工业上所使用的,性能与稳定都达到了不错的水准,杨工在淘宝上也有卖,可以买回来学习。
本项目基于杨工的开源版本,重绘PCB,硬件完全兼容。在杨工的基础上优化了软件结构,暂时还未成熟。