STM32G4入门与电机控制实战 课件 第7、8章 基于 P-NUCLEO-IHM03 套件的电机入门控制实例、基于 P-NUCLEO-IHM03 套件的有感电机控制案例_第1页
STM32G4入门与电机控制实战 课件 第7、8章 基于 P-NUCLEO-IHM03 套件的电机入门控制实例、基于 P-NUCLEO-IHM03 套件的有感电机控制案例_第2页
STM32G4入门与电机控制实战 课件 第7、8章 基于 P-NUCLEO-IHM03 套件的电机入门控制实例、基于 P-NUCLEO-IHM03 套件的有感电机控制案例_第3页
STM32G4入门与电机控制实战 课件 第7、8章 基于 P-NUCLEO-IHM03 套件的电机入门控制实例、基于 P-NUCLEO-IHM03 套件的有感电机控制案例_第4页
STM32G4入门与电机控制实战 课件 第7、8章 基于 P-NUCLEO-IHM03 套件的电机入门控制实例、基于 P-NUCLEO-IHM03 套件的有感电机控制案例_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章

基于P-NUCLEO-IHM03套件的电机入门控制无感FOC快速控制实例1234无感方波控制实例无感速度模式控制实例旋钮控制电机运行速度实例5故障处理及恢复实例6API函数应用实例概述本章共分为6个小节,每个小节即一个实例,每个实例都配有详细的步骤和解释,带大家逐步学习基于P-NUCLEO-IHM03套件的电机入门控制。具体内容包括:无感FOC快速控制实例、无感方波控制实例、无感速度模式控制实例、旋钮控制电机运行速度实例、故障处理及恢复实例和API函数应用实例。无感FOC快速控制实例01实验要求(1)实验目标①初步掌握MC-SDKV5.4的基本操作②快速实现电机的转动控制(2)实验条件①硬件平台:P-NUCLEO-IHM03套件②软件平台:STMotorControlSDK5.4STM32CubeMXSTM32CubeIDE实验步骤参考视频:/zh/evaluation-tools/p-nucleo-ihm03.html图7-1参考视频页面实验步骤①首先打开软件STMotorControlSDK5.4,点击NewProject,在Control栏中选择NUCLEO-G431RB板图7-3驱动板型号选择在Power栏中选择X-NUCLEO-IHM16M13sh驱动板Motor栏中选择GimBalGBM2804H-100T,配置完成后点击确定,弹出电机参数导入工程的信息提示。图7-2开发板型号选择图7-4电机型号选择图7-5电机参数导入工程信息提示实验步骤图7-6MotorControlWorkbench主界面②工程生成点击“SpeedSensing”,打开如图7-7所示的速度位置反馈管理界面,其中“Sensorselection”下拉框为“Sensor-less(Observer+PLL)”,可以看出本实例是采用无感FOC方式来实现永磁同步电机的控制。图7-7速度位置反馈管理界面实验步骤在图7-9所示界面处视频中选用IAREWARMIDE,此处建议选用STSTM32CubeIDE或者KeilMDK-ARM。选择后点击GENERATE。图7-8工程命名保存界面图7-9工程生成配置界面点击STMotorControlWorkbench主界面中的菜单Tools再点击Generation后输入工程名字进行保存。实验步骤完成后点击RUNSTM32CubeIDE按钮即可打开STM32CubeMX。图7-10工程生成完成界面图7-11STM32CubeMX主界面打开STM32CubeMX后如图7-11所示,进入ProjectManager界面选择IDE后点击GENERATECODE实验步骤图7-12代码生成成功提示图7-15发布配置界面图7-13选择工作空间目录图7-14编译运行界面代码生成成功后,点击OpenProject,再点击Launch,进人STM32CubeIDE后找到main.c文件,如图7-14所示,点击编译按钮,待编译完成后点击运行按钮即可,发布配置界面如图7-15所示。实验步骤然后打开Workbench,按图7-16所示进行设备连接,然后进入Advanced界面,点击StartMotor即转动电机,可在Monitor界面观测到实时速度。图7-16电机控制监测界面无感方波控制实例02实验要求(1)实验目标①了解电机的基本结构,熟悉BLDCM方波控制的基本原理。②基于BLDCM方波控制的原理,结合前面学习的STM32G4的知识,通过MotorControlWorkbench5.4.8软件包中自带的6-StepsspeedregulationusingtheP-NUCLEO-IHM03kit的示例程序,基于P-NUCLEO-IHM03套件实现无刷直流电机六步方波控制。(2)实验条件①硬件平台:P-NUCLEO-IHM03套件②软件平台:STMotorControlSDK5.4STM32CubeMXKeil5(5.33版本及以上)实验步骤(3)X-NUCLEO-IHM16M1板的硬件设置为了运行示例程序,X-NUCLEO-IHM16M1板应做如下设置:•将跳线J5和J6设置在打开位置;•将跳线J2设置在1-2位置;•将跳线J3设置在2-3位置;•可选择关闭焊桥JP4和JP7,因为它们仅对电流检测起作用,本例中并未涉及。(4)实验步骤①打开示例工程打开MotorControlWorkbench5.4.8软件,如图7-17所示,在软件自带例程里找到Six-stepdrivewithP-NUCLEO-IHM003kit并双击打开,打开时会跳出readme.txt文件,同时弹出如图7-18所示的提示窗口,请仔细查看readme.txt文件后点击“确定”按钮以打开工程。图7-17示例例程选择图7-18提示窗口实验步骤②保存工程将Sixstep_p-nucleo-ihm003.stmcx工程保存到另外一个空的文件夹下。请注意:请勿更改Sixstep_p-nucleo-ihm003.stmcx的名称,否则示例将无法正常运行或编译。③更改extras.wb_def文件用记事本的方式打开extras.wb_def文件,如图7-19所示,用来更改用户I/F。修改SERIAL_COMMUNICATION键的值为false,以便在CLI中使用(默认情况下,它是STMCMonitor用户界面,此键值为true)。图7-19

