新人一枚,写的比较水,欢迎大佬指正!

   先说一下我用的物料与开发环境吧:

  无刷电机:makerbase的2804电机(带AS5600磁编码器)

  电机驱动板:simpleFOCmini(学校推荐的

  电池:12V锂电池

  主控:ESP32开发板

  TFT-LCD屏:ST7789驱动,SPI通信的就行(我的是240 X 240大小)

  开发环境:VS Code+platformIO插件,Arduino框架

  关于无刷电机,网上资料都非常多,我也就不多嗦了(其实我自己也不是很懂),大家上网翻找资料即可,我就简略说下编码器啥的。

  我买的无刷电机是带编码器的,意味着不需要自己做一个编码器。我放张我比赛用的电机照片(不带编码器),可以发现单电机是只有三相pwm输入口的,这就意味着你只能对其进行开环控制,无法实时监测电机转速与位置,因此就需要引入编码器来实现对电机的闭环控制。编码器分增量式与绝对式两种,可以参考这篇博客的解释。我这里用的是比较简单的增量式,就简要说说增量式是怎么个工作原理吧。

  首先呢,我们可以想象出电机旋转的场面,就是不停在转对吧,而们如果需要用肉眼观测电机转动的情况,就要在电机上做一个显眼的标记,比如贴个白色胶带啥的,编码器也是这样。我们在电机某个地方坐做上标记,这个标记经过编码器的"某些地方"就会输出电平信号,用来告诉我们电机转到这了。而怎么定义编码器的"某些地方"呢?我们可以想象一个圆盘,上面被一些黑色长条等分(就像一个时钟),电机的上的"标记"每经过编码器的黑色长条,编码器就会输出电平信号,因此我们就能知道电机此刻是在哪了。而如果我们要知道电机的转速的话,就等价于去求电机在某一时间段经过多少个黑色长条,因此我们只需要在程序里开个定时器记录时间就行了(有些库,比如simpleFOC是直接封装好了,直接调用api函数就能求速度)。下面放下我用的AS5600磁编码器的图片。该编码器有两种输出信号的模式,一种是iic,一种是pwm,我用的是iic,至于pwm我也不是很清楚()。因此,如果我们要知道电机的转动情况的话,需要与这个编码器建立iic通信,才能在程序中查看电机的实时参数。

  废话不多说,直接上代码:

 //变量定义
  float target = 0;
  MagneticSensorI2C sensor = MagneticSensorI2C(AS5600_I2C); //编码器为AS5600,用iic通信
  BLDCMotor motor = BLDCMotor(7);//电机极对数为7
  BLDCDriver3PWM driver = BLDCDriver3PWM(33,25,26,27);//控制电机转动的三相pwm输出口分别为33,25,26,其中27是Enable口

//初始化:
target = 20 //电机目标转速为20
Wire.setPins(21,22); //将GPIO21、GPIO22分别设置为SDA、SCL口
Wire.begin();
sensor.init(&Wire);
motor.linkSensor(&sensor);
driver.voltage_power_supply = 12; //12V供电
driver.init();
motor.linkDriver(&driver);
motor.foc_modulation = FOCModulationType::SpaceVectorPWM; //FOC调制类型为SVPWM
motor.controller = MotionControlType::velocity;;break;//控制类型为速度控制
//PID参数
motor.PID_velocity.P = 0.2;
motor.PID_velocity.I = 1.5;
motor.PID_velocity.D = 0.005;
motor.P_angle.P = 5.5;
motor.P_angle.I = 0.0275;
motor.P_angle.D = 0.0005; motor.voltage_limit = 6;
motor.LPF_velocity.Tf = 0.06; //对速度低通滤波
motor.velocity_limit = 40; //速度上限
motor.voltage_sensor_align = 1;
motor.init();
motor.initFOC(); //while(1)中的内容:
motor.loopFOC();
motor.move(target);

其中一些个性化设置还是需要根据自己实际情况设置。

  对于如何学习simpleFOC库的使用,读者可以参考simpleFOC的官网:SimpleFOCproject | Home,这里有详细的教程。

  至此,我们就完成了基本的无刷电机控制,后面会说说LCD液晶屏的与lvgl库的使用(显示实时数据)

NJUPT自控第一次积分赛的小总结(二)基于simpleFOC的无刷电机控制的更多相关文章

  1. 【系列】关于NJUPT电赛自控方向第一次积分赛的总结

    本人是NJUPT电子科学与技术专业大一摸鱼狗一枚.本博客旨在总结与分享个人准备电赛所学知识,同时也是为了防止遗忘,锻炼写文章的能力.目前电赛方向为自控方向.主要研究方向为单片机.图像处理.自动控制相关 ...

  2. ACM集训第一次积分赛赛前复习+day4

    不知不觉4天过去了,我们迎来了我们第一次积分赛,赛前的四天我们学了以下知识点吧: day 1.排序 之前一直想用qsort,但是总是写不明白,STL的sort()可以说是很方便了. 先写一个最基础的数 ...

  3. 微信小程序二维码推广统计

    微信小程序可以通过生成带参数的二维码,那么这个参数是可以通过APP的页面进行监控的 这样就可以统计每个二维码的推广效果. 今天由好推二维码推出的小程序统计工具HotApp小程序统计也推出了带参数二维码 ...

  4. SQL开发中容易忽视的一些小地方(二)

    原文:SQL开发中容易忽视的一些小地方(二) 目的:继上一篇:SQL开发中容易忽视的一些小地方(一) 总结SQL中的null用法后,本文我将说说表联接查询. 为了说明问题,我创建了两个表,分别是学生信 ...

  5. 微信小程序参数二维码6问6答

    微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...

  6. Vue小项目二手书商城:(四)详情页和购物车(emit、prop、computed)

    实现效果: 点击对应商品,对应的商品详情页出现,详情页里面还有“Add to cart”按钮和“×”退出按钮. 点击“Add to cart”可以将商品加入购物车,每件商品只能添加一次,如果把购物车的 ...

  7. Vue小项目二手书商城:(三)前端渲染数据

    实现内容: axios取到的数据在前端使用(父子组件各自应该怎么使用) 一.简单使用(在哪取在哪用) 1.在App.vue中script中加上data(data专属于当前组件,父子组件传参通过prop ...

  8. Vue小项目二手书商城:(二)axios前后端数据交互

    实现内容: 写路由接口(express) axios取数据 一.写接口 1.我们要在前端取到后端的数据(之前写的data.json)可以用vue-resourse或者用axios,在vue2之后官方就 ...

  9. Vue小项目二手书商城:(一)准备工作、组件和路由

    本项目基于vue2.5.2,与低版本部分不同之处会在(五)参考资料中提出 完整程序:https://github.com/M-M-Monica/bukesi 实现内容: 资源准备(mock数据) 组件 ...

  10. node 无脑生成小程序二维码图

    RT 新建createwxaqrcode.js: const request = require('request') const fs = require('fs') // eg:生成购物车列表圆形 ...

随机推荐

  1. ZR 七连 Day 1 游记

    ZR 七连 Day 1 游记 游记篇 赛前搞笑事件 今天是第一场正睿,还是要 好好对待 的 $ 17:59:58 $ 还在吃饭 $ 17:59:59 $ 做出重要决定,先打着比赛,有空就吃一口包子 $ ...

  2. NC15832 Most Powerful

    题目链接 题目 题目描述 Recently, researchers on Mars have discovered N powerful atoms. All of them are differe ...

  3. java 从零开始手写 redis(七)LRU 缓存淘汰策略详解

    前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...

  4. 解决邮件客户端QQ Mail及Thunderbird无法登入Outlook的问题

    最近无论是安卓手机的邮件客户端, 或者是 Ubuntu 下的 Thunderbird 都无法登入 Outlook 账号, 原因是需要开启双因素验证. 这个在 Outlook 界面上是不能直接设置的, ...

  5. 快速傅里叶变换(FFT)和小波分析在信号处理上的应用

    1前言 1.1傅里叶变换 函数f(t)为一元连续函数,其傅里叶变换定义为: F(w)的傅里叶逆变换定义为: 其中,i为虚数单位.由欧拉公式: 任意绝对可积的连续函数f(t),都可以用三角函数表示,由于 ...

  6. Laravel入坑指南(1)——Hello World

    接触PHP已经挺长一段时间了,一直对这个世界上最好的语言情有独钟.用熟练了之后,发现PHP不仅是天下第一,而且是宇宙第一.但是自从Laravel诞生之后,博主一直对Laravel有莫名的抵触,觉得这个 ...

  7. jupyter环境变量配置与启动

    一.jupyter基础知识 1.基本概念 jupyter是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果. 编程时具有语法高亮,缩进,tab补全的功能. ...

  8. 【树莓派】拷贝系统到新SD卡(系统备份/部署到另一台树莓派上)适用ubuntu 20.04.3

    本教程适用ubuntu 20.04.3 其他版本也大同小异.这种方法能更快的将系统部署下去,如果重新安装一遍加上各种配置相信你会比较疯狂即使做了自动化脚本! 一.树莓派sd卡拷贝 把旧SD卡插入树莓派 ...

  9. windows 上 ffmpeg 库的安装

    真复杂啊 安装 ffmpeg 库有两种途径,一种是自己下载源码再去编译,另一种是使用 vcpkg 自动安装 一般情况下,第二种是最简单方便的,但是如果你需要使用 ffmpeg 的特定历史版本,那就有点 ...

  10. Golang从入门到跑路-从基础到微服务学习路线图

    收录的awesome-go项目,学习基础系列,go项目实战,go源码分析,go开发者成长路线图等等,把他们收集起来学习. 地址:https://github.com/jiujuan/go-collec ...