项目资料收集
simplef foc软件库 | Arduino-FOC | https://github.com/simplefoc/Arduino-FOC |
---|---|---|
PCB工程 | Arduino-SimpleFOCShield | https://github.com/simplefoc/Arduino-SimpleFOCShield |
硬件数据手册
INA240 | 电流检测放大器 |
---|---|
L78M08 | 稳压器 |
L6234PD013TR | 三相电机驱动器 |
驱动板到手测试
直流电源24V
硬件配置如下:
- simple foc驱动板
- 电机一个
开环位置控制
运行第一个示例open_loop_position_example
修改参数如下
BLDCMotor motor = BLDCMotor(7);
driver.voltage_power_supply = 24;
motor.voltage_limit = 1;
选择串口
输入T6.28,或者其他位置参数,观察到电机运行在不同的位置
开环速度控制
运行第二个示例open_loop_velocity_example
修改参数如上个示例
串口输入信息T5,或者其他速度参数,观察电机以一定速度运行
模拟量测量速度和位置
AS5600传感器Analog接口测试
红色5V/黑色GND/黄色A1
文件 -> 示例-> Simple FOC -> utils -> sensor_test -> magnetic_sensors -> magnetic_sensor_analog_example
串口打印速度和位置信息,用手转动电机可以观察到信息变化
I2C传输速度和位置信息
I2C接线如下图
红色5V/黑色GND/黄色SDA/红色SCL
运行示例 工程文件->示例-> Simple FOC -> utils -> sensor_test -> magnetic_sensors -> magnetic_sensor_i2c_example,测试效果类似上一个例程
闭环位置控制
运行闭环位置测试文件 -> 示例 -> Simple FOC -> motion_control -> position_motion_control -> magnetic_sensor -> angle_control
根据选择的模拟量接口或者I2C接口,取消注释
修改参数
1 | BLDCMotor motor = BLDCMotor(7); |
上传代码,串口输出调试信息
输入T6.28,观察电机转一圈 2pi
松手后电机会回到原位置,这就是闭环电机
注意有以下问题:
- 电机异常抖动
闭环速度控制
闭环速度测试
文件 -> 示例 -> Simple FOC -> motion_control -> velocity_motion_control -> magnetic_sensor -> velocity_control
修改参数同上个例程
输入T2,固定速度转动
电流传感器测试
电流传感器测试
angle_control_current_sense_test.ino
上传代码后可以通过串口观察4个参数返回,分别为
- A相电流
- B相电流
- 未知
- 幅值
硬件部分学习
稳压器L78M08
- 输入电压10.5V-23V
- 输出电压8V
电流放大器
三相电机驱动
软件部分学习
c++虚函数
BLDCDriver3PWM.h文件中出现了虚函数
1 | virtual void setPhaseState(int sa, int sb, int sc) override; |
虚函数的概念:
虚函数是指一个类中你希望重载的成员函数 ,当你用一个 基类指针或引用 指向一个继承类对象的时候,调用一个虚函数时, 实际调用的是继承类的版本。
1 | class BLDCDriver{ |
1 | class BLDCDriver3PWM: public BLDCDriver{ |
由上图示例可以发现BLDCDriver3PWM继承自BLDCDriver,setPhaseState函数在两个类中都进行了定义,实际调用这个函数的时候,调用的是BLDCDriver3PWM中的。