STM32 FOC SDK 上电电机自动旋转

发布者:泉地水无痕最新更新时间:2019-04-22 来源: eefocus关键字:STM32  FOC  SDK  电机  自动旋转 手机看文章 扫描二维码
随时随地手机看文章

默认的STM32F  FOC SDK提供的工程文件下载到STM32以后不会电机不会自动转,想要让电机转,必须通过串口上位机ST Motor Control Workbench这个软件




若想脱离上位机让电机上电自动旋转,需要在main函数里面调用电机启动函数


UI_ExecCmd (oUI, MC_PROTOCOL_CMD_START_MOTOR);





根据UM1052 User manual STM32F PMSM single/dual FOC SDK v4.2手册中描述的可以利用FOC提供的UI函数来屏蔽底层驱动,直接在用户层编写程序


提供的函数定义在    UserInterfaceClass.c 中,其中主要的函数有


/**

  * @brief  Creates an object of the class UserInterface

  * @param  pUserInterfaceParams pointer to an UserInterface parameters structure

  * @retval CUI new instance of UserInterface object

  */

CUI UI_NewObject(pUserInterfaceParams_t pUserInterfaceParams);

 

/**

  * @brief  Initialization of UI object. It perform the link between the UI

  *         object and the MC interface and MC tuning objects. It must be called

  *         before the derived class initialization.

  * @param  this related object of class CUI.

  * @param  bMCNum  Is the total number of MC object presnet in the list.

  * @param  pMCI is the pointer of the list of MC interface objects to be linked

  *         with the UI.

  * @param  pMCT is the pointer of the list of MC tuning objects to be linked

  *         with the UI.

  * @param  pUICfg is the pointer of the user interface configuration list. Each 

  *         element of the list must be a bit field containing one (or more) of 

  *         the exported configuration option UI_CFGOPT_xxx (eventually OR-ed).

  * @retval none.

  */

void UI_Init(CUI this, uint8_t bMCNum, CMCI* pMCI, CMCT* pMCT, uint32_t* pUICfg);

 

/**

  * @brief  It is used to select the MC on which UI operates.

  * @param  this related object of class CUI.

  * @param  bSelectMC The new selected MC, zero based, on which UI operates.

  * @retval bool It return true if the bSelectMC is valid oterwise return false.

  */

bool UI_SelectMC(CUI this,uint8_t bSelectMC);

 

/**

  * @brief  It is used to retrive the MC on which UI currently operates.

  * @param  this related object of class CUI.

  * @retval uint8_t It returns the currently selected MC, zero based, on which

  *         UI operates.

  */

uint8_t UI_GetSelectedMC(CUI this);

 

/**

  * @brief  It is used to retrive the configuration of the MC on which UI 

  *         currently operates.

  * @param  this related object of class CUI.

  * @retval uint32_t It returns the currently configuration of selected MC on 

  *         which UI operates.

  *         It represents a bit field containing one (or more) of 

  *         the exported configuration option UI_CFGOPT_xxx (eventually OR-ed).

  */

uint32_t UI_GetSelectedMCConfig(CUI this);

 

/**

  * @brief  It is used to execute a SetReg command coming from the user.

  * @param  this related object of class CUI.

  * @param  bRegID Code of register to be updated. Valid code is one of the 

  *         MC_PROTOCOL_REG_xxx values exported by UserInterfaceClass.

  * @param  wValue is the new value to be set.

  * @retval bool It returns true if the SetReg command has been performed 

  *         succesfully otherwise returns false.

  */

bool UI_SetReg(CUI this, MC_Protocol_REG_t bRegID, int32_t wValue);

 

/**

  * @brief  It is used to execute a GetReg command coming from the user.

  * @param  this related object of class CUI.

  * @param  bRegID Code of register to be updated. Valid code is one of the 

  *         MC_PROTOCOL_REG_xxx values exported by UserInterfaceClass.

  * @retval int32_t is the current value of register bRegID.

  */

int32_t UI_GetReg(CUI this, MC_Protocol_REG_t bRegID);

 

/**

  * @brief  It is used to retrieve the current selected MC tuning object.

  * @param  this related object of class CUI.

  * @retval CMCT It returns the currently selected MC tuning object on which

  *         UI operates.

  */

CMCT UI_GetCurrentMCT(CUI this);

 

/**

  * @brief  It is used to execute a command coming from the user.

  * @param  this related object of class CUI.

  * @param  bCmdID Code of register to be updated. Valid code is one of the 

  *         MC_PROTOCOL_CMD_xxx define exported by UserInterfaceClass.

  * @retval bool It returns true if the command has been performed 

  *         succesfully otherwise returns false.

  */

bool UI_ExecCmd(CUI this, uint8_t bCmdID);

 

