『SimpleFOC』低成本无刷驱电一体伺服电机

lgn查看全部>>

人气7247

说明:本项目开源,资料下载连接放在文章相应位置,大家如果需要可以自取。另,本人淘宝小店有成品出售,欢迎大家购买(点击下面图片或用淘宝APP扫码可直达)。

一体驱动导购

驱电一体无刷伺服电机系列

产品说明

在21年5月中旬推出这款低成本驱电一体无刷伺服电机以来,在没有任何主动推广的情况下,受到了不少人的关注,针对反馈回来的信息,我们决定将这个产品拓展成一个系列,以满足不同场景的需求。目前,这个系列包含三款不同的主控,分别是Atmel328p-au、国产克隆芯片lgt8f328p和STM32f103c8t6,分别对应型号SFOC-Atmel328、SFOC-lgt328和SFOC-STM32F103,其中SFOC-Atmel328和SFOC-lgt328有pwm版本和485版本,SFOC-STM32F103只有pwm版本。

需要说明的是,在开发了Atmel328版本的驱动板之后,我们还花精力做了lgt328的版本,除了价格便宜之外,更重要的原因是lgt328是国产芯片。

一体驱动安装尺寸

PCB板上一共有6个安装孔,PCB直径31mm,最窄距离29mm,能够适配我自己手上的两款2804的无刷云台电机,不能适配的电机则需要通过修改3D打印支撑来转接。

整个系列的PCB外形和安装孔位相同,具体尺寸如上图所示。搭载的电机为2804无刷云台电机,这种电机常常用于摄像机云台,不过负载较小大概100g左右,主要是用于Gopro这种小型运动相机。由于力矩较小应用场景比较受限,我们正在开发扭矩更大更实用的驱动器(包含减速器),感兴趣的可以加微信:lgn_life(请注明来意,否则不予通过)。

目前,驱电一体化系列产品如下表所示(不定期更新):

丝印代号(暂定) MCU PWM 485 编码器 备注
SFOC-atmel328 atmel328p au as5600 485/pwm为二选一功能,不同时存在
SFOC-lgt328 lgt8f328 as5600 485/pwm为二选一功能,不同时存在
SFOC-stm32 Stm32F03c8t6 as5600 /

更新日志

最近更新时间:2021年08月10日

开发计划

  • [ ]

  • [ ] 驱电一体无刷伺服电机,带行星减速器,扁平式,机械狗用

  • [ ] 无刷伺服电机,带行星减速器,扁平式,机械狗用

  • [ ] 驱电一体无刷伺服电机,带行星减速器,桌面机械手臂用

  • [ ] 驱电一体无刷伺服电机,Stm32+drv8313+as5600

  • [x] 驱电一体无刷伺服电机,atmle328+drv8313+as5600

  • [x] 驱电一体无刷伺服电机,lgt328+drv8313+as5600

SFOC-Atmel328

SFOC-Atmel328方案说明

注意:图片仅为示意,各版本接线请以PCB上丝印为准,无保护电路,接错必烧。

sfoc-atmel328-485

主控芯片:Atmel328p-au

电机驱动芯片:drv8313

编码器:AS5600

电机型号:2804(如无特殊说明)

电机极对数:7(如无特殊说明)

PWM及ENABLE针脚:

信号 对应针脚
PWM A 9
PWM B 5
PWM C 6
Enable 7

SFOC-Atmel328 是以Atmel的328p-au芯片作为主控芯片,这款芯片也是Arduino UNO、Nano 和mini的主控芯片,使用非常广泛。

为了将执行器做得尽可能的紧凑,最理想的解决方案就是做一块一体化驱动板,刚好B站UP【光树秫秫】开源了一款迷你SimpleFOC驱动板,主要的元器件包含一颗Atmel328p芯片,一颗Drv8313无刷电机驱动芯片,以及一颗AS5600磁编码器。借鉴这位UP的开源方案,我设计了自己的一体化驱动板,相比于原版稍微放大了一点尺寸,主要适配2804系列的无刷云台电机,为了降低成本将4层板的方案改成了2层板。

一体驱动安装接线方式

单片机的ISP接口、串口都分别用6Pin和4Pin的SH1.0端子单独接来,方便调试,电源输入口兼容2.54的排针,或者同样使用4Pin的SH1.0端子,根据版本不同4Pin的端子包含一个5V输出和PWM信号输入或485A、B端口,图上为pwm版本的驱动器。无刷电机的UVW和驱动板的UVW可以随便连接。

SFOC开发环境配置

如果以前没有使用过SimpleFOC,需要配置一下开发环境(这里默认你的电脑已经安装了Arduino IDE,如果你需要使用lgt328,建议安装1.8.10版本,最新的版本对lgt328支持不好),如下图所示,依次点击”项目=>加载库=>管理库“打开库管理器,在库管理器中搜索Simple FOC,点击安装即可。

