前言

   打算基于ST的官方平台,开始BLDC的学习。先学习简单的六步换相,后面的FOC再说。写此文督促自己学习。手头有一部分零零散散的资料,但是一直没有一个项目能把这些资料都串起来,在网上也看了不少资料,看看都懂了,实际连六步换相都没跑过,也是惭愧。
   若能有大神指点一二,感激不尽!希望能有志同道合的一起学习进步,一起入门

硬件平台

1、NUCLEO-F302开发板 + IHM07M1驱动板 + 7对极三相无刷小电机
(均为ST官方套件)

软件部分

1、移植例程

   学习网上的无刷无感电控例程,自己进行移植到ST开发套件上,记录遇到的一些问题。

1.1 单步换相

   首先,开始万里长征第一步,做一次换相。

   定义一些基本的变量,例如step步数等备用。

   借用现成的按键函数,按一次按键,则进行一次换相。先用按键实现六步换相。每次开MOS后,设置1秒后关闭输出,防止换相失败或者上下桥意外导通烧MOS。

1.2 强制换相

   捣鼓下,发现可以开环转了,然而可能还是原来的例程在跑,需要屏蔽掉while(1)中自己写的部分代码,看电机是不是还在正常跑,才知道。后面发现中断里有部分还是不能屏蔽,屏蔽了就不能转,说明并不是自己的代码在起作用,还需要继续屏蔽代码。

   开环转,与反电动势的采样应该是无关的,屏蔽反电动势相关采样,只保留强制换相的步骤,发现仍然可以运行。
   PS:强制换相六步,成功的话会旋转360度电角度,想要旋转一圈即360度机械角度,则可以旋转:六步*极对数 的步骤。此处是七对极电机,则计数换相42步,差不多旋转一圈。
   发现开环启动不是每次都会成功,有时候会卡住,原因待分析。

1.3 开环启动

   开环启动的原理,就是强制进行六步换向。如果换向的频率固定的话,开环转的速度也是固定的。开环启动没什么技巧,首先就是用定时器配置一个周期,例如周期为1ms,然后以这1ms为基准的PWM载波周期进行换向。

   开环启动核心代码如下:

     switch(MotorA.State) //状态机,State 表示电机状态{case 0:                             //定位状态
//PWMTicks 是每个PWM 周期加1,换向时清零。这段就是给某两相通电一段时间,定位if(MotorA.PWMTicks >= 1000)  //默认是4ms周期{            BLDC_SwitchStep();  //六步换向,Step=2, A+,B-MotorA.State++; //切换到启动状态MotorA.BEMF_Cnt = 0;}break;case 1:                             //开环启动状态     if (MotorA.PWMTicks >= 8) //{  // 强制换向BLDC_SwitchStep();   //从Step=3开始 C+,B-。MotorA.BEMF_Cnt++;}//  六步转一个电角度,此处转 6*7=42 ,7代表七对极,则是转机械角度360度。if (MotorA.BEMF_Cnt >= 42)       //50次换向之后,认为达到平稳状态 {MotorA.State++;  //切换到闭环控制状态MotorA.BEMF_Cnt = 0;}break;/*******其它代码*******/case 2: .../*******其它代码*******/

1.4 开环切闭环

   闭环的核心就是检测反电动势过零,能正确检测到反电动势过零,再延时30电角度(也就是上次换相时机的一半)
   等能正确检测到反电动势过零后,就可以切入闭环了,一般强制换相20次左右,就应该能检测到过零点了。

         case 2:                   //闭环控制状态                  if (MotorA.FlagBEMF == 0)      //未检测到过零事件{if (MotorA.PWMTicks >= 4) //同上,消磁{if ( BEMF())  //检测过零点{                 MotorA.FlagSwitchStep = MotorA.PWMTicksPre >> 1;  //延迟30电角度,上一次换向时间间隔的一半。//延迟30电角度,PWMTicksPre 记录的是上一步的时间 MotorA.FlagBEMF = 1;             //检测到过零事件,不再检测}}}else{if (MotorA.FlagSwitchStep == 0)          //延迟时刻到{BLDC_SwitchStep();               //换向MotorA.BEMF_Cnt++;}else{MotorA.FlagSwitchStep--;  //延迟30电角度时刻未到,自减}}if (MotorA.BEMF_Cnt >= 2000)       //2000次换向之后,停止{MotorA.State++;MotorA.BEMF_Cnt = 0;}break;case 3: //关闭电机MC_StopMotor();break;

1.5 闭环换相时机–改变周期

   试着慢慢的去改变周期,加快换向频率,使得电机转的越来越快。

   实际上,先尝试了,将计时周期缩短,使得100us的计时周期。定义一个 “temp_a” 作为消磁等待周期,只有速度到达一定值,才能后缩小 “temp_a” 的值,否则只会振动不运转。

case 2:                   //闭环控制状态if (MotorA.FlagBEMF == 0)      //换一次相,该标志置0。  未检测到过零事件{if (MotorA.PWMTicks >= temp_a) //同上,消磁{if ( BEMF())  //检测过零点{                   MotorA.FlagSwitchStep = MotorA.PWMTicksPre >> 1;  //延迟30电角度,上一次换向时间间隔的一半。//延迟30电角度,PWMTicksPre 记录的是上一步的时间 MotorA.FlagBEMF = 1;             //检测到过零事件,不再检测}}}else{if (MotorA.FlagSwitchStep == 0)          //延迟时刻到{BLDC_SwitchStep();               //换向MotorA.BEMF_Cnt++;}else{MotorA.FlagSwitchStep--;  //延迟30电角度时刻未到,自减}}if (MotorA.BEMF_Cnt >= 1000)       //1000次换向之后,缩短换相等待时间 {temp_a = 10; //静态变量temp_a,在达到一定速度后,进行改变,使得换相的频率更快}    if (MotorA.BEMF_Cnt >= 2500)       //2500次换向之后,缩短换相等待时间{temp_a = 8;}if (MotorA.BEMF_Cnt >= 4000)       //80000次换向之后,停止{MotorA.State++;MotorA.BEMF_Cnt = 0;}break;

