嵌入式大赛(RoboMover)

本文介绍了作者在学习HAL库过程中,如何选择STM32G030C8T6芯片、配置CubeMX以支持两个串口和定时器,以及使用openmv摄像头。作者详细展示了如何配置定时器1产生PWM信号控制电机,并分享了电机控制函数的代码实现。
摘要由CSDN通过智能技术生成

最近学习hal库与摄像头,刚好符合嵌入式应用工业4.0赛道,比个赛就当做项目了,顺便记录一下备赛过程

 

芯片选型:STM32G030C8T6          openmv

暂时选择STM32G030C8T6 主要是因为这个芯片两个串口两个定时器,刚好符合所需,再加上价格便宜,若不给力后期再换高性能的

摄像头选择openmv,生态好,资源多,上手简单,也符合比赛需求

今天刚搭建好HAL库开发环境,简单学习了一下驱动直流有刷电机

CubeMx配置:

选择SW下载模式选择外部高速时钟

 

因为我的G0板载外部晶振是8M所以就填8M 选择HSE 锁相环 HCLK选择最大回车即可,系统会自动配置倍频

 开启定时器1,开启两路PWM通道 ​编辑关于定时频率的知识可以看篇博客讲的很清楚

 

 设置占空比为50

 顺便配置下电机输出口

之后在生成的keil中需要开启定时器方可产生PWM波形

 代码为

  /* USER CODE BEGIN 2 */
    HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); //开启定时器1,通道1的pwm输出 
    HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);//开启定时器1,通道2的pwm输出  
  /* USER CODE END 2 */

记得现在开始与结束中间防止代码丢失

最后导入电机的c与h文件

.c

    #include "motor.h"
 
void Motor_SetSpeed(int8_t Speed)
{
    if (Speed >= 0)
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
        __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, Speed);
    }
    else
    {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
        __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, -Speed);
    }
}

.h

#ifndef __MOTOR_H
#define __MOTOR_H
 
#include "main.h"
#include "tim.h"
 
void Motor_SetSpeed(int8_t Speed);
 
#endif

main.c

  while (1)
  {
    /* USER CODE END WHILE */
    Motor_SetSpeed(100); 
      
      /* USER CODE BEGIN 3 */
  }

 运行即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值