SFC配置说明

SFOC-Atmel328 Bootloader 烧写

我们出售的Simple FOC NANO驱动器一般烧写的是Arduino UNO的Bootloader。如果你是自己开发,或者需要刷写Arduino nano 的Bootloader也非常简单,首先是将Arduino UNO(这里以UNO为例)制作成一个刷写器,步骤为:

1)将作为烧写器的Arduino UNO板通过USB线连接到电脑,打开Arduino IDE 。

2)选择并设置好开发板型号、处理器及COM口。(注意要选择的型号为作为烧写器的Arduino 型号)。

3)在工具栏选择->文件->示例->11.Arduino ISP->ArduinoISP,打开ArduinoISP程序,编译(验证)、上传到开发板中。

image-20210808152806155

刷写Bootloader 时的线路连接如下图所示:

一体驱动isp下载

Bootloader 刷写的步骤为:

1)在在工具栏选择->工具->开发板型号,选择待烧写的Arduino型号。

2)在工具->编译器 中,选择Arduino as ISP。

3)点击 工具->烧录引导程序,等待下方提示烧录成功。

image-20210808152903645

下载程序到SFOC-Atmel328

由于PCB的空间有限,没有办法在上面加装串口芯片,程序下载就需要用到usb转串口的模块,一般主控芯片是Ch340系列模块也就几块钱。下载时驱动板的TX连接下载器的RX,驱动板的RX连接下载器TX。

一体驱动txrx下载

在Arduino IDE中选择芯片对应的开发板和端口,需要注意的是开发板可以是UNO也可以是NANO,这取决于你刷的Bootloader版本,无论是UNO还是NANO,SimpleFOC都是可以正常使用的。接下来就是需要考验手速的环节,点击下载后,在编译完成转为上传的时候,马上按下驱动板上的复位按键,如果一切正常,稍等片刻程序就下载成功了。这里新手可能需要多试几次。

Tips:使用串口下载时编程器一般是AVRISP mkII。

一体化驱动PWM程序下载说明

示例程序

完整的程序可在附件中下载。

Atmel328PB-主控芯片

注意:图片仅为示意,各版本接线请以PCB上丝印为准,无保护电路,接错必烧。

产品代号:SFOC Nano AB28

主控芯片:Atmel328PB-au

电机驱动芯片:drv8313/ms8313

编码器:AS5600

电机型号:2804/4108

电机极对数:7/11

PWM及ENABLE针脚:

信号 针脚
PWM A 9
PWM B 5
PWM C 6
Enable 7

Atmel328PB 开发板库安装

Atmel328PB相比Atmel328P来讲接口资源更丰富一点,但本项目并没有用上,在目前芯片短缺的情况下供货也充足一些,所以,328PB的方案主要是作为Atmel328P在断货或者价格起飞时可以替换。但是由于Arduino UNO的Bootloader并不适用于328PB,所以需要为328PB安装一个支持库。

1、如下图所示,通过工具-开发板-打开开发板管理器;

image-20220123234113945

2、 在开发板管理器中搜索minicore,选择最新的版本安装即可,可以看到MiniCore时支持328整个系列的芯片。

image-20220123234706308

3、在下载程序或者刷写Bootloader的时候就可以选择MiniCore下的ATmega328,并在Variant下选择328PB,同时还需要选择正确的时钟频率,其他操作就和前面Arduino UNO一样了。

image-20220123235047117

Atmel328PB Bootloader 烧写

我们出售的Simple FOC NANO驱动器一般烧写的是Arduino UNO的Bootloader。如果你是自己开发,或者需要刷写Arduino nano 的Bootloader也非常简单,首先是将Arduino UNO(这里以UNO为例)制作成一个刷写器,步骤为:

1)将作为烧写器的Arduino UNO板通过USB线连接到电脑,打开Arduino IDE 。

2)选择并设置好开发板型号、处理器及COM口。(注意要选择的型号为作为烧写器的Arduino 型号)。

3)在工具栏选择->文件->示例->11.Arduino ISP->ArduinoISP,打开ArduinoISP程序,编译(验证)、上传到开发板中。

image-20210808152806155

刷写Bootloader 时的线路连接如下图所示:

一体驱动isp下载

Bootloader 刷写的步骤为:

1)在在工具栏选择->工具->开发板型号,选择待烧写的Arduino型号。

2)在工具->编译器 中,选择Arduino as ISP。

3)点击 工具->烧录引导程序,等待下方提示烧录成功。

image-20220123235459563

下载程序到SFOC-Atmel328PB

由于PCB的空间有限,没有办法在上面加装串口芯片,程序下载就需要用到usb转串口的模块,一般主控芯片是Ch340系列模块也就几块钱。下载时驱动板的TX连接下载器的RX,驱动板的RX连接下载器TX。

