1 Star 0 Fork 10

HertzZhang / 逐飞科技基于CH32V203的无感无刷驱动开源项目

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 15.16 KB
一键复制 编辑 原始数据 按行查看 历史
TEK_MengQ 提交于 2024-01-18 17:19 . 更新readme

基于CH32V203的无感无刷电机驱动方案开源啦

一、无刷电机原理

1.1 无刷电机内部结构

输入图片说明

上图为无刷电机的基本模型示意,电机内部有三个线圈,每个线圈的一端都连接起来,另外一端引出到外部,中间有一个具有N/S两极的永磁铁内转子。如果我们按照一定的顺序给电机通电,转子就可以旋转起来。我们举例几种给电的情况来进行简单分析和模拟:

1.2 无刷电机旋转原理

a.给A通正电压,B通负电压。 A相产生的磁场会吸引转子的S极,B相线圈产生的磁场会吸引转子的N极,转子会转到向左倾斜的位置,如下图所示。(其中每一相产生的磁场我们需要使用右手螺旋定则判断磁场的南极与北极)

输入图片说明

b. 给A通正电压,C通负电压。 A相产生的磁场会吸引转子的S极,C相线圈产生的磁场会吸引转子的N极,转子会转到水平位置,如下图所示。

输入图片说明

c. 给B通正电压,C通负电压。 B相产生的磁场会吸引转子的S极,C相线圈产生的磁场会吸引转子的N极,转子会转到向右倾斜的位置,如下图所示。

输入图片说明

d.给B通正电压,A通负电压。 B相产生的磁场会吸引转子的S极,A相线圈产生的磁场会吸引转子的N极,转子会转到向左倾斜的位置和a种情况类似但转子的南北极相反,如下图所示。

输入图片说明

根据前四次的举例,我们可以得出第5、第6次也可以依次类推。 最终我们总结一下每次换相之后转子到达的位置,转动一圈需要换相6次,每次换相角度为60度,如下图所示

输入图片说明

以上就是我们控制无刷电机转动的基本原理了,但是要真正的实现无刷电机的驱动,我们还缺少一个最重要的东西,就是如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。

方式一:通过过零检测,三相相电压与电机中性点电压进行比较。过零检测的优点在于电机与驱动连接的线较少,没有霍尔的电机重量轻体积小,但是缺点在于启动的时候需要开环启动,会导致低速的时候控制效果差,并且硬件电路会更加复杂。

方式二:通过安装霍尔检测转子位置,一共安装三个霍尔分别间隔120度安装,霍尔输出的波形如下图所示(使用逻辑分析仪采集到的波形),每当波形改变的时候就需要进行换相。优点是电路结构简单,缺点是电机成本会稍微高一点点。

输入图片说明

方式三:加装磁编码器直接检测转子具体的位置。这种方式成本会高很多。

我们推荐选择方式一,气垫船组对于低速可以说完全没有需求,这样也就避开了过零检测的缺点,并且气垫船组对车模整体是越轻越好,采用无感的方式可以降低电机与驱动之间的连线,并且电机也可以更轻,电路上通常需要增加运放、比较器等电路,我们也可以通过使用单片机内部的运放与比较器来实现电路的简化。因此过零检测的方式对于气垫船组来说是非常合适的。

二、无感无刷基础知识与选型

2.1 逐飞CH32V203无感无刷驱动开源项目的电机控制芯片选型

本开源项目选用CH32V203C8T6-LQFP48驱动无刷电机,这款单片机特点如下:

1.主频最大可达144MHz。

2.四路免表中断。

3.两个运放,一个运放两个通道,可用作四路比较器。

4.拥有看门狗功能。

5.一个高级定时器,能输出互补PWM。

6.价格便宜,LQFP封装方便焊接

2.2 逐飞CH32V203无感无刷驱动基础知识概述

有感无刷电机我们可以通过电机内部的霍尔判断转子当前的位置,然后无感无刷则只有三根相线。因此无感无刷电路上稍微复杂一点,会多一个反电动检测电路,通过判断未通电的那项过零来判断电机是否应该进行换相。反电动势检测电路主要有分压电路与比较电路构成。逐飞基于CH32V203制作的无感无刷电调使用了单片机内部的比较器,因此外围电路非常的简单,可以大幅度缩小板子的面积。

接下来我们简单描述一下分压电路与比较器电路的作用,分压电路是为了将反电动的电压降低到比较器或者MCU可承受范围内,而比较器是用于判断反电动势过零信号的,我们将未通电的相的反电动势与电机中性点电压进行比较,当反电动势从负逐渐上涨超过电机中性点电压的时候,或者当反电动势从正逐渐下降低于电机中性点电压的时候就捕获到一个过零信号。这里经常有一个误区,很多人认为过零就是反电动势对地比较,这个是不对的,这里比较的对象是电机的中性点电压,并非是电路的GND。那有的小伙伴可能会疑问电机的中性点又没有引出,一般的无刷电机都只有三个相线,怎么与中性点进行比较呢,这个我们可以采用虚构一个中性点,也就是将三个相线使用同样大小的电阻连接在一个点,这样我们就虚构了一个中性点了。

