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

【STM32电机培训】- 基于MC SDK5.0 API速度控制与电机启动停止

[复制链接]
TLLED 发布时间:2018-8-30 21:33
     培训手册里 实验2:基于MC SDK5.0 API速度控制与电机启动停止。1、实验2内容:
    1.png
2.png


2、程序代码,在上篇实现的代码的基础上,修改代码如下:
main.c程序里面添加内容
//-----------------------------
//定义变量
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
  static uint32_t  delay_cnt=0;                  //延时计数   
  static uint32_t  delay_cnt1=0;
  static uint8_t  delay_start_flag=0x30;     //延时启动标志位
  static uint8_t  delay_5s_flag=0;              //5s时间到标志位
  static uint8_t  delay_10s_flag=0;            //10s时间到标志位
/* USER CODE END PV */

//函数定义
/* USER CODE BEGIN 0 */
//定时器处理
void Delay_Handler(void)
{
  delay_cnt++;
  if(delay_cnt>2000)          //1s计时
    {
      delay_cnt=0;
      HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);   //定义示波器看时引脚
      //----------------------------------------
      if(delay_start_flag==0x30)          //启动10s计时
      {
        delay_cnt1++;
        if(delay_cnt1>9)          //10S
        {
          delay_cnt1=0;
          delay_start_flag=0x20;   
          delay_10s_flag=1;     //10S时间到标志位
        }
      }
      else if(delay_start_flag==0x20)    //启动5s计时
      {
        delay_cnt1++;
        if(delay_cnt1>4)           //5S
        {
          delay_cnt1=0;
          delay_start_flag=0x30;
          delay_5s_flag=1;   //5S时间到标志位
        }
      }  
    }
}

int main(void)
{
  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration----------------------------------------------------------*/


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


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */
  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_DAC_Init();
  MX_TIM1_Init();
  MX_USART2_UART_Init();
  MX_MotorControl_Init();


  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
MC_StartMotor1();      //启动电机
  MC_ProgramSpeedRampMotor1(3000/6,1000);    //1s内加速到3000RPM


  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {


  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */
    if(delay_10s_flag==1)     //10S
    {
      MC_StopMotor1();         //停止电机运行
      delay_10s_flag=0;
    }
    if(delay_5s_flag==1)     //5S
    {
      MC_StartMotor1();
      delay_5s_flag=0;
    }


  }
  /* USER CODE END 3 */


}



/* USER CODE END 0 */





stm32f30x_mc_it.c 程序里面添加内容:
在滴答定时中断程序里面调用定义的函数
void SysTick_Handler(void)
{
#ifdef MC_HAL_IS_USED
static uint8_t SystickDividerCounter = SYSTICK_DIVIDER;
  /* USER CODE BEGIN SysTick_IRQn 0 */


  /* USER CODE END SysTick_IRQn 0 */
  if (SystickDividerCounter == SYSTICK_DIVIDER)
  {
    HAL_IncTick();
    HAL_SYSTICK_IRQHandler();
    SystickDividerCounter = 0;
  }
  SystickDividerCounter ++;  
#endif /* MC_HAL_IS_USED */


  /* USER CODE BEGIN SysTick_IRQn 1 */
  /* USER CODE END SysTick_IRQn 1 */
    MC_RunMotorControlTasks();
  /* USER CODE BEGIN SysTick_IRQn 2 */
    Delay_Handler();
  /* USER CODE END SysTick_IRQn 2 */
}



3、测试波形:
在程序定义PC9为输出,观察滴答定时器的定时时间,滴答定时器的时间周期为0.5us ,程序处理后变成1s定时周期:
3.jpg


监控电机运行的图片:
4.png
5.png














     

收藏 1 评论4 发布时间:2018-8-30 21:33

举报

4个回答
子曰好人 回答时间:2018-8-30 22:44:19
延时程序值得参考,不阻塞其他任务进行,不错的想法,点个赞
zhdzhd-174422 回答时间:2018-8-30 23:00:45
向大神学习,思路不错。
TLLED 回答时间:2018-8-31 08:32:30
zhdzhd-174422 发表于 2018-8-30 23:00
向大神学习,思路不错。

共同学习
wolfgang2015 回答时间:2018-8-31 16:00:08
按照此想法,还有其他方法观察嘀嗒计时器的方法~~

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

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