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:生成购物车列表圆形 ...
随机推荐
- 《ASP.NET Core 与 RESTful API 开发实战》-- (第8章)-- 读书笔记(中)
第 8 章 认证和安全 8.2 ASP.NET Core Identity Identity 是 ASP.NET Core 中提供的对用户和角色等信息进行存储与管理的系统 Identity 由3层构成 ...
- pta-神坛
[神坛]pta *相邻两条边围成的三角形面积会是最小的 极角排序+叉积计算三角形面积 #include<bits/stdc++.h> #define int long long using ...
- python第五章pta习题总结
四.编程部分 1.sorted函数: sorted(iterable, cmp=None, key=None, reverse=False) #iterable:可迭代的对象 #cmp:比较规则 #k ...
- r0tracer 源码分析
使用方法 修改r0tracer.js文件最底部处的代码,开启某一个Hook模式. function main() { Java.perform(function () { console.Purple ...
- 用Taro写一个微信小程序——版本升级
一.升级 1.升级Taro CLI至最新版本 taro update self npm i -g @tarojs/cli 2.更新项目中 Taro 相关的依赖 taro update project ...
- socket及黏包现象及解决黏包---day28
1.四次挥手(补充) 客户端向服务端发送一个请求消息,断开连接(代表客户端没有数据传输了) 服务端接收请求,发出响应 等到服务端所有数据收发完毕之后 服务端向客户端发送断开连接的请求 客户端接收请求后 ...
- 【补档_C51单片机】基于C51的蜂鸣器音乐盒工程源码解析(可播放《打上花火》)
项目地址:https://gitee.com/daycen/c51-music-box 通过Keil uVision3打开即可使用 以前做的一些小硬件,现补档至博客 1 功能及总体方案 1.1 功能描 ...
- linux基本知识汇总1(基础命令) 20000字汇总
$$$$ 命令选项查看方式1.内建命令(help)格式: help + 内建命令#### help 命令 // 命令使用说明 2.外部命令(–help)一般是 Linux 命令自带的帮助信息,并不是所 ...
- linux 命令行使用codeql
目录 CodeQL 概述 安装 直接使用在线查询(lgtm) vscode使用codeql 下载 库文件 测试 linux控制台运行 下载 安装 创建数据库 编写QL查询数据库 简单解释 CodeQL ...
- 微信小程序开发:接入阿里云人像动漫化api接口
前面我已经把腾讯云的人像转动漫化接口接到了我的小程序里,但是和阿里云的对比后,发现阿里云的效果会更好一些,且支持更多特效,如下: 我比较喜欢这个3D特效风格,动画3D也可以,大家拭目以待. 话说上次接 ...