有的小伙伴可能关注过CH32V203 MCU的内部资源会提出一个疑问,那就是MCU内部只有两个运放,是如何当作三个比较器来使用的?实际上MCU内部的一个运放可以有两个不同的输入端和不同的输出端,可以通过程序切换来选择,这样我们就可以通过程序不停的切换引脚实现对三相的比较,因为在瞬时我们总是只需要对一个相进行比较就好了。

前面简单介绍了一下无感无刷如何判断应该何时换相,但是我们好像还有一件非常重要的事还没解决,那就是电机还没转起来的时候是没有反电动势的,因此通常无感无刷启动分为三个步骤,1、预定位 2、开环转动 3、切入闭环控制。

预定位:是预先将转子定在某一个位置上,只要持续的给较小的占空比给某一相通电即可。 开环转动:强制拖动电机转动,通过延时的方式依次进行换相从而迫使电机转动起来,后续通过上一次的换向时间来计算下一次的换向时间。

切入闭环控制:当低通滤波后的换向时间合理且达到设定的转动圈数,我们就切换为闭环控制。这里的闭环控制表达的意思是电机的换相不再是通过延时换相,而是根据过零信号来进行换相。 上面基本就是无感无刷主要的一些原理讲解,仅供参考学习,同学们还是要自己真正的理解领悟最终转换为自己的的东西才可行。

2.3 逐飞CH32V203无感无刷驱动开源项目的预驱及MOS选型

由于单片机内部已经集成了比较器,因此外围器件选择主要就集中在了预驱、MOS管型号的选择上,MOS管我们选择的型号是TPN2R703NL,这款MOS电流高达45A,10V的时候内阻低至2.2毫欧,开启电压低至2.3V左右,性价比较高,预驱采用FD6288Q,体积小巧,如下图所示:

image-20240111180007815

这里的图如果看不清楚不要紧,原理图的PDF文件会放到开源资料里的。

2.4 逐飞CH32V203无感无刷驱动开源项目的代码部分

逐飞CH32V203无感无刷开源项目的目录结构如下图所示。

image-20240112181858310

addition_hardware文件夹下放置的是一些作为额外非必要的单片机片内外设模块,例如电池电压检测、LED显示、调试串口、独立看门狗、延时。 addition_software文件夹下放置的是逐飞助手虚拟示波器文件。 bldc_config文件夹下放置的是驱动无刷电机配置文件、以及本版本文档。 bldc_hardware文件夹下放置的是驱动无刷电机一些必要的单片机片内外设模块,例如PWM、运放、定时器等模块的初始化。 bldc_software文件夹下放置的是逐飞科技精心编写检测转子位置和控制无刷电机转动必要的程序文件。 project文件夹下放置的是工程项目文件,双击mrs目录下面的CH32V203C8T6_ESC.uvprojx文件即可打开工程。 version文件夹下有版本说明。 wch_sdk文件夹存放的是沁恒微电子提供的sdk。

CH32V203电调

无感无刷驱动需要用到的外设主要有以下一些模块:

systick:主要用于定时器周期中断,控制电机启停。 PWM输出:使用定时器1,输出三路互补PWM信号,控制无刷电机转动。 PWM输入:使用定时器2,对外部PWM信号的周期以及占空比获取。 滞后换向计数:使用定时器3,主要用作滞后30度换向。由于无感无刷电机的特性,换向信号会超前换向点30度,所以需要滞后30度换向。 换向时间计数:使用定时器4,主要用作换向时间统计。 运放:主要用于过零信号的检测,通过外部电路将运放当作比较器,判断过零信号来及时的进行换相。 UART:主要用于发送电机信息到虚拟示波器,便于查看电机运行情况。 GPIO:主要用于LED指示灯,用于显示各种状态。 ADC:主要用于检测电源电压,用于启动的时候自动计算启动占空比,以及锂电池低压保护。

2.5 逐飞CH32V203无感无刷驱动开源项目的程序工作流程讲解

2.5.1 主函数流程图

image-20240112183138651

主函数主要的作用是初始化各种外设以及一些软件资源,然后在主循环中持续的发送电机信息到虚拟示波器,便于观察电机运行情况。此外还有另外一个功能,喂狗,防止程序跑飞。

2.5.2 定时器2中断流程图

image-20240112110958310