extras.wb_def文件更改④选择对应的软件版本参数生成电机工程单击“Tools”—>“Generation”菜单项。这将弹出如图7-20所示的工程生成窗口,允许用户选择参数:•STM32CubeMX选择5.3.0或更高版本;•TargetToolchain选择KeilMDK-ARMV5或IAREWARM版本;•FirewarePackageVersion选择STM32FWV1.1.0或更高版本;•选中DriveType下方的HAL-HardwareAbstractionLayer复选框。然后,点击“GENERATE”按钮生成工程。图7-20工程生成实验步骤⑤打开STM32CubeMX文件并生成Keil文件如图7-21所示,点击“GENERATECODE”生成Keil文件。⑥打开Keil文件编译并下载至单片机中如图7-22所示,打开Keil软件后,点击①框中的“OptionsforTargets…”,选择ST-LinkDebugger,点击②框中的“Settings”,打开如图7-23所示配置窗口,添加Flsah,点击“确定”后,再点击图7-22中③框中的“Translate”和④框中的“Download”烧录程序至单片机中。按下板上的黑色按钮重置MCU板,运行示例,再按下板上的蓝色按钮启动和停止电机,实现了无刷直流电机的六步无感控制。图7-21生成Keil文件图7-23配置窗口图7-22程序烧录界面无感速度模式控制实例03实验要求(1)实验目标①初步掌握MC-SDKV5.4的基本操作②实现电机的无传感运行,电机从开环启动到闭环运行③使用API实现电机变速运行,转速在300RPM至600RPM之间进行切换(2)实验条件①硬件平台:P-NUCLEO-IHM03套件②软件平台:STMotorControlSDK5.4STM32CubeMXSTM32CubeIDE实验步骤参考视频:/coursedetail?id=b69fe93850df41cda9906991e5ec100d①Workbench创建工程与7.1小节电机快速控制实例类似,新建一个工程,按图7-24所示选择Control,Power与Motor,点击OK。图7-24新建工程因为参数已经配置完成,所以直接点击“保存”按钮进行保存。保存完成后点击“工程生成”按钮生成代码,如图7-25所示,点击“GENERATE”,完成后打开如图7-26所示的工程生成窗口,点击“RUNSTM32CubeIDE”按钮打开STM32CubeMX。图7-25工程生成图7-26工程生成完成界面实验步骤②如图7-27所示,在ProjectManager界面选择STM32CubeIDE后点击“GENERATECODE”。连接设备,注意电源也要连接。代码生成成功后,点击“OpenProject”,再点击“Launch”,进入STM32CubeIDE后找到main.c文件,如图7-28所示,点击“Debug”与“Run”,编译成功。图7-27

ProjectManager界面图7-28编译运行界面然后打开Workbench,按图7-29所示连接设备,然后进入Advanced界面,点击“StartMotor”即可转动电机,可在Monitor界面观测到实时速度。图7-29电机控制监测界面实验步骤③在图7.2-7所示界面中输入数值并点击Execramp即可调节电机速度。图7-30电机速度控制④上面使用Workbench对电机进行简单调速,还可以通过代码调用API对电机进行精确调速,下面介绍如何调用API函数使得电机在300rpm与600rpm之间进行均匀变速。本实例中使用的电机控制API函数包括:MC_ProgramSpeedRampMotor1();MC_StartMotor1();MC_StopMotor1();具体的API函数调用流程如下:首先,如图7-31所示,打开main.c文件,在/*USERCODEBEGIN0*/与/*USERCODEEND0*/之间添加代码。图7-31用户代码添加实验步骤然后按照图7-32所示找到int

main(void)函数,在while(1)函数中调用HandsOn1()。(注意:HandsOn1();请放置在/*USERCODEEND3*/之前)图7-32

HandsOn1()函数调用然后按照图7-33所示点击“Debug”按钮,若弹出图示窗口点击“Switch”,然后点击“Run”按钮就可以看到电机变速旋转。图7-33工程编译运行实验步骤如果想要更准确的观测到电机的速度变化,可以打开MotorControlWorkbench,点击电机监测界面,如图7-34所示,成功连接电机后打开界面中的示波器工具。图7-34电机监测界面图7-35电机运行速度曲线程序烧录到单片机后,按下开发板的黑色按钮(即复位键),可以观测到电机的转速变化,电机会在转速变化五次后停止,显示结果如图7-35所示。旋钮控制电机运行速度实例04实验要求及条件(1)实验目标①学会使用STM32CubeMX修改已有的电机工程②学会ADC在电机工程中的使用③学习使用配置旋钮等硬件对电机进行调速(2)实验条件①硬件平台:P-NUCLEO-IHM03套件②软件平台:STMotorControlSDK5.4STM32CubeMXSTM32CubeIDE实验步骤①首先在7.3无感速度模式控制实例的基础上,使用STM32CubeMX打开已有的电机工程,进入到如图7-36所示的主界面,为了和7.3无感速度模式控制实例进行区分,可将工程另行保存。按照图示流程,点击“Analog”选取ADC1进行ADC配置,将ADC1IN8配置为IN8Single-ended,然后右键选择PC2管脚,将其配置为ADC1_IN8,此处管脚配置是为了后续将其作为旋钮的ADC进行使用,管脚配置完成后点击“GENERATECODE”重新生成代码即可。图7-36STM32CubeMX主界面实验步骤②生成代码后,点击“OpenProject”,再点击“Launch”,进入STM32CubeIDE,打开工程文件,可以看到7.3小节实例的代码依然保留,通过STM32CubeMX只是配置了管脚,并不影响代码文件。下面介绍如何在工程中使用ADC实现旋钮调速。本实例中用到的API函数包括:RCM_GetUserConvState();RCM_GetUserConv();RCM_RequestUserConv();首先,如图7-37所示,在7.3小节实例函数定义后加入的代码。图7-37用户代码添加实验步骤然后,如图7-38所示,在main函数处调用初始化函数HandsOn2_Init()以及HandsOn2()。注意:①HandsOn2();应放置在/*USERCODEENDWHILE*/之前(注释掉7.3小节实验调用的HandsOn1();)②HandsOn2_Init();建议放置在/*USERCODEBEGIN2*/