一体驱动txrx下载

在Arduino IDE中选择芯片对应的开发板和端口,需要注意的是开发板可以是UNO也可以是NANO,这取决于你刷的Bootloader版本,无论是UNO还是NANO,SimpleFOC都是可以正常使用的。接下来就是需要考验手速的环节,点击下载后,在编译完成转为上传的时候,马上按下驱动板上的复位按键,如果一切正常,稍等片刻程序就下载成功了。这里新手可能需要多试几次。

Tips:使用串口下载时编程器一般是AVRISP mkII。

image-20220123233739350

开环速度示例

开环测试的目的式检查MCU和驱动芯片是否正常工作,下面的代码是在SFOC库的示例基础上修改的,已经预设了初始速度,硬件参数也是按配套的电机设置好。如果不是驱动配套的电机,请自行确定电机极对数,并作出相应修改。

// B站账号:理工男的X-lab 欢迎关注转发
// B站主页:https://space.bilibili.com/490989635
// 博客网址: www.lgn.life
// Open loop motor control example
// 电机开环控制示例

#include <SimpleFOC.h>

// BLDC motor & driver instance
// 无刷电机驱动实例
// BLDCMotor motor = BLDCMotor(pole pair number);
// 设置无刷电机的极对数
//BLDCMotor motor = BLDCMotor(11);//
BLDCMotor motor = BLDCMotor(7);
// 配置驱动板
// BLDCDriver3PWM driver = BLDCDriver3PWM(pwmA, pwmB, pwmC, Enable(optional));
BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 7);

//target variable
// 设置初始速度为10,通电后电机开始转动
float target_velocity = 15;

// instantiate the commander
Commander command = Commander(Serial);
void doTarget(char* cmd) { command.scalar(&target_velocity, cmd); }

void setup() {

  // driver config
  // 驱动器设置
  // power supply voltage [V]
  // 供电电压
  driver.voltage_power_supply = 12;
  // 驱动器初始化
  driver.init();
  // link the motor and the driver
  //链接电机和驱动器
  motor.linkDriver(&driver);

  // limiting motor movements
  // 限制电机
  motor.voltage_limit = 3;   // [V]
  motor.velocity_limit = 5; // [rad/s] cca 50rpm

  // open loop control config
  // 开环控制设置
  motor.controller = MotionControlType::velocity_openloop;

  // init motor hardware
  // 电机初始化
  motor.init();

  // add target command T
  // 增加目标命令 T
  command.add('T', doTarget, "target velocity");

  Serial.begin(115200);
  Serial.println("Motor ready!");
  Serial.println("Set target velocity [rad/s]");
  _delay(1000);
}

void loop() {

  // open loop velocity movement
  // 开环速度
  // using motor.voltage_limit and motor.velocity_limit
  motor.move(target_velocity);

  // user communication
  // 用户通信
  command.run();
}

开环位置示例

等待更新ing。。。

编码器示例

等待更新ing。。。

闭环速度示例

等待更新ing。。。

闭环位置示例

等待更新ing。。。

PWM 控制示例

等待更新ing。。。

485 控制示例

等待更新ing。。。

PID调试示例

等待更新ing。。。

资料下载:

SFOC-lgt328

SFOC-lgt328方案说明

注意:图片仅为示意,各版本接线请以PCB上丝印为准,无保护电路,接错必烧。

SFOC-lgt328

主控芯片:lgt8f328

电机驱动芯片:drv8313

编码器:AS5600

电机型号:2804(如无特殊说明)

电机极对数:7(如无特殊说明)

PWM及ENABLE针脚:

信号 针脚
PWM A 9
PWM B 5
PWM C 6
Enable 7

SFOC开发环境配置

lgt328是Atmel328的克隆芯片,需要配置一下才能使用Arduino IDE进行下载程序。配置比较简单,只需要两步,第一步:在首选项中找到项目文件夹位置,这里因为我是使用的便携版IDE,所有是自定义的位置,如果你是直接安装的建议使用默认位置,以防修改后其他库报错。

TIPs:这里我勾选了上传时显示详细输出,可以看到在上传过程中的进程和报错。

image-20210810021145796

第二步,将Larduino_HSP解压后,将里面的hardware、libraries、和sketches复制到上面的项目文件,重启Arduino IDE,这就完成了LGT开发环境的配置。相关文件本节末尾可以下载。

image-20210810021324188

配置成功后,重启打开Ardino IDE会增加LGT单片机的选项,如下图所示:

image-20210810021719478

lgt328/lgt8f328 Bootloader 烧录

