Microchip 的应用笔记 AN1083 详细地讲述了一种无传感器无刷直流电机的控制算法,其配套的开源算法采用 dsPIC® 数字信号控制器实现,此前在淘宝购入了一块基于 STM32 的无刷直流电机开发板,于是试着将该开源代码移植至手上这块开发板上。开发板如下图所示:

因硬件平台不同,故需要对硬件相关部分的代码做修改,主要涉及定时器和 AD 转换器,又由于其 IIR 滤波算法采用汇编代码编写,在此用 CMSIS DSP Software Library 中相应的算法替换。对移植过程中的主要改动做了如下笔记。

  • 定时器
    定时器计数频率选定为 4MHz,则最大计时时间为 65535 / 4000000 = 0.0164s。在低速实现方案中,定时器测量 60° 电角度的时间应小于 0.0164s,则电机转过 360° 电角度的时间应小于 0.0984s,即每分钟电气旋转次数应大于 610RPMElec
    此款开发板配套的电机为 4 对极,则每分钟机械旋转次数应大于 610RPMElec / 4 = 152RPMMech,才能保证在测得 60° 电角度前计数器不溢出。

  • AD 采样
    与原程序相同,低速时对电机的所有三个相进行采样,高速时仅采样和滤波一相的信号。在移植的程序中,低速时的采样频率为 43.9kHz,高速时的采样频率为 73.2kHz。值得一提的是,STM32参考手册中指出ADC的输入时钟不得超过14MHz。

  • 数字滤波
    滤波器参数参考应用笔记 AN1083 表1,考虑到 STM3210x 系列性能有限,滤波器阶数选定为 2 阶。以低速实现方案为例,滤波器各参数如下表所示:

    参数
    滤波器类型 低通 Butterworth IIR
    采样频率 43900Hz
    截止频率 6000Hz
    滤波器阶数 2阶

    指定这些参数后,使用 MATLAB 计算 IIR 滤波器的系数如下:

    [b,a] = butter(2,6000/21950)
    b =0.112882132982239   0.225764265964478   0.112882132982239
    a =1.000000000000000  -0.851149844168585   0.302678376097542

    在此有一点要非常留意,即 a1 和 a2 的符号,在 CMSIS DSP Software Library 的文档中对此进行了说明:

    Pay careful attention to the sign of the feedback coefficients. Some design tools use the difference equation
    y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] - a1 * y[n-1] - a2 * y[n-2]
    In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library.

    查阅 CMSIS DSP Software Library 的文档可知,需要将滤波器的系数做缩放处理,原文如下:

    Scaling of coefficients: Filter coefficients are represented as fractional values and coefficients are restricted to lie in the range [-1 +1). The fixed-point functions have an additional scaling parameter postShift which allow the filter coefficients to exceed the range [+1 -1). At the output of the filter’s accumulator is a shift register which shifts the result by postShift bits.

    postShift 的值选定为1,此时各系数需除以2,可满足各参数在[-1 +1)区间内。而后,需要将系数转换为Q15格式,计算如下:

    round(b*32768/2)
    ans =
    1849        3699        1849
    round(a*32768/2)
    ans =
    16384      -13945        4959

    滤波器各个系数存储在数组中,数组索引和系数序列的关系在 CMSIS DSP Software Library 的文档中已有说明:

    The coefficients are stored in the array pCoeffs in the following order:
    {b10, 0, b11, b12, a11, a12, b20, 0, b21, b22, a21, a22, …}
    where b1x and a1x are the coefficients for the first stage, b2x and a2x are the coefficients for the second stage, and so on. The pCoeffs array contains a total of 6*numStages values.

    此外,也可通过阅读其源代码判定数组索引和系数序列的关系:

        /* Read the b0 and 0 coefficients using SIMD  */b0 = *__SIMD32(pCoeffs)++;/* Read the b1 and b2 coefficients using SIMD */b1 = *__SIMD32(pCoeffs)++;/* Read the a1 and a2 coefficients using SIMD */a1 = *__SIMD32(pCoeffs)++;

    可以看出数组索引0、2、3对应b0、b1、b2;索引4、5对应a1、a2。
    综上所述,系数数组代码如下:

    /* fs = 43900, fc = 6000 */
    q15_t IIR_coefficients[FILTER_NUM_STAGES * 6] =
    { 1849, 0, 3699, 1849, 13945, -4959 };

    最后,依照选定的滤波器参数在 MATLAB 的 Filter Design & analysis 工具中绘制群延迟曲线。观察群延迟曲线,在 1666Hz 至 0Hz 时,相位延迟差别较小约为 37µs,在计算相位延迟时间时需将滤波器的延迟时间包含在内。

  • 其他
    该开发板所选用的 STM32F103RB 不具备 DAC 外设,故将其替换为 STM32F105RC 以便通过 DAC 输出相关波形用示波器观察。此外,所用的开发环境为 Keil uVision5。
    为方便操作增加了必要的按键功能,FUN 键对应无传感运行,UP 键对应霍尔传感器运行,运行时按下 FUN 键或 UP 键都能停止运行。
    已知的 bug,当无传感启动由开环运行切换到闭环运行时,有可能因为误进入高速实现方案,而导致启动失败。

相关链接

移植代码下载
AN1083 中文版下载

基于STM32的反电动势无传感BLDC控制相关推荐

  1. 基于 EG6831 的无感 BLDC 控制方案

    屹晶微电子有限公司 版本号:V1.11 电机控制解决 方案 Motor Control Solution ---------基于 EG6831 的无感 BLDC 控制方案屹晶微电子有限公司 基于 EG ...

  2. FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写

    FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写,MCU寄存器配置完全手写,未用到任何库文件 ID:34500065518 ...

  3. 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计

    1617基于数字电路交通灯信号灯控制系统设计(仿真电路,论文报告)  摘  要:交通灯控制系统在城市交通控制中发挥着重要的作用,本次课程设计就是以城市交通灯控制系统为背景的,主要通过运用学过的数字电路 ...

  4. 基于STM32的智能温室控制系统仿真电路设计(温控补光)-基于STM32的智能蓝牙温控风扇控制系统设计-基于STM32的无线蓝牙心电监护仪系统设计【毕设课设分享】

    1609 基于STM32的智能蓝牙温控风扇控制系统设计-毕设课设 1.LCD1602液晶显示当前温度,温度上下限值,风扇等级,自动手动模式: 2.设置有4个按键,按键1可以设置自动和手动2种模式切换: ...

  5. 基于STM32开发板实现传感数据采集-DHT11温湿度采集

    基于STM32开发板实现传感数据采集-DHT11温湿度采集 一.项目简介 本次项目是基于STM32开发板实现传感数据采集-DHT11温湿度采集.采用ARM结构中最为代表的Cortex-M4系列的芯片, ...

  6. stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>.<基于STM32的智能垃圾桶之语音识别>和<基于STM32 ...

  7. STM32实例——基于STM32开发板实现传感数据采集-DHT11温湿度采集

    STM32开发板实现传感数据采集-DHT11温湿度采集 一.前言 本项目是基于STM32开发板的温湿度采集,传感器采用DHT11温湿度传感器,软件采用keil5等.本项目采用ARM结构中最为代表的Co ...

  8. 无传感FOC控制中的转子位置和速度确定方法一

    使用PLL估算器在无感的情况下,估计转子的角度和角速度 PLL估算器的工作原理基于反电动势的d分量在稳态下等于零,其框图如下: ΚΦ 表示电压常量,下面给出了电气转速计算中使用的归 一化 ΚΦ  : ...

  9. 基于STM32开发板实现传感数据采集及wifi上云

    目录 前言 一.实验目的 二.实验环境 三.实验步骤 四.实验代码 五.实验结果 六.实验体会 前言 温度和湿度值是重要的物理参数,例如精密机械加工.实验室.温室大棚.粮库.重要活动场所.会议室.居住 ...

最新文章

  1. 写了个牛逼的日志切面,甩锅更方便了!
  2. oracle可视化工具IB,oracle小记:dba_data_files
  3. 沙滩鞋除臭法--针对常见户外沙滩鞋来讲
  4. android 地图服务开发 INSTALL_FAILED_MISSING_SHARED_LIBRARY 错误解决
  5. CDOJ1633 Video Game Combos [AC自动机+dp]
  6. oracle交流 提问,Oracle常见提问5(转)
  7. 服务器虚拟化win游戏,Win虚拟化之Windows Virtual PC 功能概述
  8. RegExp类型exec()方法的返回值说明
  9. C++ 处理输入输出错误
  10. 如何把本地yum源给其他机器使用_配置本地yum源以及第3方软件仓库的搭建
  11. 如何判断stdin的数据类型
  12. P3194 [HNOI2008]水平可见直线
  13. encodeURI和uncodeURIComponent的介绍
  14. java二维数组扫雷,Java 数组 之 二维数组 扫雷实例
  15. 【字体】编程常用字体推荐,微软,苹果,开源系统默认代码字体
  16. 数学建模论文题目优选专业题目128个
  17. python 整合excel_使用python将多个excel文件合并到同一个文件的方法
  18. ORACLE中的INTERVAL
  19. TimeShift QQ群组-欢迎各界友人加入喽
  20. 文墨绘学任何事物都是发展变化的

热门文章

  1. LinuX 硬盘分区细节
  2. IDEA 运行 Junit 测试用例报 !!! JUnit version 3.8 or later expected 错误
  3. python音频分析工具_Python对音频进行测试及频谱分析
  4. velocity模板技术生成word文档
  5. 一个很简单的淘宝优惠券搜索助手 大家看看有没有用吧 下载地址:http://pan.baidu.com/s/1skRHTDF
  6. mysql 创建日历表
  7. ​入行快30年了,你问我计算机有啥用,我还真的要想想
  8. 计算机中职专业课考试科目,中职教师资格证专业课包括哪些
  9. linux:文件操作(open、write/read、lseek、close)
  10. 数论概论 第五章 习题解答(下) (宋二娃的BLOG)