与/*USERCODEEND2*/之间图7-38初始化函数调用③代码添加完成后点击“DEBUG”与“RUN”。当代码烧录至单片机之后,按下黑色按钮即可开始运行,可以通过Workbench来观测此时电机的运行状态。打开Workbench连接电机后按照之前的方法进入监测界面,如图7-39所示左侧是电机实际的转速,右侧是电机设定的转速。图7-39电机监测界面实验步骤可以通过旋转蓝色旋钮来控制电机在300rpm至800rpm的范围内运行。电机运行速度曲线图如图7-40所示。图7-40电机运行速度曲线转速控制旋钮示意故障处理及恢复实例05实验要求及条件(1)实验目标①学习使用STM32CubeMX生成Timer初始化②学会如何得到电机状态③学会如何清除报错状态,让电机重新运行(2)实验条件①硬件平台:P-NUCLEO-IHM03套件②软件平台:STMotorControlSDK5.4STM32CubeMXSTM32CubeIDE实验步骤①与7.4小节实例类似,用STM32CubeMX打开之前的工程文件,按照图7-41所示的流程初始化Timer,在点击“Timers”后选择TIM3,将ClockSource配置为InternalClock作为高频计数,然后将CounterPeriod配置为0xFFFF即65535即可,此时设定的最大溢出时间约为385.5us。图7-41Timer初始化配置界面实验步骤②时钟配置完成后,点击“GENERATECODE”生成代码,再点击“OpenProject”和“Launch”,进入STM32CubeIDE,打开工程文件,按照图7-42所示选择打开stm32g4xx_mc_it.c文件,在void

ADC1_2_IRQHandler(void)函数代码中的/*USERCODEBEGINADC1_2_IRQn0*/和/*USERCODEENDADC1_2_IRQn0*/之间以及/*USERCODEBEGINADC1_2_IRQn1*/和/*USERCODEENDADC1_2_IRQn1*/之间添加两段代码。

volatile

static

uint16_tFOC_Cycle;

volatile

static

uint32_tFOC_Time; TIM3->CNT=0; TIM3->CR1|=0x01;

TIM3->CR1&=0xFFFE;FOC_Cycle=TIM3->CNT;FOC_Time=(uint32_t)FOC_Cycle/170;图7-42代码添加界面实验步骤③再打开main.c文件,与7.4小节实例一样,如图7-43所示在定义的函数后添加代码。然后,如图7-44所示,在main函数中调用函数HandsOn3()(注释掉HandsOn2();与HandsOn2_Init();)然后在main函数中调用即可(注释掉HandsOn2();与HandsOn2_Init();)//HandsOn3FaultClear//static

uint16_tState_Mark;static

uint16_tFault_Mark;void

HandsOn3(void){

//GetMotorControlState// State_Mark=MC_GetSTMStateMotor1();

//GetFaultstate// Fault_Mark=MC_GetOccurredFaultsMotor1();

if(Fault_Mark!=MC_NO_FAULTS) {

HAL_Delay(2000);

MC_AcknowledgeFaultMotor1();

MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(),1000); }

