37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十二:Arduino FOC无刷电机驱动板 兼容Simple FOC Shield V2.0.4(艾尔赛)
一、概述
艾尔赛Arduino FOC无刷电机驱动板采用3个分立的高低边栅极驱动器和6个NMOS管组成1路BLDC驱动电路,兼容国外开源项目Simple FOC Shield V2.0.4,可直接插入到Arduino NNO开发板作为一个Shiled来使用,并支持多种传感器接口,用户可以使用Arduino环境下的Simple FOC库来控制BLDC无刷电机平稳高精度运行。
二、功能特点
1,采用3路IR2104栅极驱动器和6个NMOS组成BLDC驱动部分,控制逻辑兼容官方原版Simple FOC的L6234PD方案;
2,接口兼容Arduino UNO、Arduino MEGA、STM32 Nucleo等;
3,板载2个INA240高精度电流传感器用于测量A B相电流;
4,用户可以通过0R电阻跳线的方式来配置GPIO控制管脚;
5,支持霍尔、磁传感器等多种编码器;
6,供电电压DC12-35V;
7,板载电源指示灯。
三、 硬件介绍和说明
1,板子尺寸:67.8*53mm
重量:26g
2,接口介绍
1,VCC,GND:DC12-35V供电;
2,A, B, C:无刷电机接口;
3,GPIO引出口,可直接插入到Arduino UNO等开发板;
4,IR2104供电跳线帽:因为IR2104最大只支持20V供电,故当VCC小于等于20V时此跳线帽插在左端,此时IR2104的电源电压等于VCC;当VCC大20V时此跳线帽插在右端,此时IR2104的电源电压等于16V。
板子背面为GPIO控制/供电 选择跳线电阻,具体的跳线方法可参考电路原理图(一般保持默认即可)
电原理图
插入Arduino uno开发板
四、Arduino开发环境搭建
1、安装Arduino IDE 1.8.9或者最新的版本;
2、点击菜单栏的 工具–管理库–开发板管理器,再搜索“Simple FOC”安装2.1.0或者更新版本(备注:安装最新版本可能导致后续的电流检测程序编译通不过);
更多资料:
Arduino简单磁场定向控制(FOC)项目
https://docs.simplefoc.com/
五、基本功能测试
1、硬件准备:Arduino UNO开发板、Arduino FOC驱动板、MKS YT2804无刷电机(DC12V@7极对@带AS5600磁编码器)、DC12V直流电源、USB方口线。
2、接线方法
● 无刷电机:接到驱动板的A B C三个口上
● AS5600编码器:5V和GND接驱动板的5V和GND,SCL和SDA分别接驱动板的SCL和SDA
● Arduino开发板USB口:通过方口USB线连接至电脑USB口
● 驱动板VCC GND供电口:接DC12V电源
六、开环速度测试
● 打开Arduino IDE,依次点击:文件–示例-- Simple FOC–motion_control --open_loop_motor_control --open_loop_velocity_example
● 根据所用电机修改参数:
BLDCMotor motor = BLDCMotor(11) 修改为 BLDCMotor motor = BLDCMotor(7)
motor.voltage_limit = 3 修改为 motor.voltage_limit = 1
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十二:Arduino FOC无刷电机驱动板 兼容Simple FOC Shield V2.0.4(艾尔赛)
项目程序之一:开环速度测试
开源参考程序
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十二:Arduino FOC无刷电机驱动板 兼容Simple FOC Shield V2.0.4(艾尔赛)
项目程序之一:开环速度测试
*/
// 开环电机控制示例
#include <SimpleFOC.h>
// BLDC 电机及驱动器实例
// BLDCMotor motor = BLDCMotor(pole pair number);
BLDCMotor motor = BLDCMotor(7);
// BLDCDriver3PWM driver = BLDCDriver3PWM(pwmA, pwmB, pwmC, Enable(optional));
BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 8);
// 步进电机及驱动器实例
//StepperMotor motor = StepperMotor(50);
//StepperDriver4PWM driver = StepperDriver4PWM(9, 5, 10, 6, 8);
//目标变量
float target_velocity = 0;
// 创建实例化对象
Commander command = Commander(Serial);
void doTarget(char* cmd) {
command.scalar(&target_velocity, cmd); }
void setup() {
// 驱动配置
// 电源电压[V]
driver.voltage_power_supply = 12;
driver.init();
// 连接电机和驱动器
motor.linkDriver(&driver);
// 限制运动
motor.voltage_limit = 1; // [V]
motor.velocity_limit = 5; // [弧度/秒] 约 50rpm
// 开环控制配置
motor.controller = MotionControlType