/**

  * @brief  It is used to execute a speed ramp command coming from the user.

  * @param  this related object of class CUI.

  * @param  wFinalMecSpeedRPM final speed value expressed in RPM.

  * @param  hDurationms the duration of the ramp expressed in milliseconds. It

  *         is possible to set 0 to perform an instantaneous change in the value.

  * @retval bool It returns true if the command has been performed 

  *         succesfully otherwise returns false.

  */

bool UI_ExecSpeedRamp(CUI this, int32_t wFinalMecSpeedRPM, uint16_t hDurationms);

 

/**

  * @brief  It is used to execute a torque ramp command coming from the user.

  * @param  this related object of class CUI.

  * @param  hTargetFinal final torque value. See MCI interface for more

            details.

  * @param  hDurationms the duration of the ramp expressed in milliseconds. It

  *         is possible to set 0 to perform an instantaneous change in the value.

  * @retval bool It returns true if the command has been performed 

  *         succesfully otherwise returns false.

  */

bool UI_ExecTorqueRamp(CUI this, int16_t hTargetFinal, uint16_t hDurationms);

 

/**

  * @brief  It is used to execute a get Revup data command coming from the user.

  * @param  this related object of class CUI.

  * @param  bStage is the rev up phase, zero based, to be read.

  * @param  pDurationms is the pointer to an uint16_t variable used to retrieve 

  *         the duration of the Revup stage.

  * @param  pFinalMecSpeed01Hz is the pointer to an int16_t variable used to 

  *         retrieve the mechanical speed at the end of that stage expressed in

  *         0.1Hz.

  * @param  pFinalTorque is the pointer to an int16_t variable used to 

  *         retrieve the value of motor torque at the end of that

  *         stage. This value represents actually the Iq current expressed in

  *         digit.

  * @retval bool It returns true if the command has been performed 

  *         succesfully otherwise returns false.

  */

bool UI_GetRevupData(CUI this, uint8_t bStage, uint16_t* pDurationms, 

                     int16_t* pFinalMecSpeed01Hz, int16_t* pFinalTorque );

 

/**

  * @brief  It is used to execute a set Revup data command coming from the user.

  * @param  this related object of class CUI.

  * @param  bStage is the rev up phase, zero based, to be modified.

  * @param  hDurationms is the new duration of the Revup stage.

  * @param  hFinalMecSpeed01Hz is the new mechanical speed at the end of that 

  *         stage expressed in 0.1Hz.

  * @param  hFinalTorque is the new value of motor torque at the end of that

  *         stage. This value represents actually the Iq current expressed in

  *         digit.

  * @retval bool It returns true if the command has been performed 

  *         succesfully otherwise returns false.

  */

bool UI_SetRevupData(CUI this, uint8_t bStage, uint16_t hDurationms, 

                     int16_t hFinalMecSpeed01Hz, int16_t hFinalTorque );

 

/**

  * @brief  It is used to execute a set current reference command coming from 

  *         the user.

  * @param  this related object of class CUI.

  * @param  hIqRef is the current Iq reference on qd reference frame. This value

  *         is expressed in digit. To convert current expressed in digit to 

  *         current expressed in Amps is possible to use the formula: 

  *         Current(Amp) = [Current(digit) * Vdd micro] / [65536 * Rshunt * Aop]

  * @param  hIdRef is the current Id reference on qd reference frame. This value

  *         is expressed in digit. See hIqRef param description.

  * @retval none.

  */

void UI_SetCurrentReferences(CUI this, int16_t hIqRef, int16_t hIdRef); 

 

