单电阻采样 基于单电阻采样的相电流重构算法 keil完整工程。 单电阻采样 f103的单电阻,完整工程,带文档,带硬件资料。 f3平台的单电阻完整工程,代码详细注释。 还有微芯的单电阻smo代码加文档 具体如截图请看下

一、系统概述

本文档基于提供的STM32F1单电阻采样方案代码(A062_STM32F1单电阻采样方案)及相关参考资料(单电阻FOC教程、500e算法解析等),详细解读系统的核心功能、硬件配置、软件架构及关键算法实现。该系统是一款基于STM32F1微控制器的永磁同步电机(PMSM)磁场定向控制(FOC)解决方案,采用单电阻电流采样技术,具有成本低、硬件结构简洁、控制精度高的特点,适用于中低端工业控制、家电电机驱动等场景。

系统核心目标是通过单电阻采样重构三相电流,结合SVPWM(空间矢量脉宽调制)、无感位置估计(SVC)、参数辨识等算法,实现电机的高精度速度和转矩控制。支持电机参数自动辨识、无感运行、启动定位等完整功能,硬件适配STM32F103系列芯片,软件基于HAL库开发,具有良好的可移植性和扩展性。

二、硬件配置与底层驱动

2.1 核心硬件参数

硬件模块 参数配置 功能说明
微控制器 STM32F103C8Tx 核心控制单元,主频72MHz(HSI倍频)
外部晶振 8MHz(HSI默认8MHz) 系统时钟源,经PLL倍频至72MHz
PWM模块 TIM1(高级定时器) 生成三相PWM波形,支持中心对齐模式、死区控制
采样电阻 0.000667Ω(参考硬件计算文件) 母线电流采样,配合运放放大30倍
ADC模块 ADC1(12位精度) 采样电阻电压、母线电压,支持注入式采样触发
DMA控制器 DMA1通道1/4/5 实现ADC采样数据、PWM占空比的DMA传输,降低CPU负载
电机参数 额定功率60kW,额定转速2300rpm,6对极 Rs=0.021Ω,Ld=0.00026H,Lq=0.00053H,φr=0.078Wb

2.2 底层驱动实现

2.2.1 时钟配置(SystemClock_Config)

系统采用HSI(内部8MHz)作为时钟源,经PLL倍频16倍后得到72MHz系统时钟(SYSCLK),AHB总线时钟为72MHz,APB1总线时钟36MHz(定时器时钟72MHz),APB2总线时钟72MHz。ADC时钟经分频6倍后为12MHz,确保采样精度。

关键代码片段:

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; // 8MHz/2 *16=64MHz(实际代码中为72MHz,需结合芯片手册调整)
2.2.2 PWM模块配置(MX_TIM1_Init)

TIM1配置为中心对齐模式3(COUNTERMODE_CENTERALIGNED3),PWM频率16kHz(周期=64000000/16000/2=2000),支持死区控制(死区时间8个时钟周期)。通道1-3用于输出三相PWM波形(U/V/W相),通道4用于触发ADC注入式采样。

通过DMA1通道5实现PWM占空比的批量更新(BURST模式),支持前半周期和后半周期占空比独立配置,为单电阻采样的移相策略提供硬件支持。

2.2.3 ADC模块配置(MX_ADC1_Init)

ADC1配置为扫描模式(SCANENABLE),非连续采样(CONTINUOUSConvMode=DISABLE),外部触发源为TIM3TRGO(常规采样)和TIM1CC4(注入采样)。常规通道采样母线电压(ADCCHANNEL3)和参考电压(ADCCHANNEL0),注入通道采样电阻电压(ADCCHANNEL_6),采样时间1.5个ADC时钟周期。

通过DMA1通道1将ADC采样数据传输至内存缓冲区,避免CPU中断等待,提升采样实时性。

2.2.4 GPIO配置
  • 输出引脚:PA8-PA10(TIM1CH1-CH3,U/V/W相上桥驱动),PB13-PB15(TIM1CH1N-CH3N,U/V/W相下桥驱动),LED指示灯(PA7)。
  • 输入引脚:PA1(方向控制Dir),PA2(状态反馈Sfb),PB12(PWM刹车信号pwm_ocBrk)。
  • 模拟引脚:PA0(Vsp采样),PA3(Udc母线电压采样),PA6(Iu电流采样)。

三、核心算法模块

3.1 单电阻电流采样与重构

单电阻采样是系统的核心硬件简化方案,通过在母线串联一个采样电阻,利用PWM周期内不同时刻的开关管状态,实现三相电流的重构。核心流程包括移相策略、采样点确定、电流重构三个步骤。

3.1.1 移相策略(参考单电阻FOC教程1.1节)