(未完待续)

基于STM32平台,学习BLDC记录相关推荐

  1. stm32中用到的实时系统_基于STM32平台的实时操作系统

    基于STM32平台且满足实时控制要求操作系统,有以下5种可供移植选择,分别为μClinux.μC/OS-II.eCos.FreeRTOS和都江堰操作系统(djyos). 下面分别介绍这五种嵌入式操作系 ...

  2. 基于STM32的学习记录--MQ系列计算公式

    目录 MQ-2 定义 计算 MQ-4 定义 公式 MQ-7 定义 公式 MQ-135 定义 公式 所有的MQ系列传感器都需要一定的预热时间进行一个精度的校准 MQ-2 定义 //R2-1K. #def ...

  3. stm32 IOT_基于STM32平台的cubeMX和HAL库详解

    课程简介: <朱有鹏老师单片机完全学习系列课程>总共5季,其中第1.2季是51单片机学习,第3.4.5季是STM32单片机与RTOS学习.整个课程时长约250小时,是一套零基础.全面系统. ...

  4. 78、基于STM32单片机学习型搬运机器人四自由度机械臂机械手遥感控制设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序源码 七.资料包括 摘要 在当今大规模制造业中,企业为提高生产效率, ...

  5. 基于STM32的学习型通用红外遥控设备的设计实现(一)

    1.1处理器 处理器为STM32,代码在其两个系列的CPU上调试通过,为STM32F103ZET和STM32F103VBT. 软件平台:Keil uVision4;电路设计:Altium Design ...

  6. SylixOS 基于STM32平台的GPIO模仿I2C总线的驱动开发流程

    2019独角兽企业重金招聘Python工程师标准>>> 概述 本文档以STM32F767平台为例,详细介绍SylixOS上GPIO模仿I2C总线的驱动开发流程. 初始化 GPIO模仿 ...

  7. 基于STM32跑步路径记录

    基于STM32跑步路径记录   随着科技不断进步,电子化设备不断进入涌入我们的日常生活.生活水平的提高,各项健身运动应运而生,然后,健身运动不能盲目进行,科学的健身方式才能有效的提升我们自身的身体素质 ...

  8. 【官方推荐】基于STM32单片机的热门可穿戴应用设计方案

    基于STM32F411的步行者航迹推算技术 方案简介 基于STM32F411的步行者航迹推算技术(PDR)为一种辅助定位方式, 适用于中短程相对位置推测.  • 室外模式与GPS结合使用, 减少GPS ...

  9. 基于stm32温湿度采集平台开发

    基于stm32温湿度采集平台开发 ==这里记录一下自己以前课设报告,但是论文中图片和文字.公式太多了,懒得粘贴了,需要完整的私信== 摘 要 关键词 第一章 绪论 1.1 研究背景 1.1.1国内研究 ...

最新文章

  1. 远看像乱序执行,近看是内存屏障的 BUG 是如何解决的?
  2. H5支持度检测常用模式(仅干货)
  3. Redhat 5.4 Orcle RAC 数据库 从10.2.0.1升级到 10.2.0.4
  4. java Launcher源码_Launcher3源码浅析(5.1)--Launcher.java
  5. Flutter布局锦囊---完善信息页
  6. mysql慢日志分析工具_mysql慢查日志分析工具 percona-toolkit
  7. 【VBA】获取当前工作表的用户名
  8. 浅谈c++纯虚函数的多态与数据隐藏
  9. linux配置路由器命令手册,Linux配置路由器
  10. 根据图片地址检查图片格式,今日头条有效
  11. jdk文档下载(html格式)
  12. 【移动网络】[5G 核心网络架构] 5GC: Architecture
  13. 【Redis消息队列实现异步秒杀】--Redis学习笔记08
  14. 蓝桥杯_大胖子走迷宫
  15. 2018王者服务器维护,王者荣耀:2018年最后一次更新,大量装备改动,玩法全部迭代!...
  16. Ubuntu的基本用法:常用指令,控制流程和重定向
  17. 元胞自动机交通模型【matlab实现】
  18. 字蛛压缩ttf字体(前端常用)
  19. 数据质量分析之校验规则模板
  20. LeetCode刷题记录+数据结构总结

热门文章

  1. Java Web中涉及的编解码
  2. 教你如何找回被盗的QQ密码(转贴)
  3. 基于bert特征提取的FAQ问答系统构建
  4. Python抓取妹子图,内含福利
  5. 中国股市:如果历史会重复?
  6. ES 文件浏览器安全漏洞分析(CVE-2019-6447)
  7. CVPR2022论文速递(2022.4.20)!共13篇!
  8. 用filebeat读不了log文件,出现“message“:“Non-zero metrics in the last 30s“
  9. 035 Rust死灵书之Vec处理零尺寸类型
  10. 【亲测有效】mac电脑也能玩魔兽世界怀旧版(wow经典怀旧版)