/**

  * @brief  Hardware and software initialization of the DAC object. This is a 

  *         virtual function and is implemented by related object.

  * @param  this related object of class UI. It must be a DACx_UI object casted

[1] [2] [3]
关键字:STM32  FOC  SDK  电机  自动旋转 引用地址:STM32 FOC SDK 上电电机自动旋转

上一篇:STM32系统学习——EXTI(外部中断)
下一篇:关于STM32 NVIC配置的解释

推荐阅读最新更新时间:2024-10-31 17:40

浅谈关于STM32软硬件兼容性相关的知识
Ⅰ、写在前面 很多朋友初学STM32的时候,对STM32芯片很多相关知识都不是很了解,导致了在学习的路上很迷茫,甚至半途放弃。希望本文的内容对初学的朋友有一定帮助。 常见问题: 1.我开发板是STM32F103ZE芯片,但网上找到的软件工程基于STM32F103R8芯片的,我能直接将工程下载并调试吗? 2.我有STM32F205R8的原理图和封装库,但现在需要画STM32F405RC芯片的板子,能直接替换使用吗? 以上问题在你阅读本文之后就会得到比较明确的答案。 关于本文的更多详情请往下看。 Ⅱ、本文要点 从本文的标题可以看得出来,主要是站在“STM32兼容性”的角度来分析问题。 在开发STM32项目中,往往是软件工程师、硬件
[单片机]
浅谈关于<font color='red'>STM32</font>软硬件兼容性相关的知识
STM32基础设计(7)---时钟中断(控制LED灯)
本文将介绍STM32的基础时钟,通过时钟中断来控制LED灯的亮灭。 本文的大致思路如下: 1,LED的GPIO口初始化 2,中断初始化 3,时钟初始化 4,编写中断函数 5,编写主函数 首先讲下笔者在做这个设计时得到的教训: 笔者最初是用TIM6基础时钟来实现设计功能,在编写完代码后发现,灯不亮,于是笔者就开始整问题了。先看看代码有没有编写错误,检查一遍后,中断通道使用正确,TIM6配置正确,LED灯的串口也没有问题,中断函数也正常编写了。然后笔者纠结了,他妈代码全对了怎么就运行失败?(原谅笔者爆粗口,因为当时心情的确很不好,可以想象一下,辛辛苦苦桥的代码,没什么毛病,结果到了板子上还运行不
[单片机]
STM32学习笔记(4):通用定时器基本定时功能
TIMER基本定时功能 1.STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 定时器 计数器分辨率 计数器类型 预分频系数 产生DMA请求 捕获/比较通道 互补输出 TIM1 TIM8 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 有 TIM2 TIM3 TIM4 TIM5 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4
[单片机]
STM32待机模式唤醒测试以及独立看门狗测试
环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 在上篇文章中http://blog.csdn.net/jdh99/article/details/7369844,进行了一些STM32待机模式的测试.其中关于如何在再次启动时判断是否是待机模式没有进行测试.另外上篇文章有个问题,闹钟中断在待机模式下是进入不了的. 本文进行了独立看门狗IWDG测试,以及待机模式更详细的测试. STM32中,复位分为3种: 1.系统复位:外部复位,WWDG,IWDG,SW复位,低功耗管理复位.除复位标志寄存器RCC_CSR不被复位,全部都被复位 2.电源复位:上电/掉电复位
[单片机]
<font color='red'>STM32</font>待机模式唤醒测试以及独立看门狗测试
平衡机龙头掷2.5亿元加速电机智能制造生产线扩产项目
8月24日,深交所公告显示,杭州集智机电股份有限公司(下文简称“集智股份”)可转债申请获深交所通过。 据集智股份《向不特定对象发行可转换公司债券募集说明书(申报稿)》(以下简称《募集说明书》)显示,集智股份本次可转债预计募集资金不超过2.55亿元。 集智股份本次募集资金扣除发行费用后拟全部用于集智装备研发及产业化基地建设项目、智能制造生产线扩产项目。 (图源:集智股份募集说明书) 本次募投项目中的“电机智能制造生产线扩产项目”实施完成后,将新增2.80亿元自动化生产线生产能力,包括26条电机定子/转子自动化生产线和4条电机总装生产线。 全自动平衡机是核心 企查查显示,
[机器人]
对于电机效率测试的必要性
电机的效率测试一直是电机测试里最重要的环节之一,而MAP图则是电机效率测试中的新型评估方法。本次让我们来剖析行业需求,分析为什么MAP图在不同电机行业的应用将会越来越多。 为什么说MAP图在不同电机行业的应用将会越来越多?来,我们慢慢剖析。 一MAP图是什么? 电机中的MAP图是电机测试时生成的一种数据曲线图,主要是反映在不同转速、扭矩下的电机效率分布情况,通俗而言就是效率分布图,类似于我们地理课上常见的等高线图。将效率相同的点连成一环线直接投影到平面形成水平曲线,不同效率的环线不会相合。效率值比较接近的位置,线就会相对密集;相反,效率值相差较大的位置,线的间隔也会较大。 通常而言,MAP都是利
[测试测量]
对于<font color='red'>电机</font>效率测试的必要性
STM32复习笔记(七)定时器&定时器中断
一、STM32定时器: STM32F10x系列总共最多有8个定时器: 二、三种STM32定时器区别: 三、通用定时器功能特点描述: STM32 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括: 位于低速的APB1总线上(APB1) 16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为: ① 输入捕获 ② 输出比较 ③ PWM 生成(边缘或中间对
[单片机]
<font color='red'>STM32</font>复习笔记(七)定时器&定时器中断
Stm32使用Usart代码例子(轮询、中断、DMA)
stm32使用库函数编写USART还是很方便的,现在转几个例子: /*************************************** 转载请注明出处:tedeum.iteye.com ****************************************/ 首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunitie
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved