SimpleFOC之ESP32(二)—— 开环控制

目录

  • 注意事项
  • 一、硬件介绍
    • 1.1、原理图
    • 1.2、ESP32drive方案
      • 1.2.1、准备清单
      • 1.2.2、硬件连接
    • 1.3、SimpleFOCShield方案
      • 1.3.1、准备清单
      • 1.3.2、硬件连接
  • 二、修改底层代码
  • 三、程序演示
    • 3.1、开环速度模式
    • 3.2、开环位置模式



SimpleFOC教程目录:请点击

注意事项

  • 1、电机的三根线可以任意接在驱动器的ABC三相上,不用区分;
  • 2、开环控制最好选择Ω级的电机,尽量不要用mΩ级的航模电机,容易烧MOS和电机。开环控制在实际中也就启动时用用,这不是电机控制的一个常态。
  • 3、电机控制要尽快操作,不要停留时间太久,时刻注意电机和驱动器的发热情况,一旦过热立即断电。

一、硬件介绍

1.1、原理图

SimpleFOC之ESP32(二)—— 开环控制_第1张图片

1.2、ESP32drive方案

1.2.1、准备清单

序号 名称 数量
1 USB转串口 1
2 ESP32drive 1
3 云台电机 1
4 12V电源 1

1.2.2、硬件连接


电机 购买链接:某宝购买
ESP32drive 购买链接:某宝购买

1.3、SimpleFOCShield方案

1.3.1、准备清单

序号 名称 数量
1 ESP32-DevKitC 1
2 simpleFOCShield V2.0.3 1
3 云台电机 1
4 USB线 1
5 12V电源 1
6 杜邦线 若干


SimpleFOCShield 购买链接:某宝购买
电机 购买链接:某宝购买

1.3.2、硬件连接

记得ESP32系统板和驱动板共地

二、修改底层代码

    正常操作代码编译时会报错,错误提示如下:
SimpleFOC之ESP32(二)—— 开环控制_第2张图片
    对比查看SimpleFOC的底层代码和ESP的驱动文件,错误是因为SimpleFOC中使用的结构体名字和ESP驱动文件中定义的不一样,应该是版本不同,
    当前问题我的理解是:在SimpleFOC项目中,创作者只是写了应用层的代码(SimpleFOC库),底层的驱动(ESP32库文件)由乐鑫公司提供,最后再由Arduino这个平台编译,创作者的应用层代码和ESP的底层驱动各自在不停的更新,只要一方有变量名称的改动就会导致出错,也可能以后一方根据另一方修改了变量名称就不再报错了。
    本次调试,修改SimpleFOC中的变量名称与ESP的驱动保持一致,修改方法如下图:

截图中所用软件为sublime,推荐使用;
需修改的代码路径截图中已经显示:
我的电脑\文档\Arduino\libraries\Simple_FOC\src\drivers\hardware_specific\esp32_mcu.cpp
SimpleFOC之ESP32(二)—— 开环控制_第3张图片
SimpleFOC之ESP32(二)—— 开环控制_第4张图片
SimpleFOC之ESP32(二)—— 开环控制_第5张图片

//修改1
 mcpwm_num->clk_cfg.clk_prescale = 0;  //mcpwm_num->clk_cfg.prescale = 0;

//修改2
// set prescaler
  mcpwm_num->timer[0].timer_cfg0.timer_prescale = prescaler;
  mcpwm_num->timer[1].timer_cfg0.timer_prescale = prescaler;
  mcpwm_num->timer[2].timer_cfg0.timer_prescale = prescaler;
  _delay(1);
  //set period
  mcpwm_num->timer[0].timer_cfg0.timer_period = resolution_corrected;
  mcpwm_num->timer[1].timer_cfg0.timer_period = resolution_corrected;
  mcpwm_num->timer[2].timer_cfg0.timer_period = resolution_corrected;
  _delay(1);
  mcpwm_num->timer[0].timer_cfg0.timer_period_upmethod = 0;
  mcpwm_num->timer[1].timer_cfg0.timer_period_upmethod = 0;
  mcpwm_num->timer[2].timer_cfg0.timer_period_upmethod = 0;
  _delay(1);

//修改3
  _delay(1);
  mcpwm_num->timer[0].timer_sync.timer_synco_sel = 1;//mcpwm_num->timer[0].sync.out_sel = 1;
  _delay(1);
  mcpwm_num->timer[0].timer_sync.timer_synco_sel = 0;//mcpwm_num->timer[0].sync.out_sel = 0;

    除了以上错误,还有几个warning信息,大概意思是SimpleFOC用的是函数非最新,ESP库推荐用最新款的函数形式,可以不用管,不影响程序运行。

三、程序演示

3.1、开环速度模式

3.1.1、打开示例
SimpleFOC之ESP32(二)—— 开环控制_第6张图片

3.1.2、修改程序
示例为只读文件,修改需先另存为,
SimpleFOC之ESP32(二)—— 开环控制_第7张图片

3.1.3、验证上传
SimpleFOC之ESP32(二)—— 开环控制_第8张图片
上传完毕后,按复位键重启。

3.1.4、串口发送指令
SimpleFOC之ESP32(二)—— 开环控制_第9张图片
输入T20,T为指令,20表示20rad/s,
SimpleFOC之ESP32(二)—— 开环控制_第10张图片
3.1.5、观察电机运行

3.2、开环位置模式

3.2.1、打开示例
SimpleFOC之ESP32(二)—— 开环控制_第11张图片
代码修改与操作和开环速度模式类似,不再赘述。


(完)


欢迎加入simpleFOC技术交流群:923734429 群已满根据提示添加新群 (入群申请写:CSDN)


请继续阅读相关文章:
SimpleFOC之ESP32(一)—— 搭建开发环境
SimpleFOC之ESP32(二)—— 开环控制
SimpleFOC之ESP32(三)—— 闭环控制
SimpleFOC之ESP32(四)—— 电流闭环控制Inline
SimpleFOC之ESP32(五)—— 电流闭环控制Lowside
SimpleFOC之ESP32(六)—— 双电机控制
SimpleFOC之ESP32(七)—— 霍尔电机
SimpleFOC之ESP32(八)—— ABZ编码器电机
SimpleFOC之ESP32(九)—— WIFI、UDP和TCP
SimpleFOC之ESP32(十)—— ESP-NOW和力矩反馈

你可能感兴趣的:(simpleFOC,SimpleFOC,ESP32,电机驱动)