你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32电机培训】——3、任务1电机设定速度、定时启动停止

[复制链接]
七哥 发布时间:2018-9-9 20:54
本帖最后由 toofree 于 2018-9-14 08:47 编辑

【STM32电机培训】——3、任务1电机设定速度、定时启动停止

目标任务:设定速度3000转,启动工作10秒,停止工作5秒;再启动,再停止,速度保持不变,如此往复。

00.jpg


在电机参数测试时,得到过电机的参数。
【STM32电机培训】——1、实验电机参数测量及极数对解疑
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617371&fromuid=307297
(出处: 意法半导体STM32/STM8技术社区)
01.jpg

本贴实验工程基于前一贴工程进行修改。前一贴链接:【STM32电机培训】——2、生成电机样例程序stmcx、ioc、IAR工程
https://www.stmcu.org.cn/module/foru ... 7427&fromuid=307297
(出处: 意法半导体STM32/STM8技术社区)

将电机工程设置中的参数按照,之前测得的参数设置。
02.jpg


由于最大电流有变化,因此电机驱动管理中的启动参数也得对应做出改变,否则不能生成新的工程。
03.jpg


本实验,打算顺带闪个灯,从原理图看出,X-NUCLEO-IHM07M1板上的LED灯D11,使用的是PB2,高电平有效点亮。
05.jpg


对照NUCLEO-F302R8板原理图,确认是PB2无误。同时在NUCLEO-F302R8板上本身也有一路LED,用的是PB13,高电平有效点亮。
04.jpg


打开电机工程下的,stm32cubemx工程文件“SDK50x-P-NUCLEO-IHM001-BullRunning.ioc”
06.jpg


在IO管脚图中设置,PB2为输出,同时更改别名为“LED_Motor”,程序中使用更直观。
07.jpg


检查IO配置,确认LED_motor管脚模式设置正确无误。
08.jpg


重新生成IAR应用工程。成功生成后,打开工程。
09.jpg


在生成的工程中,main.h中可以找到,LED_motor的相关管脚宏定义。
10.jpg


程序中使用GPIO状态翻转,来闪灯。
11.jpg


找到设置电机速度参数的函数MC_ProgramSpeedRampMotor1()在mc_api.c中
12.jpg


在主函数main.c中包含进“mc_api.h”头文件,一定要放在“/* USER CODE BEGIN Includes */”与“/* USER CODE END Includes */”,否则重新生成工程文件时,将会被冲掉。
13.jpg


定义循环变量“i”。同上,用户添加内容,一定要放在“/* USER CODE BEGIN N */”与/* USER CODE BEGIN N */,之后同理。
14.jpg


添加电机转速参数设置函数“MC_ProgramSpeedRampMotor1(3000/6,1000);”。
引入switch语句,来进行电机启动、停止控制。这样分时工作,可以使用LED正常闪灯。
15.jpg


编译IAR工程,并下载最新代码(Ctrl+D),全速跑程序(F5)。


打开“Motor Profiler 5.0.3”软件,通过串口连接电机开发套件,打开“监控”窗口。
20.jpg


“监控”窗口下,在打开“Plotter”绘图窗口。可以看到,电机启动一段时间,停止一段时间。但是时间宽度好像有点问题,D11闪烁频率为1Hz。经查看,启动5秒,停止2.5秒。原因是SysTick的的基础时钟为500us。
16.jpg


修改代码,改为每隔2000个单位,一个节拍。修改后D11闪烁为0.5Hz,符合预期。
17.jpg


重新运行程序,查看“Plotter”绘图窗口波形,这次时间正确无误。
18.jpg