if((State_Mark==IDLE)&&(Fault_Mark==MC_NO_FAULTS)) {

MC_StartMotor1(); }}图7-43HandsOn3函数代码添加界面图7-44HandsOn3函数调用界面实验步骤④代码添加完毕后,点击“编译”与“运行”,当程序烧录到单片机上之后,电机会按照设定的转速转动,此时对电机进行堵转,功率板上的三相指示灯会熄灭,当结束堵转后2秒(此处2秒是为了展示电机清除了错误状态而特意设定,日常应用时电机会立即清除状态并启动),电机会自动清除Fault的状态并且重新开始转动,功率板上的三相指示灯会再次亮起来。可以同样通过Workbench对电机运行状态进行监测,打开Workbench并连接电机后进入监测界面,当结束堵转后,会看到图7-45所示的状态为Faultover并且显示Fault为Speedfeedback。图7-45电机故障报错实验步骤当结束堵转2秒后电机会清除错误状态并开始启动,如图7-46所示,此时可以看到电机状态为Start并且转速为0。图7-46电机清除故障并启动图7-47电机转速恢复当电机正常启动后,如图7-47所示,可以看到电机状态会变为Run,并且转速与堵转前的转速保持一致。API函数应用实例06实验要求(1)实验目标①掌握MC-SDKV5.4的基本操作②使用API函数实现对电机的多种控制方式,熟悉API函数库(2)实验条件①硬件平台:P-NUCLEO-IHM03套件②软件平台:STMotorControlSDK5.4STM32CubeMXSTM32CubeIDE或Keil5(5.33版本及以上)API函数介绍如图7-48所示,API函数位于MC-SDKV5.4中的电机应用层,处于用户层与电机库之间,一般初级的电机应用操作利用API函数即可完成,基于电机库,便于用户调用,更像是行为描述操作。例如,在7.3无感速度模式控制实例中用到的MC_ProgramSpeedRampMotor1()、MC_StartMotor1()、MC_StopMotor1()都是API函数,他们分别是用来对电机进行调速、启动和停止操作的。图7-48API函数在MC-SDKV5.4中的位置API函数介绍表3-1展示了可以直接使用的API函数的名称、参量、功能及返回值。下面利用表3-1中所示的部分函数作为示例,来展示API函数调用的具体操作,帮助读者在7.3的基础上更深入地了解API函数库中其他函数的功能。实验步骤参考视频:/coursedetail?id=e25dbe52d37b4e278c819ff6b61fe47e①Workbench创建工程与7.1小节电机快速控制实例类似,新建一个工程,按图7.3-2所示选择Control,Power与Motor,点击OK。图7-49新建工程因为参数已经配置完成,所以直接点击“保存”按钮进行保存。保存完成后点击“编译”按钮,如图7-50所示,点击“GENERATE”,完成后打开如图7-51所示窗口,点击“RUNSTM32CubeIDE”按钮打开STM32CubeMX。图7-51工程生成完成界面图7-50工程生成实验步骤②如图7-52所示,在ProjectManager界面,Toolchain/IDE选择STM32CubeIDE,FirewarePackageNameandVersion选择STM32CubeFW_G4V1.4.0,然后点击“GENERATECODE”。连接设备,注意电源也要连接。代码生成成功后,点击“OpenProject”,再点击“Launch”,进入STM32CubeIDE后找到main.c文件。图7-52ProjectManager界面实验步骤③函数示例1:MC_ProgramSpeedRampMotor17.3小节中我们学习了如何对电机进行调速,使用的是MC_ProgramSpeedRampMotor1()函数,而这个函数不仅可以控制电机运行的速度,改变第一个值的正负还能控制电机正反转。打开main.c文件,如图7-53所示,在用户代码区2添加代码。图7-53正向转动代码若要电机反向转动,如图7-54所示,将第一个参数由300/6改为-300/6,即可实现电机以300rpm反向转动。图7-53正向转动代码若要电机反向转动,如图7-54所示,将第一个参数由300/6改为-300/6,即可实现电机以300rpm反向转动。图7-54反向转动代码实验步骤然后按照图7-55所示点击“编译”按钮,若弹出图示窗口点击“switch”,然后点击“运行”按钮将程序下载到MCU当中,按下复位键后,如图7-56所示就可以看到电机以300rpm的速度分别正转和反转。图7-55工程编译运行图7-56示例1结果Workbench展示实验步骤④函数示例2:MC_ProgramTorqueRampMotor1这个函数的作用是使电机运行在力矩模式,第一个参数为力矩的正比例函数,第二个参数为运行的时间,其中第一个参数(假设为DI)的计算公式如下:(7.6-1)式中,参数如下:打开main.c文件,如图7-57所示,在用户代码区2添加代码。图7-57力矩模式代码同函数示例1中按照图7-55所示点击“编译”按钮,若弹出图示窗口点击“Switch”,然后点击“运行”按钮将程序下载到MCU当中,按下开发板上的复位键后,如图7-58所示,就可以看到电机以力矩模式转动,在Workbench界面可以观测转矩的大小。图7-58Workbench观测转矩实验步骤⑤函数示例3:MC_GetMecSpeedAverageMotor1、MC_GetIqdrefMotor1这个函数可以得到当前电机的运行速度,并且得到当前Iq,Id的参考数据(速度返回时是以0.1Hz作为单位返回,若要转换为rpm需要对结果*6),由于实验的结果需要调试,这里推荐使用Keil来进行代码的添加,以便后续的变量观测,这里展示使用Keil编写的实验过程,有兴趣的读者可自行学习STM32CubeIDE的Debug功能并进行实验。打开main.c文件,如图7-59所示,在用户代码区2添加代码,使电机在300rpm状态下运动。图7-59正向转动代码如图7-60所示,在while(1)循环中添加代码,不断读取电机运行速度和Iq,Id的参考数据:图7-60电机运行参数获取代码实验步骤如图7-61所示,完成代码添加之后将程序编译并烧录到MCU上,无误后按下开发板上的reset按键,电机开始旋转,之后进入Keil的debug环节中。图7-61编译与烧录如图7-62所示,在debug界面找到要观测的变量:Speed_RPM,Iqd_Ref_Value,Iqd_Real_Value,选中后右键将他们分别加入到watch1中,然后点击“运行”按钮,观察电机旋转的过程中三个变量的值。图7-62添加观测变量并运行实验步骤观测结果如图7-63所示。图7-63观测结果感谢聆听第八章

基于P-NUCLEO-IHM03套件的有感电机控制案例无刷直流电机的有感方波控制案例12永磁同步电机的有感FOC控制案例概述本章基于P-NUCLEO-IHM03套件、57SW01无刷直流电机和ShinanoLA052-080E3NL1永磁同步电机,进行无刷直流电机和永磁同步电机的有感驱动实践。

