自制无感无刷电机驱动板

news2024/11/22 11:37:13

自制无感无刷电机驱动板


分别测试了基于C251的STC32G单片机、Arduino AVR的ATmega328PB、以及ARM的ST32F103单片机。

  • 🧲测试转动效果

在这里插入图片描述

  • ✒目前市面上开源的有关无刷电机的项目数不胜数,其控制原理都大同小异,在没有领透其技术要领情况下,关键是找到一个合适自己的,资料齐全的,有针对性的学习。
  • ✨学习资料阅读推荐《无感无刷直流电机之电调设计全攻略》

  • 🎉现成的无感无刷驱动测试资料来源:

  • 📓STC三相无刷电机驱动-STC32G-无HALL资料地址 : https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7472&extra=page%3D1

  • 📍ATmega328PB移植可以参考 ATmega8 MK 电调开源程序 V0.42 版:https://svn.mikrokopter.de/websvn/listing.php?repname=BL-Ctrl&path=%2Ftags%2FV0.42%2F&#a4bfcc0886576e3118d94460220fa558a

  • ATmega328PB相关移植参考文章:https://www.amobbs.com/thread-4652868-1-1.html
  • 👉 如果自制驱动板,推荐还是和控制芯片集成到一起,因为需要连接的线比较多,连接不稳定容易出问题。
  • 📍ST32F103无感无刷驱动资料来源参考
  • 🔖匠心科技BLDC开发板资料
链接:https://pan.baidu.com/s/1s5YjzRSDLKQvl86lBVAqKA?pwd=a6cx
提取码:a6cx

***** 解压密码:JXKJ_RALDNW
  • 🔖本论坛的BLDC驱动程序资料:https://blog.csdn.net/snail_dongbin/article/details/82803076
链接:https://pan.baidu.com/s/1uXD7UBV3R_NEV85zf-jmZg?pwd=7esq 
提取码:7esq
  • 🔬使用无感驱动程序,配合自制电机驱动板,在开环测试下没有问题。
  • 📑个人自制无刷电机驱动板原理图
  • PCB其它相关功能还未测试,最终PCB电路还未正式确认,暂时没有开源发布出来。
链接:https://pan.baidu.com/s/1jxZzWpBFSaQAJqjUw6hTgQ?pwd=o5q7 
提取码:o5q7
  • 🍁初稿原理图
    在这里插入图片描述
  • 🌿由于驱动板没有集成MCU,在使用时,需要根据个人使用的单片机,进行相关代码的移植。
🌼驱动程序说明
  • 📍基于STC32G单片机的驱动程序:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1822&highlight=bldc&page=1&extra=#pid11784
  • 使用STC32G驱动程序,在开环低速测试没有问题,在开启PID功能调试模式不行,PID参数没有调整好。
  • 🌿Arduino 328PB开环测试程序

🥕仅供测试使用,这是让无感无刷电机强制转起来。主要用于验证基本驱动电路是否正常。如果需要使用328P驱动可以参考:德国MK项目BLDC电调项目,详见上面的相关链接。

#include "Arduino.h"

int AA1=3;
int AA2=5;
int BB1=11;
int BB2=10;
int CC1=9;
int CC2=6;

int enable=2; //This is not used for now, The ESC is always enabled
int emfA=A0;
int emfB=A1;
int emfC=A2;

int fase=1;
int deltaA=0;
int emA=0;
int sum=0;

int IN=A3;
unsigned int Delay=3600;

int it=0;
int it2=1;

static int delta= 0;
static int Lastdelta= -1;

unsigned long previousMicros = 0;

void setup() {
	Serial.begin(9600);
	pinMode(AA1,OUTPUT);
	pinMode(AA2,OUTPUT);
	pinMode(BB1,OUTPUT);
	pinMode(BB2,OUTPUT);
	pinMode(CC1,OUTPUT);
	pinMode(CC2,OUTPUT);

	pinMode(enable,OUTPUT);

	pinMode(IN,INPUT);
	pinMode(emfA,INPUT);
	pinMode(emfB,INPUT);
	pinMode(emfC,INPUT);

  //digitalWrite(enable,HIGH);
  //previousMillis = micros();

}

