最近学习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 */
}
运行即可