共分为2个小节,每个小节为一个典型案例,每个案例都配有详细的步骤,带大家实现电机的进阶控制。具体内容包括:无刷直流电机的有感方波控制案例和永磁同步电机的有感FOC控制案例。无刷直流电机的有感方波控制案例01实验目标及条件(1)实验目标①了解电机的基本结构,熟悉BLDCM方波控制的基本原理。②基于BLDCM方波控制原理,结合前面学习的STM32G4的知识,实现对无刷直流电机的有感控制,利用开发板上的按钮实现电机的正反转,并且通过电位器来实现电机的调速功能。(2)实验条件①硬件平台:P-NUCLEO-IHM03套件、57SW01无刷直流电机②软件平台:STMotorControlSDK5.4STM32CubeMX(6.1.1版本及以上)Keil5(5.33版本及以上)57SW01无刷直流电机简介本节采用安装了霍尔传感器的57SW01无刷直流电机来进行案例搭建。电机具体参数如表8-1所示,接线颜色对应端子如表8-2所示。表8-157SW01电机具体参数表8-257SW01电机接线颜色对应端子说明参数数值相数3额定电压24V额定转速4000rpm额定转矩0.11Nm额定功率50W最大转矩0.35Nm转矩系数0.08Nm/A相电阻2.7Ω转动惯量7.5Kg.mm2长度56mm重量0.5KgUVW+5VHALLAHALLBHALLCGnd蓝白黄红蓝白黄黑控制信号以及端口属性选择本节采用安装了霍尔传感器的57SW01无刷直流电机来进行案例搭建。根据BLDCM六步方波控制原理,实现BLDCM的正反转及调速需要用到的信号有:1)INU、INV、INW:用于输出PWM波形2)ENU、ENV、ENW:使能STSPIN830芯片3)H1、H2、H3:HALL传感器信号接口4)ADC采样端口及按钮表8-3BLDCM实现正反转及调速用到的资源列表需要用到的信号对应MCU引脚端口属性INUPA8TIM1_CH1INVPA9TIM1_CH2INWPA10TIM1_CH3ENUPB13GPIO-OUTPUTENVPB14GPIO-OUTPUTENWPB15GPIO-OUTPUTH1PA15GPIO-INPUTH2PB3GPIO-INPUTH3PB10GPIO-INPUT按钮PC13GPIO-EXTI3电位器采样PC2ADC1_IN8对应MCU引脚以及端口属性如表8-3所示:实验工程配置步骤一:创建新项目在STM32CubeMX中,有NUCLEO-G431RB工程模板,新建一个STM32CubeMX工程,芯片型号为STM32G431RBTX,如图8-1所示,打开STM32CubeMX软件,点击“ACCESSTOMCUSELECTOR”建立新工程。如图8-2所示,在BoardSelector页下的①号框中搜索NUCLEO-G431RB找到NUCLEO-G431RB工程模板,双击②加载模板。图8-1新建工程,选择MCU图8-2选择工程模板实验工程配置打开如图8-3所示的工程初始界面,可以看到PC13、PA2、PA3、PA5以及系统时钟已经配置好了,PA2、PA3是与电脑通讯的串口。图8-3工程初始界面实验工程配置步骤二:端口配置配置需要使用的端口,如图8-4所示,右键点击端口选择“EnterUserLabel”可以进行重命名。图8-4端口配置图8-5配置ADC1①如图8-5所示,选择ADC1的IN8并设置采样时间。实验工程配置②如图8-6所示,TIM1的Channel1选择为PWMGenerationCH1、Channel2选择为PWMGenerationCH2、Channel3选择为PWMGenerationCH3,点击NVICSettings页,如图8-7所示,使能TIM1定时器更新中断。因为配置定时器TIM1的PWM输出为中心对称模式,预分频系数为0,计数周期为8500,RepetitionCounter为1,PWM频率的计算公式为:图8-6配置TIM1图8-7NVIC配置中断频率等于PWM频率,根据式(8.1-1),可以计算得出PWM频率为10k。实验工程配置如图8-8所示,系统时钟使用默认配置为170MHz。图8-8系统时钟配置实验工程配置步骤三:生成工程代码如图8-9所示,点击“GENERATECODE”按钮生成工程代码。图8-9生成工程代码软件设计打开Keil软件,根据BLDCM六步方波控制原理进行编程。1)在main.c中定义需要的变量,具体包括:ADC采集值:adc_value启动状态:start_state速度参考值:speed_ref速度实际值:speed_relPWM值:pwm_value启动次数:start_count如图8-10所示,打开main.c文件,在/*USERCODEBEGIN0*/与/*USERCODEEND0*/之间添加变量定义代码。图8-10变量定义软件设计②转速给定程序如图8-13所示,在上述代码之后继续添加转速给定的代码。图8-13转速给定程序代码4)在stm32g4xx_it.c中定义电机控制相关变量,具体包括:PWM值:pwm_value霍尔传感器状态:HALL霍尔传感器换相前的状态:HALL_old速度实际值:speed_rel定时器中断次数:Interrupt_count图8-14电机控制相关变量定义如图8-14所示,打开stm32g4xx_it.c文件,在/*USERCODEBEGIN0*/与/*USERCODEEND0*/之间添加变量定义代码。软件设计5)在stm32g4xx_it.c中添加电机控制函数根据霍尔传感器反映的转子位置,分别使能和关闭对应的相,并通过定时器的CCR寄存器设置占空比。如图8-15所示,在上述代码之后继续添加电机控制函数代码。图8-15电机控制函数代码软件设计6)在定时器中断函数中编写电机控制程序①HALL获取如图8-16所示,在/*USERCODEBEGINTIM1_UP_TIM16_IRQn1*/与/*USERCODEENDTIM1_UP_TIM16_IRQn1*/之间添加HALL获取的代码。②计算电机转速如图8-17所示,在上述代码之后继续添加电机转速获取的代码。图8-16HALL获取代码图8-17电机转速获取代码软件设计③转速闭环如图8-18所示,打开stm32g4xx_it.c文件,在/*USERCODEBEGIN0*/与/*USERCODEEND0*/之间继续添加电机转速闭环控制的变量定义代码。如图8-19所示,在电机转速获取的代码之后继续添加转速闭环控制代码。图8-18转速闭环控制变量定义代码图8-19转速闭环控制代码软件设计7)烧录程序如图8-20所示,点击①框中的“OptionsforTargets…”,选择ST-LinkDebugger,点击②框中的“Settings”,打开如图8-21所示配置窗口,添加Flash,点击“确定”后,再点击图8-20中③框中的“Translate”和④框中的“Download”烧录程序至单片机中。图8-20程序烧录界面图8-21配置窗口实验结果烧录程序后按下黑色复位按键,然后按下蓝色按键,可以看到电机旋转起来,这时电机在六步方波控制模式下运行,如图8-22所示,可以通过STMStudio来观察波形。在如图8-23所示的区域右键点击import,选择观测的烧录程序和变量,来对电机的速度进行观测。图8-22STMStudio变量监测图8-23变量导入实验结果点击图8-23右边的省略号,选择工程所在文件夹中的axf烧录文件,如图8-24所示,会出现程序中的变量。