void loop() {


	int emA = analogRead(emfA);
	int emB = analogRead(emfB);
	int emC = analogRead(emfC);
	int sum = (emA+emB+emC)/3;

	unsigned long currentMicros = micros();
	if(currentMicros - previousMicros >= Delay){

		previousMicros += Delay;

		//Phase1 C-B
		switch(fase){
		case 1:
		  digitalWrite(AA1,LOW);
		  digitalWrite(AA2,LOW);
		  digitalWrite(BB1,LOW);
		  digitalWrite(CC2,LOW);
		  digitalWrite(BB2,HIGH);
		  digitalWrite(CC1,HIGH);
		  delta = emA-sum;

		  break;


		//Phase2 A-B
		case 2:
		  digitalWrite(AA2,LOW);
		  digitalWrite(BB1,LOW);
		  digitalWrite(CC1,LOW);
		  digitalWrite(CC2,LOW);
		  digitalWrite(AA1,HIGH);
		  digitalWrite(BB2,HIGH);
		  delta = emC-sum;
		  break;

		//Phase3 A-C
		case 3:
		  digitalWrite(AA2,LOW);
		  digitalWrite(BB1,LOW);
		  digitalWrite(BB2,LOW);
		  digitalWrite(CC1,LOW);
		  digitalWrite(CC2,HIGH);
		  digitalWrite(AA1,HIGH);
		  delta = emB-sum;
		break;

		//Phase4 B-C
		case 4:
		  digitalWrite(AA1,LOW);
		  digitalWrite(AA2,LOW);
		  digitalWrite(BB2,LOW);
		  digitalWrite(CC1,LOW);
		  digitalWrite(BB1,HIGH);
		  digitalWrite(CC2,HIGH);
		  delta = emA-sum;
		  break;

		//Phase5 B-A
		case 5:
		  digitalWrite(AA1,LOW);
		  digitalWrite(BB2,LOW);
		  digitalWrite(CC1,LOW);
		  digitalWrite(CC2,LOW);
		  digitalWrite(AA2,HIGH);
		  digitalWrite(BB1,HIGH);
		  delta = emC-sum;
		  break;

		//Phase6 C-A
		case 6:
		  digitalWrite(AA1,LOW);
		  digitalWrite(BB1,LOW);
		  digitalWrite(BB2,LOW);
		  digitalWrite(CC2,LOW);
		  digitalWrite(CC1,HIGH);
		  digitalWrite(AA2,HIGH);
		  delta = emB-sum;
		  break;
		}

		if (Lastdelta < 0)
		{
		  if (delta > 0)
		  {
			  Lastdelta=delta; //save the last delta
			  fase= fase + 1;
			  if (fase > 6) {
				  fase = 1;
			  }
		  }
		}//Zero cross from - to +

		if (Lastdelta > 0)
		{
		  if (delta < 0)
		  {
			Lastdelta=delta;
			fase= fase + 1;
			if (fase > 6) {
			  fase = 1;
			  }
		  }
		}//Zero cross from + to -

  }//Case ends

  int t =analogRead(IN); //From the potentiometer
//  Delay=map(t,0,1024,1,1000); //we obtain the delay speed using the potentiometer
  //we map the values from 1 to 1000 microseconds
  Serial.println(t);


} //loop ends

  • 🌿使用匠心科技BLDC相关资料中的stm32f103,无感无刷驱动程序,完全适配的上个人自制的驱动板,并且可以很平稳的驱动转起.来。具体资料详见上面链接。里面的驱动部分关键实现也是参考了德国MK电调项目相关内容。

🔰其他相关内容学习参考

  • 🌿对应无感无刷电机驱动,换相检测电路检测部分计算,可以进一步阅读:https://blog.csdn.net/qq_41100189/article/details/119832506

  • 🔖后续有新内容在补充更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1673430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么申请一年期免费的https证书

随着互联网的推广和普及&#xff0c;如今HTTPS证书的普及度还是比较高的了&#xff0c;大家对于https证书的需求度也在日益提升。针对于一些个人用户或是企业而言&#xff0c;实现网站的https访问已经成为了一种标配。从去年年底开始&#xff0c;各大SSL证书厂商陆续下架一年期…

用Python和GUI实现Socket多线程通信方案

下面是一个使用 Python 和 Tkinter GUI 库实现 Socket 多线程通信的简单示例。在这个示例中&#xff0c;我是创建了一个简单的聊天应用&#xff0c;其中服务器和客户端可以通过 Socket 进行通信。 1、问题背景 这个问题与在 Python 应用中使用 pyGTK、线程和套接字相关。开发者…

GD32驱动LCD12864

目录 1、引言 1.1、LCD12864基本概念和作用。 1.2、硬件引脚 2、GD32微控制器简介 3、LCD12864显示屏简介 3.1、模块引脚说明 3.2、模块连接方式 4、驱动原理 4.1、指令集 4.2、显示坐标关系 5、软件开发 6、硬件连接 7、效果演示 8、附录 1、引言 1.1、LCD12…

地下车库导航地图怎么做?停车场地图绘制软件哪个好?

上海懒图科技以先进技术和丰富的行业服务经验为用户提供停车场景下的全流程服务平台&#xff0c;用户基于平台可自主快速绘制酷炫的停车场地图&#xff0c;通过提供完善的停车场应用功能集和扩展API服务包&#xff0c;可以方便地实现电子地图服务于您的各类停车场应用中&#x…

【SRC实战】小游戏漏洞修改分数打榜

挖个洞先 https://mp.weixin.qq.com/s/Um0HU2srvZ0UlZRAsbSVug “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 “ 如何刷分提高排名&#xff1f;” 1、进入小游戏&#xff0c;类似于跳一跳 2、开始时每次加1分 3、随着游戏进行…

中国GDP空间分布数据集

中国GDP空间分布公里网格数据集是在全国分县GDP统计数据的基础上&#xff0c;考虑人类活动密切相关的土地利用类型、夜间灯光亮度、居民点密度数据与GDP的空间互动规律&#xff0c;通过空间插值生成的空间格网数据。数据包括1995、2000、2005、2010、2015和2019年6期。该数据集…