main.c中修改过的代码,贴入:
  1. #include "main.h"
  2. #include "stm32f3xx_hal.h"
  3. #include "motorcontrol.h"

  4. /* USER CODE BEGIN Includes */

  5. #include "mc_api.h"

  6. /* USER CODE END Includes */

  7. /* Private variables ---------------------------------------------------------*/
  8. ADC_HandleTypeDef hadc1;

  9. DAC_HandleTypeDef hdac;

  10. TIM_HandleTypeDef htim1;

  11. UART_HandleTypeDef huart2;

  12. /* USER CODE BEGIN PV */
  13. /* Private variables ---------------------------------------------------------*/

  14. /* USER CODE END PV */

  15. /* Private function prototypes -----------------------------------------------*/
  16. void SystemClock_Config(void);
  17. static void MX_GPIO_Init(void);
  18. static void MX_ADC1_Init(void);
  19. static void MX_DAC_Init(void);
  20. static void MX_TIM1_Init(void);
  21. static void MX_USART2_UART_Init(void);
  22. static void MX_NVIC_Init(void);

  23. void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
  24.                                 

  25. /* USER CODE BEGIN PFP */
  26. /* Private function prototypes -----------------------------------------------*/

  27. /* USER CODE END PFP */

  28. /* USER CODE BEGIN 0 */

  29. /* USER CODE END 0 */

  30. /**
  31.   * @brief  The application entry point.
  32.   *
  33.   * @retval None
  34.   */
  35. int main(void)
  36. {
  37.   /* USER CODE BEGIN 1 */
  38.   int i=0;
  39.   //int dir_flag = 0;         // 1正转,-1反转,0停止
  40.   //int run_cnt=0

  41.   /* USER CODE END 1 */

  42.   /* MCU Configuration----------------------------------------------------------*/

  43.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  44.   HAL_Init();

  45.   /* USER CODE BEGIN Init */

  46.   /* USER CODE END Init */

  47.   /* Configure the system clock */
  48.   SystemClock_Config();

  49.   /* USER CODE BEGIN SysInit */

  50.   /* USER CODE END SysInit */

  51.   /* Initialize all configured peripherals */
  52.   MX_GPIO_Init();
  53.   MX_ADC1_Init();
  54.   MX_DAC_Init();
  55.   MX_TIM1_Init();
  56.   MX_USART2_UART_Init();
  57.   MX_MotorControl_Init();

  58.   /* Initialize interrupts */
  59.   MX_NVIC_Init();
  60.   /* USER CODE BEGIN 2 */
  61.   MC_ProgramSpeedRampMotor1(3000/6,1000);
  62.    
  63.   /* USER CODE END 2 */

  64.   /* Infinite loop */
  65.   /* USER CODE BEGIN WHILE */  
  66.   while (1)
  67.   {
  68.   /* USER CODE END WHILE */

  69.   /* USER CODE BEGIN 3 */
  70.    
  71.     switch (i)
  72.     {
  73.       case 0:
  74.         MC_StartMotor1();
  75.         break;
  76.       case 10:
  77.         MC_StopMotor1();
  78.         break;
  79.       default:
  80.         break;
  81.     }
  82.    
  83.     i++;
  84.     i %= 15;   
  85.     HAL_Delay(2000);    //systick定时基准为500us,所以2000为1秒
  86.    
  87.     HAL_GPIO_TogglePin(LED_Motor_GPIO_Port, LED_Motor_Pin);

  88.   }
  89.   /* USER CODE END 3 */

  90. }
复制代码


对于电机参数设置、启动、停止操作,还是比较简单的。这主要得力于ST的工程师,把大量繁杂的代码打包,给用户的就是非常明了的控制函数。

按照惯例,程序工程附上:
P-NUCLEO-IHM001_StartStop.rar (8.98 MB, 下载次数: 67)
收藏 2 评论7 发布时间:2018-9-9 20:54

举报

7个回答
liujunfy527 回答时间:2018-11-2 17:29:22
谢谢分享
liujunfy527 回答时间:2018-11-2 17:29:43
谢谢分享
惜缘1 回答时间:2018-11-13 23:16:53
自动生成IAR工程文件的软件叫啥名啊
七哥 回答时间:2018-11-14 00:04:19
本帖最后由 toofree 于 2018-11-14 00:05 编辑
惜缘1 发表于 2018-11-13 23:16
自动生成IAR工程文件的软件叫啥名啊

stm32cubemx 20181114000527.jpg
瞻_ 回答时间:2019-7-2 10:44:46
好资料,非常感谢!
byronsong 回答时间:2019-7-2 10:47:01

好资料,非常感谢!
byronsong 回答时间:2019-7-2 10:47:17

好资料,非常感谢!

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版