结果需要观测的变量为speed_rel,选择后点击右边的“import”把该变量加入到观察列表。之后将变量送到VarView1中,右键点击“Sendto”,点击“VarView1”,点击右上角的绿色“StartRecordingSession”按键。Speed_rel是电机实际转速,转速波形如图8-25所示。图8-24烧录文件选择图8-25电机转速监测02永磁同步电机的有感FOC控制案例实验目标及条件(1)实验目标①了解电机的基本结构,熟悉永磁同步电机矢量控制的基本原理。②基于永磁同步电机矢量控制原理,结合前面学习的STM32G4知识,位置检测采用光电编码器,快速实现永磁同步电机的有感FOC转动控制。③基于永磁同步电机矢量控制原理,结合前面学习的STM32G4知识,位置检测采用霍尔传感器,实现对永磁同步电机的转速电流双闭环控制,利用按钮进行电机运行模式的转换,并且通过电位器来调节电机的转速。(2)实验条件①硬件平台:P-NUCLEO-IHM03套件、ShinanoLA052-080E3NL1永磁同步电机②软件平台:STMotorControlSDK5.4STM32CubeMX(6.1.1版本及以上)Keil5(5.33版本及以上)ShinanoLA052-080E3NL1永磁同步电机简介本节采用安装了霍尔传感器和光电编码器的ShinanoLA052-080E3NL1永磁同步电机来进行案例搭建。具体参数如表8-4所示,传感器参数如表8-5所示。表8-4ShinanoLA052-080E3NL1电机具体参数表8-5ShinanoLA052-080E3NL1电机传感器参数参数数值相数3额定电压24V额定转速3000rpm额定转矩0.255Nm额定功率80W最大转矩0.765Nm转矩系数0.059Nm/A相电阻6.2Ω转动惯量11.7Kg.mm2长度69.6mm重量0.6Kg类型输出电路分辨率通道数电源供应工作电流输出电压相位偏差频率响应工作温度范围P/R

V-DCmAV-DC

kHz

霍尔传感器集电极开路—C1,C2,C35±5%40max.14.4min.(Isink=15mAmax.)——0℃~60℃(编码器内部温度)光电编码器TTL兼容200,400A,B5±5%50max.VOH=2.4min.VOL=0.4max.(Isink=3.2mA)a,b,c,d=90°±45°20min.有感FOC控制过程1)测量三相定子电流。对于具有平衡三相绕组的电机,只需测量两个电流即可,第三个电流可使用

公式计算得出。2)将三相电流转换到静止双轴系统。该转换通过测量的

值提供

变量。从定子的角度来看,值

是随时间变化的正交电流值。3)测量在控制环最后一次迭代时的变换角度,通过该角度将静止双轴坐标系转换为旋转坐标系,以对准转子磁通。该转换将

变换为

,值

是变换到旋转坐标系的正交电流。对于稳态条件,

恒定。电流参考值的说明如下::调节磁通:控制转矩4)将误差信号馈入到PI控制器。电流控制器的输出提供和,它们是将施加到电机上的电压向量。5)新的变换角度通过编码器脉冲输入测得。这一新角度将指导FOC算法确定放置下一个电压向量的位置。有感FOC控制过程6)使用新的角度将来自PI控制器的和输出值进行旋转坐标系到静止双轴坐标系的变换,得到正交电压值和。7)和值用于计算生成所需电压向量所用的全新PWM占空比值。8)在每个PWM周期后都会计算机械速度()。图8-26PMSM有传感器FOC的框图

图8-27PMSM有传感器FOC流程图PMSM的位置检测

获取确切的转子位置对于FOC正常工作至关重要。增量式光学编码器提供两个彼此正交的脉冲串,如图8-29和8-30所示。一些编码器具有索引脉冲,这有助于在空间上明确确切的转子位置。如果脉冲串A超前脉冲串B,则电机将沿一个方向旋转,如果脉冲串B超前脉冲串A,则电机将沿相反方向旋转。编码器脉冲数越多,位置测量精度就越高。图8-29特定旋转方向的编码器相位信号和索引脉冲图8-30相反旋转方向的编码器相位信号和索引脉冲1)特定旋转方向的编码器相位信号和索引脉冲2)相反旋转方向的编码器相位信号和索引脉冲控制信号以及端口属性选择