Vue3实战笔记(20)—封装头部导航组件

文章目录 前言一、封装头部导航栏二、使用步骤总结 前言 Vue 3 封装头部导航栏有助于提高代码复用性、统一风格、降低维护成本、提高可配置性和模块化程度&#xff0c;同时还可以实现动态渲染等功能&#xff0c;有利于项目开发和维护。 一、封装头部导航栏 封装头部导航栏&am…

11个免费的 android数据恢复应用程序功能分析

在手机上丢失数据是一个很大的错误。但是&#xff0c;在这种情况下&#xff0c;除了惊慌失措之外&#xff0c;最好开始使用android数据恢复应用程序搜索以查找将其取回的方法。您可以检查手机的备份存储以在Android上进行数据恢复&#xff0c;但是如果数据仍然无处可寻&#xf…

spring cloud alibaba、spring cloud和springboot三者的版本兼容

官方版本说明地址: 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 组件版本关系 每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示(注意,Spring Cloud Dubbo 从 2021.0.1.0 起已被移除出主干,不再随主干演进): Spring Cloud Alibaba Ve…

如何利用AI生成答辩PPT?笔灵AI答辩PPT,智能识别关键点

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

业绩超预期外,海尔智家ESG实践再获认可

求增长&#xff0c;已成各行业面对的共同命题。 在家电赛道上&#xff0c;海尔智家的业绩表现不俗。2024一季度&#xff0c;海尔智家延续了年报稳健增长的趋势&#xff0c;继续在高基数下实现高增长&#xff0c;其利润增幅更是高达20.2&#xff05;&#xff0c;超预期。而今年…

图像质量评价指标:了解图像质量的度量方式

图像质量评价指标&#xff1a;了解图像质量的度量方式 在图像处理和计算机视觉领域&#xff0c;评价图像质量的准确性对于许多应用至关重要。通过合适的评价指标&#xff0c;我们可以量化图像的质量&#xff0c;从而更好地了解图像处理算法的效果和改进空间。本文将介绍图像质…

File类~路径、创建文件对象

路径分为相对路径&#xff08;不带盘符&#xff09;&#xff0c;绝对路径&#xff08;带盘符&#xff09; 路径是可以存在的&#xff0c;也可以是不存在的 创建文件对象的三个方法&#xff1a;

如何管理Linux环境变量?

1、查看环境变量 Linux 发行版具有环境变量和 shell 变量&#xff0c;它们的功能类似&#xff0c;但作用域不同。 要列出 Linux 中的所有环境变量&#xff0c;运行printenv命令。 在流行的 Linux 发行版中&#xff0c;一些最常见的环境变量包括&#xff1a; PWD – 当前工作目录…

上位机图像处理和嵌入式模块部署(树莓派4b的替代品)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 实话实说&#xff0c;树莓派4b的产品力还是比较优秀的&#xff0c;价格还算适中。但是和国产卡片电脑比起来&#xff0c;则逊色不少。功能差不多的…

BGP—边界网关协议

BGP 动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内&#xff0c;主要用来发现和计算路由&#xff0c;为AS内提供路由信息的交换&#xff1b;而EGP工作在AS与AS之间&#xff0c;在AS间提供无环路的路由信息交换&#xff0c;BGP则是EGP的一种。 BGP是一…

【6D位姿估计】FoundationPose 跑通demo 训练记录

前言 本文记录在FoundationPose中&#xff0c;跑通基于CAD模型为输入的demo&#xff0c;输出位姿信息&#xff0c;可视化结果。 然后分享NeRF物体重建部分的训练&#xff0c;以及RGBD图为输入的demo。 1、搭建环境 方案1&#xff1a;基于docker镜像&#xff08;推荐&#xf…

《Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation》2024CVPR

域不变特征:是指在不同的数据域或环境下,特征能够保持不变或具有一定程度的鲁棒性。实现域不变特征可以在许多计算机视觉和机器学习任务中具有重要的作用,特别是在涉及跨域或跨环境的应用场景中。 以下是一些常用的实施域不变特征的方法: 1. 数据归一化:通过将数据进行归一…

Q1季度电饭煲家电行业线上市场(京东天猫淘宝)销售数据排行榜

鲸参谋监测的2024年Q1季度线上电商平台&#xff08;天猫淘宝京东&#xff09;电饭煲家电销售数据已出炉&#xff01; 今年Q1季度&#xff0c;电饭煲销售成绩不如预期。根据鲸参谋数据显示&#xff0c;今年Q1季度在线上电商平台&#xff08;淘宝天猫京东&#xff09;电饭煲销量…

angular13 自定义组件全项目都可用 自存

1.定义自定义组件 使用命令创建一个组件 但删除它在你的module里的声明&#xff0c;因为会报错只能引用一次 在本组件中创建一个module文件&#xff0c;引入刚才的组件component.ts import { NgModule } from angular/core; import { CommonModule } from angular/common; im…