stm32无感无刷电机驱动
前言:
stm32如何去控制无感无刷电机?
首先我们先要知道无刷电机的工作原理是什么,这样我们才能针对实际需求,对stm32 进行点对点的内部资源的调用,从而进行程序编写。
我相信能搜到这个Blog的同学都对无刷电机有一个大概的了解,但是具体的使用细节和原理,可能不太清楚。
在这里给大家讲解一下写程序时几个关键的点,在清楚了无刷电机控制的同时,也就明白了程序该如何写。
硬件使用的是KY_Motor的开发板。
链接:KY_Motor开发板
无刷电机控制的比较重要的地方就是换向,而无感无刷最重要的知识点就是零点检测。
1、电机换向和零点检测。
零点检测电路
//PA5 引脚中断,计算换相时刻
void EXTI9_5_IRQHandler(void)
{ Zero=GPIO_ReadInputData(GPIOA);Zero=Zero&0x0038; Zero=Zero>>3;//过零点信号,513264if(!Direction)Zero=7-Zero;Zero_SW();counter1++;if(EXTI_GetITStatus(EXTI_Line5)!= RESET){EXTI_ClearITPendingBit(EXTI_Line5);}
}
在这里通过检测U、V、W三相哪一路导通,进而通过比较器来判断哪一路导通。
在这里解释一下zero = zero & 0x0038 是什么意思,在硬件上我们采用了 PA3、PA4、PA5三个引脚作为零点检测引脚,0x0038的二进制为 xx 0011 1000,就是说 PA3、PA4、PA5与 111相与,进而得出哪一路导通的值。
再将zero的值右移3位,就能得出过零点信号 513264,将513264也相应的换算成二进制数,就明白如何获取到过零点信号的值了。
在程序中我们分别对PA3、PA4、PA5三个引脚进行了中断处理,程序都一样,只是中短线不一样,大家自行改一下程序。
我们在取得过零点信号后需要对取到的信号用于电机换相,也就是下面这个经典的六臂全桥驱动电路。
取其中两路导通,实现方法我们通过如下方法进行实现。
//过零点换相函数
void Zero_SW(void)
{ switch(Zero){case 5: TIM1->CCR2=0; //ABTIM1->CCR1 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_14); break;case 1:TIM1->CCR2=0; //ACTIM1->CCR1 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); break;case 3:TIM1->CCR1=0; //BCTIM1->CCR2 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); break;case 2:TIM1->CCR1=0; //BATIM1->CCR2 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_14 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_13); break;case 6:TIM1->CCR2=0;//CATIM1->CCR3 = My_PWM; TIM1->CCR1=0;GPIO_ResetBits(GPIOB, GPIO_Pin_14 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_13); break;case 4:TIM1->CCR2=0; //CBTIM1->CCR3 = My_PWM; TIM1->CCR1=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_14); break;default:break;}
}
这段程序很好理解,就不做过多解释。
========================================================================
到这,无感无刷电机驱动的比较重要的两部分程序就讲解完了。我们接下来看一下启动函数。
//启动函数
void START_UP(void)
{switch(phase){case 1: TIM1->CCR2=0; //ABTIM1->CCR1 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_14); break;case 2:TIM1->CCR2=0; //ACTIM1->CCR1 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); break;case 3:TIM1->CCR1=0; //BCTIM1->CCR2 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); break;case 4:TIM1->CCR1=0; //BATIM1->CCR2 = My_PWM; TIM1->CCR3=0;GPIO_ResetBits(GPIOB, GPIO_Pin_14 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_13); break;case 5:TIM1->CCR2=0;//CATIM1->CCR3 = My_PWM; TIM1->CCR1=0;GPIO_ResetBits(GPIOB, GPIO_Pin_14 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_13); break;case 6:TIM1->CCR2=0; //CBTIM1->CCR3 = My_PWM; TIM1->CCR1=0;GPIO_ResetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_14); break;default:break;}
}
细心的同学会发现,启动函数和零点换相函数一样。
因为电机在启动的时候程序无法判断哪一个点在零点,因此需要先让电机导通,当导通后,便会产生反向电动势,也就可以采集到零点信号,因此知道哪一路导通。
在程序中加的用户接口程序就不在这罗列了,这个程序通过按键控制电机启动,分别对应加速和减速按键,对电机速度进行控制。下面视频测试了航模无刷电机12v、1400KV。程序花了点事件优化,无感无刷的电机启动的很流畅。
stm32无刷电机驱动器_按键调速
网上有些例程代码只能适配一种电机,换一个新电机便不能流畅的转动了,因此我把手头的电机都试了一遍,目前我手里的这些电机都可以流畅的启动,以前总玩航模,手头的电机也大都是航模用的电机。
启动算法优化优化的比较理想,可以移植到国产的32位单片机上做一个航模无刷电调,今年会陆续把剩下的工作都做完,
感谢大家收看,关注我,定期更新无刷电机干货。
stm32无感无刷电机驱动相关推荐
- diy无感无刷电机霍尔安装_新型无感无刷电机驱动的制作方法
本实用新型涉及,具体为新型无感无刷电机驱动. 背景技术: 无刷直流电机由电动机主体和驱动器组成,是一种典型的机电一体化产品.无刷电机是指无电刷和换向器(或集电环)的电机,又称无换向器电机.早在十九纪诞 ...
- stm32无感无刷电机——电位器转速控制
前言 在上一讲我们讲了无感无刷电机控制的算法,其中我们通过按键的方式来控制启停和速度控制.在这一讲我们将为大家讲解如何使用电位器来控制无感无刷电机转速的变化. 在这一讲中我们主要涉及以下几个功能,按键 ...
- 无感无刷电机驱动制作
无刷电机很多地方都有,如四轴无人机电机.高速涵道风扇.硬盘电机等: 它们有三根线引出,若是有霍尔的则还有三个霍尔传感器信号引出,要想它转起来需要进行准确的电子换相,现在很多静音风扇都是采用霍尔的有感无 ...
- 基于stm32F103HAL库+cubemx+freertos无感无刷电机BLDC控制程序开发
基于stm32F103HAL库+cubemx+freertos无感无刷电机BLDC控制程序开发 最近在做一个舵机控制项目,控制对象为大功率无感无刷电机,网上搜遍了资源,貌似这方面的资源真得十分匮乏.大 ...
- 可充电三合一无感无刷电机筋膜枪MCU方案/PCBA方案设计
概述 泛海微可充电三合一无感无刷电机筋膜枪MCU方案/PCBA方案设计无刷电机筋膜枪也称深层肌筋膜冲击仪,它是一种软组织康复工具,利用其内部特制的高速电机来带动"枪头",产生高频的 ...
- diy无感无刷电机霍尔安装_51 MCU,BLDC有感无感全开源,轻松实践直流无刷电机控制(程序+电路详解)...
上封帖子介绍了51单片机,JMT18F003PLUS,提供了芯片例程和资料,链接如下: JMT18F003PLUS单片机芯片手册,例程等资料下载 http://www.51hei.com/bbs/dp ...
- diy无感无刷电机霍尔安装_无刷电机之无感方案控制难点解析
无刷无感控制在实际应用中极为广泛,人们对它的研究也尤为以久,它的控制难点主要有两点:第一,电机的启动:第二,转子位置的检测. 对于高压无感方案来讲,除了软件上的难点之外,硬件设计也不容忽视,如硬件设计 ...
- diy无感无刷电机霍尔安装_从工作原理来了解意大利Brusatori无刷电机
2020年12月16日 15:39 来源: 东莞索菲特自动化设备有限公司 >>进入该公司展台 意大利Brusatori无刷电机工作原理介绍如下: 无刷直流电动机是采用半导体开关器 ...
- diy无感无刷电机霍尔安装_霍尔传感器常见的有那几个类别
对霍尔元件有研究的应该都知道,霍尔电势是关于I.B.θ三个变量的函数,即: E= Kq IBcosθ利用这个关系可以使其中两个量不变,将第三个量作为变量,或者固定其中一个量,其余两个量都作为变量.这使 ...
- diy无感无刷电机霍尔安装_无刷直流电机霍尔传感器安装方法研究
无刷直流电机霍尔传感器安装方法研究 常亚辉 ; 王莎莎 ; 李建春 ; 郭立杰 [期刊名称] <导航与控制> [年 ( 卷 ), 期] 2015(014)004 [摘要] 针对有位置传感器 ...
最新文章
- 铁乐学python_Day40_进程池
- Java桌球小游戏1
- GitHub访问慢-FastGithub下载及使用
- word制作电子签名
- AndroidO Treble架构下HIDL服务Java框架实现
- 编程珠玑---第二章 啊哈!算法
- leetcode题解8-盛最多水的容器
- CAGradientLayer简介 实现颜色渐变
- Django SCRF跨站点请求伪造
- 【路径规划】基于matlab遗传算法求解同时取送货车辆路径问题【含Matlab源码 1072期】
- EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库
- 鲁大师电脑硬件兼容性测试软件,用鲁大师检测软件检测电脑硬件行得通吗?
- unity ps4 下碰到的坑
- 7时过2小时是几时_一个时辰等于几个小时
- android 程序题期末,Android应用开发期末考试题
- 链接、图像、列表、计数器
- 获取晋江优质小说(按章节数量选择、python多进程)
- GiveMeSomeCredit——信用评分卡模型
- 国外酷站设计:15个带给你灵感的作品集网站
- matlab 离散控制系统仿真,基于Matlab的离散控制系统仿真.doc
热门文章
- Uni-app 小程序 App 的广告变现之路:Banner 信息流广告
- Android Gradle Build Error:Some file crunching failed, see logs for details解决办法
- 2020腾讯广告大赛 :13.5 baseline
- 如何增加(软件测试)自动化测试面试成功率?只需学会主流设计模式PO+关键字驱动!
- 起点中文网字体反爬注意事项
- 搭建教育直播平台,对教育机构有什么优势?
- 深入浅出Mybatis系列(五)Mybatis事务篇
- CS224N NLP
- win11u盘无法弹出怎么办?win11u盘老是被占用不能退出?
- 各大主流编程语言比较,运用场景