PMSM矢量控制需要ADC采集端口来采集下桥臂串联电阻的电压来计算电流。需要用到的信号有:1)INU、INV、INW:用于输出PWM波形2)ENU、ENV、ENW:使能STSPIN830芯片3)HALL1、HALL2、HALL3:HALL传感器信号接口4)Curr_fdbk1、Curr_fdbk2、Curr_fdbk3:ADC采样端口5)电位器采样端口及按钮表8-6实现FOC控制用到的MCU引脚表参数需要用到的信号对应MCU引脚端口属性INUPA8TIM1_CH1INVPA9TIM1_CH2INWPA10TIM1_CH3ENUPB13GPIO-OUTPUTENVPB14GPIO-OUTPUTENWPB15GPIO-OUTPUTHALL1PA15TIM2_CH1HALL2PB3TIM2_CH2HALL3PB10TIM2_CH3Curr_fdbk1PA1ADC1_IN2Curr_fdbk2PB1ADC1_IN12Curr_fdbk3PB0ADC1_IN15按钮PC13GPIO-EXTI3电位器采样PC2ADC1_IN8永磁同步电机有感FOC快速控制本部分是基于光电编码器进行位置检测,通过STMotorControlSDK配置工程快速实现永磁同步电机有感FOC的控制。具体步骤如下:①首先打开软件STMotorControlSDK5.4,点击“NewProject”,如图8-31所示,在Control栏中选择NUCLEO-G431RB板。如图8-32所示,在Power栏中选择X-NUCLEO-IHM16M13sh驱动板。图8-31开发板型号选择图8-32驱动板型号选择实验步骤如图8-33所示,在Motor栏中选择ShinanoLA052-080E3NL1,配置完成后点击“OK”,弹出如图8-34所示的电机参数导入工程的信息提示。图8-34电机参数导入工程信息提示图8-35MotorControlWorkbench主界面②工程生成新建工程后的MotorControlWorkbench主界面如图8-35所示。图8-33电机型号选择实验步骤点击图8-35右侧的“M”,可以打开如图8-36所示的电机参数设置界面,可以看到ShinanoLA052-080E3NL1永磁同步电机的参数已经自动导入。图8-36电机参数设置界面图8-37传感器参数设置界面点击图8-36上侧的“Sensors”可以打开如图8-37所示的传感器参数设置界面,第一次运行时应该勾选“EncoderAlignment”设定一下初始相位。实验步骤点击图8-35右下侧的“SpeedSensing”可以打开如图8-38所示的速度位置反馈管理界面,将“Sensorselection”下拉框中默认的“Sensor-less(Observer+PLL)”修改为“Quadratureencoder”。图8-38速度位置反馈管理界面图8-39启动参数设置界面右键点击图8-35左侧的“FirmwareDriveManagement”,在弹出菜单中选择“Start-upparameters”打开如图8-39所示的启动参数设置界面,此时需要修改“Finalcurrentrampvalue”为1.6。实验步骤点击STMotorControlWorkbench主界面中的菜单“Tools”,再点击“Generation”后输入工程名字进行保存,之后会打开如图8-40所示的工程生成配置界面,点击“GENERATE”,打开如图8-41所示的工程生成界面,完成后点击“RUNSTM32CubeIDE”按钮即可打开如图8-42所示的STM32CubeMX主界面。图8-40工程生成配置界面图8-41工程生成界面实验步骤进入ProjectManager界面选择IDE后点击“GENERATECODE”,代码生成成功后,弹出如图8-43所示的窗口,点击“OpenProject”,打开如图8-44所示STM32CubeIDE主界面,找到main.c文件,点击“编译”按钮,待编译完成后点击“运行”按钮即可。图8-42STM32CubeMX主界面图8-43代码生成成功提示实验步骤打开Workbench,按图8-45所示连接设备,然后进入Advanced界面,点击“StartMotor”即可转动电机,可在Monitor界面观测到实时速度。电机连接及运行状态如图8-46所示,也可以按下板上的蓝色按钮启动和停止电机。图8-44STM32CubeIDE主界面图8-45电机控制监测界面图8-46电机连接及运行状态永磁同步电机转速电流双闭环控制工程配置步骤一:创建新项目在STM32CubeMX中,有NUCLEO-G431RB工程模板,新建一个STM32CubeMX工程,芯片型号为STM32G431RBTX。1)打开STM32CubeMX软件,如图8-47所示,点击ACCESSTOMCUSELECTOR建立新工程。2)如图8-48所示,在BoardSelector页下的①号框中搜索NUCLEO-G431RB找到NUCLEO-G431RB工程模板,双击②加载模板。图8-47新建工程图8-48选择工程模板实验步骤步骤二:端口配置1)如图8-49所示,可以看到PC13、PA2、PA3、PA5已经配置好了,PA2、PA3是与电脑通讯的串口。如图8-50所示,然后在RCC模式配置中进行修改,HighSpeedClock(HSE)选择Crystal/Ceramicresonator。图8-49工程初始界面图8-50RCC配置实验步骤2)本实例中需要使用外部时钟,所以在ClockConfiguration进行更改。如图8-51所示,进行如下设置:①号框:外部晶振24M②号框:选择HSE通道③号框:调整倍率为6④号框:选择PLLCLK⑤号框:配置为170MHz3)如图8-52所示,对照表8-6配置需要使用的端口,右键点击选择“EnterUserLabel”可以进行重命名。图8-51外部时钟设置图8-52端口配置实验步骤4)ADC设置①如图8-53所示,ADC1_IN2、ADC1_IN12、ADC1_IN15、ADC1_IN8设置为“Single-ended”(单端输入)。图8-53端口配置图8-54ADC参数设置②ADC参数设置如图8-54所示,NumberofConversion设置为4;ExternalTriggerConversionSource设置为外部触发定时器1事件触发转换;4个通道顺序为通道2、12、15、8,采样事件为6.5个周期。实验步骤③开启DMA(直接存储器访问)并使能如图8-55所示,开启DMA:MODE选择“Circular”(循环模式);IncrementAddress选择“Memory”模式;DataWidth选择“Word”“Word”(字对字传输);如图8-56所示,使能DMA:在ADC设置中找到ScanConversionMode和DMAContinuousRequests并选择“Enabled”。图8-55DMA参数设置图8-56使能DMA设置实验步骤④开启ADC中断如图8-57所示,在NVICSettings页中勾选ADC1andADC2globalinterrupt的Enabled。图8-58PWM定时器设置5)PWM定时器设置①TIM1设置:如图8-58所示,ClockSource选择内部时钟,通道1-3选择PWM输出。因为配置定时器TIM1的PWM输出为中心对称模式,预分频系数为0,计数周期为8500,repetition为1,所以中断频率=PWM频率=170M/8500/(1+1)=10kHz。TriggerEventselectionTRGO选择UpdateEvent用于触发ADC采样。图8-57NVIC参数设置实验步骤如图8-59所示,将PWM生成模式改为模式2,计数器的值大于比较捕获寄存器值时输出有效电平。②TIM2设置如图8-60所示,ClockSource选择“InternalClock”(内部时钟),CombinedChannels选择“XORON/HallSensorMode”(霍尔模式),霍尔模式下每次HALL信号的变换都会产生中断请求,并在中断程序中计算电机位置和转速。图8-59PWM生成模式设置图8-61霍尔传感器参数设置图8-60定时器模式和配置设置图8-62NVIC设置实验步骤6)CORDIC设置CORDIC算法即坐标旋转数字计算方法,通过不断进行坐标旋转变换最终得到近似计算结果。主要用于三角函数、双曲线、指数、对数的计算。该算法通过基本的加和移位运算代替乘法运算,使得矢量的旋转和定向的计算不再需要三角函数、乘法、开方、反三角、指数等函数。如图8-63所示,勾选Activated。7)NVIC设置如图8-64所示,在NVICInterruptTable页中,勾选EXTIline[15:10]interrupts选项中的Enabled,使能按键中断。图8-64NVICInterrupt设置图8-63CORDIC模式和配置设置7)NVIC设置如图8-64所示,在NVICInterruptTable页中,勾选EXTIline[15:10]interrupts选项中的Enabled,使能按键中断。实验步骤步骤三:生成工程代码如图8-65所示,在CodeGenerator页中勾选“Generateperipheralinitializationasapairof‘.c/.h’filesperperipheral”。如图8-66所示,ApplicationStructure选择Basic,Toolchain/IDE选择MDK-ARM,MinVersion选择v5.27或以上版本。图8-65工程参数设置图8-66工程代码生成永磁同步电机转速电流双闭环控制软件设计打开生成的Keil程序,根据控制原理进行编程。1)点击左上角File选项新建motordrive.c和motordrive.h文件,分别保存到Src和Inc文件夹中,如图8-67所示,在Keil软件左边的Project栏中右击Application/User文件夹,在弹出菜单中点击“ManageProjectItems...”,打开如图8-68所示管理项目窗口,将motordrive.c文件添加到application/User里面。图8-67项目管理界面图8-68文件添加永磁同步电机转速电流双闭环控制软件设计2)在motordrive.c和motordrive.h文件中添加电机控制中需要用的坐标变换以及SVPWM控制程序等。①CORDIC算法通过角度计算正弦余弦值如图8-69所示,在motordrive.c中编写voidCORDIC_SinCos(floattheta,float*sincos)函数。如图8-70所示,在motordrive.h声明函数、添加需要用的变量。图8-69CORDIC_SinCos函数代码图8-70变量添加代码永磁同步电机转速电流双闭环控制软件设计②Clark变换及Clark反变换如图8-71所示,根据公式在motordrive.c中编写Clark变换及Clark反变换函数。如图8-72所示,在motordrive.h声明函数和添加需要用的变量。图8-71函数代码添加图8-72变量添加代码永磁同步电机转速电流双闭环控制软件设计③Park变换及Park反变换如图8-73所示,根据公式在motordrive.c中编写Park变换及Park反变换函数。如图8-74所示,在motordrive.h声明函数。图8-73函数代码添加图8-74声明函数代码永磁同步电机转速电流双闭环控制软件设计④SVPWM程序如图8-75所示,在motordrive.c中编写SVPWM程序。如图8-76所示,在motordrive.h声明函数和添加变量。图8-75SVPWM函数代码图8-76变量添加代码永磁同步电机转速电流双闭环控制软件设计3)在main.c文件中编写电机启动函数并配置CORDIC功能①编写电机启停函数、添加所需变量并在main.h文件中声明函数如图8-77所示,在main.c文件中编写电机启停函数。如图8-78所示,在main.c文件中添加需要用的变量。如图8-79所示,在main.h文件中声明函数。图8-78变量添加代码图8-80CORDIC配置及使能代码图8-77电机启停函数代码②配置CORDIC并开启TIM和使能如图8-80所示,在ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论