制作一个LGTISP(Xloader和LGTISP.hex本节末尾可以下载):

  • Arduino 开发板一块,UNO 或者 Nano 都可以,这里我以UNO 为例

  • 打开Xloader将LGTISP.hex 文件下载到UNO中

    image-20210810032739712

Bootloader烧录具体步骤为:

  • 将lgt328的swd、swc、VCC、GND分别连接到UNO的D12、D13、5V、GND

image-20210810040648846

  • 开发板选择LGT8F328P-LQFP32 MiniEVB,端口更加实际情况选择,编程器选择AVR ISP
  • 点击烧录引导程序,稍等片刻,如果一切正常,则会提示引导程序烧录成功

image-20210810033329519

下载程序到SFOC-lgt328

使用串口下载

注意:有时候下载会报错,会导致下载失败,建议使用SWD的方式下载。

具体下载方式同Atmel328类似,确保下图红框里面的选项正确配置,点击编译上传即可。

image-20210812180331657

使用SWC/SWD下载

使用SWC/SWD下载不仅可以烧录bootloader也可以下载程序,只需两步即可完成:第一步:选择正确的开发板和端口,编程器选择为AVR ISP。

image-20210810020326522

第二步,在项目菜单下选择使用编程器上传,稍等片刻,程序就烧录进去了(与串口不同的是不需要在编译完成后按复位键)。

image-20210810034917388

SFOC-lgt328示例程序

SFOC-lgt328与SFOC-Atmel328完全兼容,示例程序请参见前面SFOC-Atmel328示例程序部分。

SFOC-lgt328资料下载

SFOC-STM32-F103

SFOC-STM32-F103方案说明

主控芯片:STM32F103c8t6

电机驱动芯片:drv8313

编码器:AS5600

电机型号:2804(如无特殊说明)

电机极对数:7(如无特殊说明)

PWM及ENABLE针脚:

信号 可针脚
PWM A PA6
PWM B PA7
PWM C PB0
Enable PA11

STM32Duino开发环境配置

只需两步就可完成配置:

第一步,文件菜单下的首选项中,添加附加开发板管理器网址,如果有多个,可以点开箭头所指的图标进入编辑器,可以回车换行,一行放一个网址,将下面的网址复制粘贴到编辑器里。

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

image-20210810041816287

第二步,在开发板管理器中搜索stm32,安装支持库。

image-20210810042019241

第三步,安装STM32CubeProgrammer,你可以去官网下载,或者你可以使用本小节末尾的网盘链接下载,目前的版本是2.8.0。安装过程非常简单,这里就不作演示,最好默认安装,以免出现不可预知的错误。只有这个软件正常安装后,才能在Arduino IDE中使用STM32CubeProgrammer的方法下载程序。

STM32F103c8t6 Bootloader 烧录

第一步,STM32F103c8t6有三种Boot模式,在下载程序或烧录Bootloader时,需要将BooT0设置为1,驱动板BooT1默认是0。这里我们只需要关注BOOT0就可以了。

image-20210810041103313

第二步,Bootloader的烧录需要用到前面安装的STM32CubeProgrammer,打开软件后选择UART、设置好端口,并连接驱动板。

image-20210812183839054

第三步,连接成功后,软件会读取单片机中的信息,如下图所示,同时点击下载图标。

image-20210812184015940

第四步,在弹出的新界面中,旋转准备好的Bootloader文件,并下载(Bootloader文件小节末尾可以下载)。

image-20210812184239684

稍等片刻,会弹出下载成功的提示。

下载程序到SFOC-STM32

第一步,将BooT0设置为1,在我们开发的这款驱动板上有个拨动开关,可以方便的进行设置。

第二步,按照下图的方式连接下载器和驱动板。

一体驱动txrx下载

第三步,Arduino IDE下载设置如下图,这里端口是你驱动板所在的端口,点击编译下载,稍等片刻即可完成程序下载。

image-20210812180139727

第四步,程序下载完成后,需要将BooT0重新设置为0,这样程序才能正常运行。

SFOC-STM32-F103示例程序

稍后更新。。。

SFOC-STM32-F103资料下载

稍后更新。。。

赞赏

微信赞赏支付宝赞赏

相关推荐
  • 『SimpleFOC 』开发学习套装+基础教程
  • 『DIY6轴机械臂』- OpenArm-免费开源-持续更新ing
  • 『Arduino 』 1500毫安-Arduino UNO UPS电源
  • 『SimpleFOC 』AS5600 12bit磁编码器
  • 『Arduino』UNO 万能扩展板
  • 『SimpleFOC 』官方驱动扩展改进版 V1 / V2

全部评论: 0

发表我的观点

取消

微信公众号

还没账号?马上注册>>

登录

忘记密码

如果您尚未注册,请选择以下方式登录

Q Q 登 录 微 博 登 录
已有账号?快去登录>>

注册

发送验证码

提交