定义三相占空比为hig(最大)、mid(中间)、low(最小),计算delta1=mid-low,delta2=hig-mid,delta=hig-low。根据delta1、delta2与最小采样时间Tmin的关系,分为三种移相场景:

  • 三相接近(delta<2*Tmin):固定最大相占空比,左移中间相和最小相,增大delta1和delta2。
  • 一长两短(delta2
  • 两长一短(delta1

代码中通过DMA批量更新PWM占空比实现移相,关键函数:

HAL_TIM_DMABurst_MultiWriteStart(&htim1, TIM_DMABASE_CCR1, TIM_DMA_UPDATE, &test, TIM_DMABURSTLENGTH_3TRANSFERS, (2*3));
3.1.2 采样点确定(参考单电阻FOC教程1.3节)

采样点需避开开关管切换的暂态过程,考虑死区延迟和电流稳定时间:

  • 第一相采样延迟=死区时间(1us)+ 电流稳定时间(2us)。
  • 第二相采样无需考虑死区时间,仅需电流稳定时间(2us)。

ADC采样触发由TIM1_CH4比较匹配触发,采样点延迟通过调整比较寄存器值实现(64MHz PWM时钟下,1us对应64个计数单位)。

3.1.3 电流重构(参考单电阻FOC教程1.2节)

根据电压空间矢量所在扇区(0-5扇区),通过两次采样电阻电流计算三相电流。各扇区采样逻辑如下表:

扇区 占空比最大相 占空比居中相 占空比最小相 第一次采电流 第二次采电流
0 a b c -Ic Ia
1 b a c -Ic Ib
2 b c a -Ia Ib
3 c b a -Ia Ic
4 c a b -Ib Ic
5 a c b -Ib Ia

代码中通过Udm_GetMotorAdcRslts()函数读取ADC采样数据,结合扇区判断逻辑重构三相电流,核心公式:

\[ Ia + Ib + Ic = 0 \]

\[ 重构电流 = 采样电阻电流 \times 放大倍数 / 采样电阻值 \]

3.2 电机参数辨识(参考500e算法解析第1章)

系统支持电感(Ld/Lq)、电阻(Rs)、磁链(φr)、反电势的自动辨识,确保控制算法的适应性。

3.2.1 电感辨识

通过直流定位将电机转子固定在0°和90°位置,施加特定电压脉冲,采样电流上升沿和下降沿的变化率,计算线电感Lbc,进而推导dq轴电感:

\[ Lq = Lbc/2 \quad (0°位置) \]

\[ Ld = Lbc/2 \quad (90°位置) \]

辨识过程由状态机控制,包含转子定位、脉冲施加、电流采样、电感计算四个阶段,关键代码在getLdqisr()函数中实现。

3.2.2 电阻辨识

通过闭环控制将定子电流稳定在0.5倍额定电流,采样定子电压和电流,利用欧姆定律计算定子电阻:

\[ Rs = U / I \]

辨识过程中采用类积分控制器调节电流,避免电流过冲,采样512组数据求平均以降低误差,关键代码在RunCaseGetPar()函数中实现。

3.3 无感位置与速度估计(SVC,参考500e算法解析第2-3章)

系统采用滑模观测器(SMO)实现电机转子位置和速度的无感估计,核心流程包括电流估计、反电势估计、速度计算、角度积分。

3.3.1 电流估计

基于dq轴电机模型,结合采样电流和电压,估计dq轴电流:

\[ did = \frac{Ts}{Ld} (ud - Rs id + \omegae Lq i_q) \]

\[ diq = \frac{Ts}{Lq} (uq - Rs iq - \omegae (Ld id + \psir)) \]

代码中通过IsrSvcCtrl()函数实现电流估计,提前计算Ts/Ld、Rs*Ts/Ld等系数,降低实时计算量。

3.3.2 速度与位置估计

通过反电势估计值计算电机电角速度:

\[ \omegae \psir = \frac{u{q1} i{d2} - u{q2} i{d1}}{i{d2} - i{d1}} \]

\[ \omegae = \frac{\omegae \psir}{\psir} \]

电角度由角速度积分得到,通过gPmsmRotorPosEst.SvcRotorPos变量存储,右移16位后作为磁场定向控制的d轴位置参考。

3.4 磁场定向控制(FOC)

FOC控制的核心是将三相定子电流转换为dq旋转坐标系,通过电流环和速度环的双闭环控制,实现转矩和速度的解耦控制。

3.4.1 坐标变换
  • 克拉克变换(Clark):将三相电流(Ia/Ib/Ic)转换为两相静止坐标系电流(Iα/Iβ)。
  • 帕克变换(Park):将Iα/Iβ转换为两相旋转坐标系电流(Id/Iq),其中Id为直轴电流(磁场分量),Iq为交轴电流(转矩分量)。

代码中通过gIMTQ12结构体存储变换后的电流值,采用定点数运算(Q12格式)确保精度和实时性。

3.4.2 电流环控制

电流环采用并联式PI控制器,控制周期与PWM周期一致(16kHz),PI参数根据电机参数动态生成:

\[ kp = \frac{3L}{nTs} \]

\[ ki = \frac{3Rs}{nT_s} \]

其中n为控制系数(默认n=8),Ts为采样周期。PI控制器输出为dq轴电压参考(Ud/Uq),经反帕克变换和SVPWM调制后生成PWM占空比。

3.4.3 速度环控制

速度环采用PI控制器,控制周期2ms,输入为速度给定与估计值的偏差,输出为q轴电流参考(Iqref),限制在电机额定电流范围内。关键代码在speedpi()函数中实现,支持转矩模式和速度模式切换。

3.5 SVPWM调制(参考单电阻FOC教程2.4节、500e算法解析5.3节)

系统采用空间矢量脉宽调制,根据Ud/Uq电压参考,计算电压空间矢量所在扇区和作用时间,生成三相PWM占空比。

3.5.1 扇区判断

根据Iα/Iβ的正负和幅值关系,判断电压矢量所在扇区(0-5扇区)。

3.5.2 作用时间计算

根据伏秒平衡原理,计算相邻两个基本矢量和零矢量的作用时间:

\[ U{ref} \cdot Ts = Ux Tx + Uy Ty + U0 T0 \]

其中T0为零矢量作用时间,Tx/Ty为基本矢量作用时间。

3.5.3 占空比生成

根据扇区和作用时间,计算三相PWM的比较寄存器值,通过DMA批量更新至TIM1的CCR1-CCR3寄存器,实现PWM波形输出。

四、软件架构与中断管理

4.1 软件分层架构

层级 核心模块 功能说明
硬件抽象层 HAL库、GPIO/PWM/ADC/DMA驱动 底层硬件操作封装
驱动层 Msp_Driver.c、Motor.c 电机驱动、参数配置、底层接口适配
算法层 FOC控制、SVC观测器、参数辨识 坐标变换、PI控制、无感估计、参数计算
应用层 main.c、FuncMain.c 任务调度、模式切换、故障处理

4.2 中断管理

系统采用中断驱动架构,核心中断包括:

4.2.1 TIM1更新中断(TIM1_UP_IRQHandler)
  • 下溢时(计数下降):执行FOC控制(IsrFocCtrlHandle()),包括电流重构、坐标变换、PI控制、SVPWM占空比计算。
  • 周期更新时(计数上升):执行SVC观测器(IsrSvcCtrl()),包括电流估计、速度和位置计算。
4.2.2 ADC中断

ADC采样完成后触发DMA传输,将采样数据存储至缓冲区,无需CPU干预,采样数据包括母线电压、采样电阻电压等。

4.2.3 系统滴答中断(SysTick_Handler)

提供1ms定时基准,用于任务调度、超时判断等。

五、调试与校准功能

5.1 零漂校正

ADC采样存在零漂误差,系统通过采样零矢量状态下的电阻电压,计算零漂补偿值,在电流重构时减去该值,提高采样精度。

5.2 死区补偿

由于开关管的死区时间会导致电压失真,系统根据电流方向和PWM占空比,动态调整占空比补偿值,抵消死区影响。

5.3 故障保护

支持过流、过压、欠压、电机堵转等故障检测,故障发生时立即关闭PWM输出(HALTIMPWM_Stop()),点亮故障指示灯,确保系统安全。

六、关键问题与解决方案

6.1 单电阻采样毛刺问题

现象:扇区切换时电流波形出现毛刺。

解决方案:将电流重构的扇区变量由secter改为secter_post,延迟扇区切换判断,避免扇区误判导致的电流计算错误;优化采样点延迟时间,确保电流稳定后采样。

6.2 无感启动困难

现象:电机启动时抖动或无法启动。

解决方案:采用短时脉冲定位法,通过施加特定序列的电压脉冲,检测电流响应以确定转子初始位置;启动阶段采用开环速度爬升,待转速达到一定阈值(如2Hz)后切换至无感闭环控制。

6.3 参数辨识精度不足

现象:辨识的Ld/Lq/Rs与实际电机参数偏差较大。

解决方案:增加采样数据量(如采样1024组数据),采用滑动平均滤波;优化电压脉冲的幅值和宽度,确保电流线性变化;辨识过程中关闭电流环和速度环,避免干扰。

七、总结与扩展建议

7.1 系统特点

  1. 采用单电阻采样方案,降低硬件成本和复杂度,同时通过移相策略和电流重构算法保证采样精度。
  2. 基于STM32F1 HAL库开发,代码模块化程度高,可移植性强。
  3. 集成参数自动辨识、无感位置估计、FOC闭环控制等完整功能,适用于多种PMSM电机。
  4. 采用DMA传输和中断驱动架构,降低CPU负载,确保控制实时性。

7.2 扩展建议

  1. 增加CAN通信接口,支持上位机参数配置和状态监控。
  2. 优化滑模观测器参数,提升低速和零速时的位置估计精度。
  3. 增加能量回馈功能,适用于电动车辆等场景。
  4. 支持多电机控制,通过定时器和DMA通道扩展实现。
  5. 增加温度采样功能,实现电机过热保护和参数温度补偿。

本系统通过软硬件协同优化,实现了低成本、高精度的PMSM电机控制,可广泛应用于工业自动化、家电、新能源汽车等领域,具有较高的工程实用价值。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