NJUPT自控第一次积分赛的小总结(二)基于simpleFOC的无刷电机控制
新人一枚,写的比较水,欢迎大佬指正!
先说一下我用的物料与开发环境吧:
无刷电机: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通信,才能在程序中查看电机的实时参数。

废话不多说,直接上代码:
//初始化:
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的无刷电机控制的更多相关文章
- 【系列】关于NJUPT电赛自控方向第一次积分赛的总结
本人是NJUPT电子科学与技术专业大一摸鱼狗一枚.本博客旨在总结与分享个人准备电赛所学知识,同时也是为了防止遗忘,锻炼写文章的能力.目前电赛方向为自控方向.主要研究方向为单片机.图像处理.自动控制相关 ...
- ACM集训第一次积分赛赛前复习+day4
不知不觉4天过去了,我们迎来了我们第一次积分赛,赛前的四天我们学了以下知识点吧: day 1.排序 之前一直想用qsort,但是总是写不明白,STL的sort()可以说是很方便了. 先写一个最基础的数 ...
- 微信小程序二维码推广统计
微信小程序可以通过生成带参数的二维码,那么这个参数是可以通过APP的页面进行监控的 这样就可以统计每个二维码的推广效果. 今天由好推二维码推出的小程序统计工具HotApp小程序统计也推出了带参数二维码 ...
- SQL开发中容易忽视的一些小地方(二)
原文:SQL开发中容易忽视的一些小地方(二) 目的:继上一篇:SQL开发中容易忽视的一些小地方(一) 总结SQL中的null用法后,本文我将说说表联接查询. 为了说明问题,我创建了两个表,分别是学生信 ...
- 微信小程序参数二维码6问6答
微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...
- Vue小项目二手书商城:(四)详情页和购物车(emit、prop、computed)
实现效果: 点击对应商品,对应的商品详情页出现,详情页里面还有“Add to cart”按钮和“×”退出按钮. 点击“Add to cart”可以将商品加入购物车,每件商品只能添加一次,如果把购物车的 ...
- Vue小项目二手书商城:(三)前端渲染数据
实现内容: axios取到的数据在前端使用(父子组件各自应该怎么使用) 一.简单使用(在哪取在哪用) 1.在App.vue中script中加上data(data专属于当前组件,父子组件传参通过prop ...
- Vue小项目二手书商城:(二)axios前后端数据交互
实现内容: 写路由接口(express) axios取数据 一.写接口 1.我们要在前端取到后端的数据(之前写的data.json)可以用vue-resourse或者用axios,在vue2之后官方就 ...
- Vue小项目二手书商城:(一)准备工作、组件和路由
本项目基于vue2.5.2,与低版本部分不同之处会在(五)参考资料中提出 完整程序:https://github.com/M-M-Monica/bukesi 实现内容: 资源准备(mock数据) 组件 ...
- node 无脑生成小程序二维码图
RT 新建createwxaqrcode.js: const request = require('request') const fs = require('fs') // eg:生成购物车列表圆形 ...
随机推荐
- DNS反向解析
一:创建反向解析区 1.和创建正向解析区的步骤类似,选主要区域 这里设置的IP是192.168.1,一直点确定即可 2.指针记录即反向解析记录,记录ip对应的域名,是反向解析区最常用的记录 输入ip和 ...
- 写好C#代码的技巧
写好C#代码的技巧 编者导语 本文来自https://www.pluralsight.com,作者Afzaal Ahmad Zeeshan. 原文包含以下三篇文章: <编写更好的C#代码简介&g ...
- Ubuntu下利用MWAN+LFTP解除单mac速度限制
起因 公司网络限制了单个mac地址的速度, 而日常经常需要从线上环境下载几个G的数据到本地, 通过FileZilla每次需要一个多小时, 非常不方便 解决方案 WAN聚合 本地网口连接OpenWRT路 ...
- Java定时器(Timer)
1.介绍 Timer和TimerTask是用于在后台线程中调度任务的java util类.简单地说,TimerTask是要执行的任务,Timer是调度器. 2.调度一次性任务 2.1 指定延迟后执行 ...
- SpringBoot+Shiro+LayUI权限管理系统项目-1.项目介绍
1.项目介绍 本项目旨在打造一个基于RBAC架构模式的通用的.并不复杂但易用的权限管理系统.通过本项目可以较好的理解权限系统的常见业务同时学习掌握Springboot和Shiro等诸多技术点.需要的朋 ...
- js加css实现div展示更多隐藏内容
说明 在设计博客首页文章分类等栏目时,有时候列表内容太多往往不是一次性展示出来.此时需要添加更多功能,当点击更多标签时再展示剩余隐藏的项目. 效果 代码 <!DOCTYPE html> & ...
- java去除字符串空格
package test; /** * 去除字符串空格 * * @author xusucheng * @create 2018-07-04 **/ public class RemoveWhites ...
- jupyter环境变量配置与启动
一.jupyter基础知识 1.基本概念 jupyter是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果. 编程时具有语法高亮,缩进,tab补全的功能. ...
- 区间dp-Palindrome
Palindrome 题意:给一个字符串,问最少加上多少个字符,可以使这个字符串成为回文串 思路一.直接dp(会爆内存) dp[i][j]表示区间[i,j]之间有最少需要加上多少个字符 状态转移方程: ...
- error C2039: "function": 不是 "std" 的成员的解决方法
这个错误通过某度没找到合适的解决方案,故记录下来 其实如果使用 google 搜索错误的英文关键词,大概第一条就是解决问题的链接 Large number of "'function' is ...