说明:本项目开源,资料下载连接放在文章相应位置,大家如果需要可以自取。另,本人淘宝小店有成品出售,欢迎大家购买(点击下面图片或用淘宝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上丝印为准,无保护电路,接错必烧。
主控芯片: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,点击安装即可。
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程序,编译(验证)、上传到开发板中。
刷写Bootloader 时的线路连接如下图所示:
Bootloader 刷写的步骤为:
1)在在工具栏选择->工具->开发板型号,选择待烧写的Arduino型号。
2)在工具->编译器 中,选择Arduino as ISP。
3)点击 工具->烧录引导程序,等待下方提示烧录成功。
下载程序到SFOC-Atmel328
由于PCB的空间有限,没有办法在上面加装串口芯片,程序下载就需要用到usb转串口的模块,一般主控芯片是Ch340系列模块也就几块钱。下载时驱动板的TX连接下载器的RX,驱动板的RX连接下载器TX。
在Arduino IDE中选择芯片对应的开发板和端口,需要注意的是开发板可以是UNO也可以是NANO,这取决于你刷的Bootloader版本,无论是UNO还是NANO,SimpleFOC都是可以正常使用的。接下来就是需要考验手速的环节,点击下载后,在编译完成转为上传的时候,马上按下驱动板上的复位按键,如果一切正常,稍等片刻程序就下载成功了。这里新手可能需要多试几次。
Tips:使用串口下载时编程器一般是AVRISP mkII。
示例程序
完整的程序可在附件中下载。
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、如下图所示,通过工具-开发板-打开开发板管理器;
2、 在开发板管理器中搜索minicore,选择最新的版本安装即可,可以看到MiniCore时支持328整个系列的芯片。
3、在下载程序或者刷写Bootloader的时候就可以选择MiniCore下的ATmega328,并在Variant下选择328PB,同时还需要选择正确的时钟频率,其他操作就和前面Arduino UNO一样了。
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程序,编译(验证)、上传到开发板中。
刷写Bootloader 时的线路连接如下图所示:
Bootloader 刷写的步骤为:
1)在在工具栏选择->工具->开发板型号,选择待烧写的Arduino型号。
2)在工具->编译器 中,选择Arduino as ISP。
3)点击 工具->烧录引导程序,等待下方提示烧录成功。
下载程序到SFOC-Atmel328PB
由于PCB的空间有限,没有办法在上面加装串口芯片,程序下载就需要用到usb转串口的模块,一般主控芯片是Ch340系列模块也就几块钱。下载时驱动板的TX连接下载器的RX,驱动板的RX连接下载器TX。
在Arduino IDE中选择芯片对应的开发板和端口,需要注意的是开发板可以是UNO也可以是NANO,这取决于你刷的Bootloader版本,无论是UNO还是NANO,SimpleFOC都是可以正常使用的。接下来就是需要考验手速的环节,点击下载后,在编译完成转为上传的时候,马上按下驱动板上的复位按键,如果一切正常,稍等片刻程序就下载成功了。这里新手可能需要多试几次。
Tips:使用串口下载时编程器一般是AVRISP mkII。
开环速度示例
开环测试的目的式检查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上丝印为准,无保护电路,接错必烧。
主控芯片: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:这里我勾选了上传时显示详细输出,可以看到在上传过程中的进程和报错。
第二步,将Larduino_HSP解压后,将里面的hardware、libraries、和sketches复制到上面的项目文件,重启Arduino IDE,这就完成了LGT开发环境的配置。相关文件本节末尾可以下载。
配置成功后,重启打开Ardino IDE会增加LGT单片机的选项,如下图所示:
lgt328/lgt8f328 Bootloader 烧录
制作一个LGTISP(Xloader和LGTISP.hex本节末尾可以下载):
-
Arduino 开发板一块,UNO 或者 Nano 都可以,这里我以UNO 为例
-
打开Xloader将LGTISP.hex 文件下载到UNO中
Bootloader烧录具体步骤为:
- 将lgt328的swd、swc、VCC、GND分别连接到UNO的D12、D13、5V、GND
- 开发板选择LGT8F328P-LQFP32 MiniEVB,端口更加实际情况选择,编程器选择AVR ISP
- 点击烧录引导程序,稍等片刻,如果一切正常,则会提示引导程序烧录成功
下载程序到SFOC-lgt328
使用串口下载
注意:有时候下载会报错,会导致下载失败,建议使用SWD的方式下载。
具体下载方式同Atmel328类似,确保下图红框里面的选项正确配置,点击编译上传即可。
使用SWC/SWD下载
使用SWC/SWD下载不仅可以烧录bootloader也可以下载程序,只需两步即可完成:第一步:选择正确的开发板和端口,编程器选择为AVR ISP。
第二步,在项目菜单下选择使用编程器上传,稍等片刻,程序就烧录进去了(与串口不同的是不需要在编译完成后按复位键)。
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
第二步,在开发板管理器中搜索stm32,安装支持库。
第三步,安装STM32CubeProgrammer,你可以去官网下载,或者你可以使用本小节末尾的网盘链接下载,目前的版本是2.8.0。安装过程非常简单,这里就不作演示,最好默认安装,以免出现不可预知的错误。只有这个软件正常安装后,才能在Arduino IDE中使用STM32CubeProgrammer的方法下载程序。
STM32F103c8t6 Bootloader 烧录
第一步,STM32F103c8t6有三种Boot模式,在下载程序或烧录Bootloader时,需要将BooT0设置为1,驱动板BooT1默认是0。这里我们只需要关注BOOT0就可以了。
第二步,Bootloader的烧录需要用到前面安装的STM32CubeProgrammer,打开软件后选择UART、设置好端口,并连接驱动板。
第三步,连接成功后,软件会读取单片机中的信息,如下图所示,同时点击下载图标。
第四步,在弹出的新界面中,旋转准备好的Bootloader文件,并下载(Bootloader文件小节末尾可以下载)。
稍等片刻,会弹出下载成功的提示。
下载程序到SFOC-STM32
第一步,将BooT0设置为1,在我们开发的这款驱动板上有个拨动开关,可以方便的进行设置。
第二步,按照下图的方式连接下载器和驱动板。
第三步,Arduino IDE下载设置如下图,这里端口是你驱动板所在的端口,点击编译下载,稍等片刻即可完成程序下载。
第四步,程序下载完成后,需要将BooT0重新设置为0,这样程序才能正常运行。
SFOC-STM32-F103示例程序
稍后更新。。。
SFOC-STM32-F103资料下载
稍后更新。。。
赞赏微信赞赏
支付宝赞赏
全部评论: 0条