|
本来打算玩一下ST Motor Control Workbench的,可无奈里面内容太多,还吃不透。那就先玩一下官方例程,也顺便在官方例程的基础上修改部分代码,完成一些实验。 1.打开工程。工程在安装目录下C:\Program Files (x86)\STMicroelectronics\FOC SDK\v4.3.0\STM32 PMSM FOC LIB\Web\Project\EWARM。我是用的IAR,用Keil或者AC6的小伙伴可以选择对应的文件打开。
2.打开后,可以看到工程文件中有几个Project,先编译STM32F30x_UserProject-P-NUCCLEO-IHM001_SINGLEDRIVE。
3.编译后,发现有1个错误,从提示可以看出缺少了一个库文件,这时我们发现工程内有一个Project是STM32F30x_MCLibrary-STM32F302_SINGLE_DRIVE,选择这个Project,编译。再切换到之前的Project,编译,就没有错误了。
4.下载到板子上,按板上的蓝色USER按钮,可以控制电机的启动与停止,但是调速旋钮不起作用。查看main()函数,例程只简单的处理了按键控制启停,没有做调速功能。 5.按HandOn的Task 1要求,完成实验。
6. 把原while循环,替换成以下代码,下载到板子上,电机按照实验要求,正转5S,停止5S,再正转,如此往复。 MCI_ExecSpeedRamp(oMCI[0],3000/6,1000);//--1000ms内加速到3000RPM,3000/6:以0.1HZ作为单位的速度指令 while(1) { MCI_StartMotor(oMCI[0]); //-- 运行电机 //Delay 5S TB_SetUserTimebaseTime(10000); while(TB_UserTimebaseHasElapsed() != TRUE); MCI_StopMotor(oMCI[0]);//--停止电机 //Delay 5S TB_SetUserTimebaseTime(10000); while(TB_UserTimebaseHasElapsed() != TRUE); } 7.这个实验比较简单,相关的代码实验要求上已经给出,只要添加到程序中就可以了。延时函数用的是Timebase.c中的。SysTick的时钟频率是2000Hz,所在5S延时值就是10000。 /** * @brief Use this function to know whether the user time base is elapsed * has elapsed * @param none * @retval bool TRUE if time is elapsed, FALSE otherwise */ bool TB_UserTimebaseHasElapsed(void) { bool retVal = FALSE; if (bUDTBTaskCounter == 0u) { retVal = TRUE; } return (retVal); } /** * @brief It set a counter intended to be used for counting the user time base * time * @param SysTickCount number of System ticks to be counted * @retval void */ void TB_SetUserTimebaseTime(uint16_t SysTickCount) { bUDTBTaskCounter = SysTickCount; } 实验完成。 |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版