基于STM32的反电动势无传感BLDC控制
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控制相关推荐
- 基于 EG6831 的无感 BLDC 控制方案
屹晶微电子有限公司 版本号:V1.11 电机控制解决 方案 Motor Control Solution ---------基于 EG6831 的无感 BLDC 控制方案屹晶微电子有限公司 基于 EG ...
- FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写
FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写,MCU寄存器配置完全手写,未用到任何库文件 ID:34500065518 ...
- 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计
1617基于数字电路交通灯信号灯控制系统设计(仿真电路,论文报告) 摘 要:交通灯控制系统在城市交通控制中发挥着重要的作用,本次课程设计就是以城市交通灯控制系统为背景的,主要通过运用学过的数字电路 ...
- 基于STM32的智能温室控制系统仿真电路设计(温控补光)-基于STM32的智能蓝牙温控风扇控制系统设计-基于STM32的无线蓝牙心电监护仪系统设计【毕设课设分享】
1609 基于STM32的智能蓝牙温控风扇控制系统设计-毕设课设 1.LCD1602液晶显示当前温度,温度上下限值,风扇等级,自动手动模式: 2.设置有4个按键,按键1可以设置自动和手动2种模式切换: ...
- 基于STM32开发板实现传感数据采集-DHT11温湿度采集
基于STM32开发板实现传感数据采集-DHT11温湿度采集 一.项目简介 本次项目是基于STM32开发板实现传感数据采集-DHT11温湿度采集.采用ARM结构中最为代表的Cortex-M4系列的芯片, ...
- stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>.<基于STM32的智能垃圾桶之语音识别>和<基于STM32 ...
- STM32实例——基于STM32开发板实现传感数据采集-DHT11温湿度采集
STM32开发板实现传感数据采集-DHT11温湿度采集 一.前言 本项目是基于STM32开发板的温湿度采集,传感器采用DHT11温湿度传感器,软件采用keil5等.本项目采用ARM结构中最为代表的Co ...
- 无传感FOC控制中的转子位置和速度确定方法一
使用PLL估算器在无感的情况下,估计转子的角度和角速度 PLL估算器的工作原理基于反电动势的d分量在稳态下等于零,其框图如下: ΚΦ 表示电压常量,下面给出了电气转速计算中使用的归 一化 ΚΦ : ...
- 基于STM32开发板实现传感数据采集及wifi上云
目录 前言 一.实验目的 二.实验环境 三.实验步骤 四.实验代码 五.实验结果 六.实验体会 前言 温度和湿度值是重要的物理参数,例如精密机械加工.实验室.温室大棚.粮库.重要活动场所.会议室.居住 ...
最新文章
- 写了个牛逼的日志切面,甩锅更方便了!
- oracle可视化工具IB,oracle小记:dba_data_files
- 沙滩鞋除臭法--针对常见户外沙滩鞋来讲
- android 地图服务开发 INSTALL_FAILED_MISSING_SHARED_LIBRARY 错误解决
- CDOJ1633 Video Game Combos [AC自动机+dp]
- oracle交流 提问,Oracle常见提问5(转)
- 服务器虚拟化win游戏,Win虚拟化之Windows Virtual PC 功能概述
- RegExp类型exec()方法的返回值说明
- C++ 处理输入输出错误
- 如何把本地yum源给其他机器使用_配置本地yum源以及第3方软件仓库的搭建
- 如何判断stdin的数据类型
- P3194 [HNOI2008]水平可见直线
- encodeURI和uncodeURIComponent的介绍
- java二维数组扫雷,Java 数组 之 二维数组 扫雷实例
- 【字体】编程常用字体推荐,微软,苹果,开源系统默认代码字体
- 数学建模论文题目优选专业题目128个
- python 整合excel_使用python将多个excel文件合并到同一个文件的方法
- ORACLE中的INTERVAL
- TimeShift QQ群组-欢迎各界友人加入喽
- 文墨绘学任何事物都是发展变化的
热门文章
- LinuX 硬盘分区细节
- IDEA 运行 Junit 测试用例报 !!! JUnit version 3.8 or later expected 错误
- python音频分析工具_Python对音频进行测试及频谱分析
- velocity模板技术生成word文档
- 一个很简单的淘宝优惠券搜索助手 大家看看有没有用吧 下载地址:http://pan.baidu.com/s/1skRHTDF
- mysql 创建日历表
- ​入行快30年了,你问我计算机有啥用,我还真的要想想
- 计算机中职专业课考试科目,中职教师资格证专业课包括哪些
- linux:文件操作(open、write/read、lseek、close)
- 数论概论 第五章 习题解答(下) (宋二娃的BLOG)