定时器2中断,主要用于对输入信号的处理,获取到输入信号的高电平与周期时间,从而计算油门大小。输入的频率仅支持20hz到400hz,输入的脉冲宽度检测在1ms到3ms。其中1ms代表0%的油门,2ms以及以上代表100%的油门。

2.5.3 定时器4中断流程图

image-20240112110332638

定时器4中断,主要用于检测电机超时堵转。

2.5.4 定时器3中断流程图

image-20240112110347521

定时器3中断,主要用于滞后30度换向。

2.5.5 PA2外部引脚中断流程图

image-20240115095259114

在CH32V203芯片中,有两个运放,一个运放可以通过外部电路当成两路比较器使用,这里的PA2外部引脚中断,实际上是比较器中断。在电机成功启动之后,启用比较器中断,进入比较器中断后,首先过滤掉反电动势毛刺。然后再统计换向时间。才开始进入这个中断的时候直接进行换向,等待一定的换向次数,后续再进行滞后30度换向。这里的30度,是通过统计上一圈电角度的时间除以12得出的。

image-20240115100722621

嘀嗒定时器周期中断,每100us运行一次,主要负责LED状态控制以及电机启动、停止、堵转检测、电池低电压保护等。

三、逐飞制作好的参考学习驱动板简介及无刷电机推荐

3.1.基于CH32V203无感无刷电机驱动学习板端口简介

电调正面端口简介

电调背面短接简介

1.无刷电调电源正极:接3S电池正极 2.无刷电调电源负极:接3S电池负极 3.无刷电调输出A相:接无感无刷电机的任意一相 4.无刷电调输出B相:接无感无刷电机的任意一相 5.无刷电调输出C相:接无感无刷电机的任意一相

注意事项:电调的A、B、C应该分别接到无感无刷电机的三个引脚上,不能连接到同一个引脚上。 6.PWM信号输入接口:其中示意图中黄色的线是外部PWM信号输入,通过高电平时间来控制无刷电机转动的速度。具体可以查看3.2章节。红色的线是电调对外输出5V电压,不允许外部电源给电调此端口供5V电压。

3.2.基于CH32V203无感无刷电机驱动学习板端口简介

逐飞科技的CH32V203无感无刷开源方案的电调,使用方式与舵机的控制方式相似,与商品电调的方式是一样的,信号端口与舵机端口是一样的,可以直接插在主板的舵机端口上。

无刷电调支持50-300hz的信号,信号的高电平时间范围是1-2ms,1ms时电机不转,2ms时电机满转。通过调节高电平的时间来改变无刷电机的转速。

无刷电调支持的功能如下:

1、仅支持3s锂电池供电。 2、支持低电压检测,低于设置的电压阈值后电机停止,避免对锂电池造成过放而损坏电池。 3、支持堵转检测,当检测到堵转之后会停止转动并等待一会儿重新进行启动。 4、支持上电电机鸣叫功能。

3.3.无刷电机与螺旋桨推荐

输入图片说明

我们测试了多款电机,最终选择了这款电机体积小巧、重量轻、搭配我们的螺旋浆推力大。

3.3.2 桨叶及保护罩

气垫车模的制作我们推荐选用3英寸的桨叶,直径更小,去年负压的桨叶是4英寸的,不利于将车模做小。

6e6b167ddd5e2455c50860c550beb298_640_wx_fmt=png&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1

3英寸桨叶,请成对使用

保护罩是专为上面桨叶设计制作的,适合搭配使用。且本次我们用于组装气垫车模的保护罩分为两种,一种是适配两个无刷电机桨叶的保护罩,一种是适配4个有刷电机的保护罩。

image-20240118171829704

无刷桨叶保护罩

d4a1a20ddf2b8d77d9a671a74c9bf7d6_640_wx_fmt=png&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1

有刷桨叶保护罩温馨提示:此款电机仅为逐飞推荐款,同学们也可以选择自己认为合适的无刷电机,这一点上规则是没有限制的。

3.3.3 气垫车模散件(需自行组装)

如前言所说,气垫组车模允许自制,所以我们根据要求设计制作了一套需要自行组装的气垫车模散件,现在也已经上架啦,同学们可以到逐飞淘宝店咨询选购,后续逐飞也会制作一个组装视频供大家参考进行组装。

6c568d81ff13adf683189f1798f3ec15_640_wx_fmt=png&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1

打包下载开源库压缩包,就可以愉快的开始玩无刷啦,各位下载之前别忘了帮我们点一点小星星哦,感谢各位的支持。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/hertzzhang/CH32V203_BLDC_Project.git
git@gitee.com:hertzzhang/CH32V203_BLDC_Project.git
hertzzhang
CH32V203_BLDC_Project
逐飞科技基于CH32V203的无感无刷驱动开源项目
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891