电机驱动-标准库和HAL库

ops/2025/1/20 4:09:17/

一、标准库

Motor.c-标准库

#include "stm32f10x.h"                  // Device header
#include "PWM.h"/*** 函    数:直流电机初始化* 参    数:无* 返 回 值:无*/
void Motor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);		//开启GPIOA的时钟GPIO_InitTypeDef GPIO_InitStructure;						//定义GPIO初始化结构体GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;		//使用GPIOA引脚4、5,分别接在电机驱动AIN1、AIN2GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);						//初始化GPIOAPWM_Init();		//初始化PWM,需要PWM模块
}/*** 函    数:直流电机调速* 参    数:Speed代表直流电机转速,Speed>0正转,Speed<0反转* 返 回 值:无*/
void Motor_SetSpeed(int8_t Speed)
{if(Speed >= 0)		//正转{//设置电机驱动AIN1、AIN2引脚控制电机转向GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_ResetBits(GPIOA,GPIO_Pin_4);PWM_SetCompare3(Speed);}else				//反转{//设置电机驱动AIN1、AIN2引脚控制电机转向GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_ResetBits(GPIOA,GPIO_Pin_5);PWM_SetCompare3(Speed);}
}

Motor.h-标准库

#ifndef __MOTOR_H
#define __MOTOR_Hvoid Motor_Init(void);
void Motor_SetSpeed(int8_t Speed);#endif

PWM.c-标准库

#include "stm32f10x.h"                  // Device header/*** 函    数:PWM初始化* 参    数:无* 返 回 值:无*/
void PWM_Init(void)
{//开启时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);		//开启定时器TIM2时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//开启GPIOA时钟//GPIOA初始化,引脚设为2GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//配置TIM2时钟源为内部时钟TIM_InternalClockConfig(TIM2);//TIM2时基初始化TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;		//ARRTIM_TimeBaseInitStructure.TIM_Prescaler = 36 - 1;	//PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//输出比较初始化,设置为通道3TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(&TIM_OCInitStructure);						//结构体初始化(结构体参数多)TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;			//比较模式设置为PWM1TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;	//输出极性设为高(为低则输出高低取反)TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;			//CCR,与ARR一同决定占空比,由于ARR=100,所以占空比为CCR%TIM_OC3Init(TIM2,&TIM_OCInitStructure);		//初始化,设置为通道3,对应GPIOA引脚2TIM_Cmd(TIM2,ENABLE);		//定时器使能,开启定时器TIM2
}/*** 函    数:PWM调节占空比* 参    数:Compare写入需要设定的CCR的值* 返 回 值:无* 注意事项:通过设置CCR调节。并非直接调节*/
void PWM_SetCompare3(uint16_t Compare)
{TIM_SetCompare3(TIM2,Compare);		//修改TIM2的CCR
}

PWM.h-标准库

#ifndef __PWM_H
#define __PWM_Hvoid PWM_Init(void);
void PWM_SetCompare3(uint16_t Compare);#endif

二、HAL库

Motor.c-HAL库

#include "main.h"                  // Device header
#include "Motor.h"
#include "tim.h"
/*** 函    数:直流电机初始化* 参    数:无* 返 回 值:无*/
void Motor_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = Motor_AIN1_Pin|Motor_AIN2_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
}/*** 函    数:直流电机调速* 参    数:Speed代表直流电机转速,Speed>0正转,Speed<0反转* 返 回 值:无*/
void Motor_SetSpeed(int8_t Speed)
{if(Speed >= 0)		//正转{//设置电机驱动AIN1、AIN2引脚控制电机转向HAL_GPIO_WritePin(GPIOA,Motor_AIN1_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA,Motor_AIN2_Pin,GPIO_PIN_RESET);__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,Speed);}else				//反转{//设置电机驱动AIN1、AIN2引脚控制电机转向HAL_GPIO_WritePin(GPIOA,Motor_AIN1_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA,Motor_AIN2_Pin,GPIO_PIN_SET);__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,Speed);}
}

Motor.h-HAL库

#ifndef __MOTOR_H
#define __MOTOR_Hvoid Motor_Init(void);
void Motor_SetSpeed(int8_t Speed);#endif


http://www.ppmy.cn/ops/151558.html

相关文章

【软件测试】用例篇

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…

【网络协议】ACL(访问控制列表)第二部分

概述 在【网络协议】ACL&#xff08;访问控制列表&#xff09;第一部分中&#xff0c;我们介绍了 ACL 的基本概念&#xff0c;讨论了它的工作原理&#xff0c;并以标准 ACL 的配置为结束。第二部分将重点讨论扩展 ACL 以及其他相关的 ACL 概念&#xff0c;接着介绍如何配置扩展…

传统架构下应用部署

2.1传统架构下应用部署 实验目标&#xff1a; 目标为在传统架构下搭建LAMP&#xff08;LinuxApacheMySQL/MariaDBPHP,流行的开源软件组合&#xff09;环境并部署WordPress服务&#xff0c;本次模拟在安装好的openEuler22.03系统虚拟机实现。 节点配置&#xff1a; 虚拟机版本…

微信小程序:跨页面数据修改全攻略

一、引言 在微信小程序开发中&#xff0c;常常会遇到需要在不同页面之间修改数据的情况。比如在商品详情页添加商品到购物车后&#xff0c;购物车页面需要实时更新商品数量和总价&#xff1b;在用户设置页面修改了个人信息&#xff0c;首页的用户信息展示区域也需要同步更新。…

软件测试 —— Selenium(窗口)

软件测试 —— Selenium&#xff08;窗口&#xff09; 多个窗口打开情况current_window_handle、window_handles和switch_to.window示例代码注意事项 窗口大小的设置窗口最大化 maximize_window()窗口最小化 minimize_window()指定窗口全屏 fullscreen_window()手动设置窗口大小…

基于微信小程序的优购电商系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【CSS】渐变光晕

dom元素 <div id"box" class"glow"></div>css样式 #box { height: 300px;width: 300px;background-image: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 127, color-stop(0%, #CE1A1A), color-stop(100%, #ffffff));background-image:…

基于 WEB 开发的汽车养护系统设计与实现

标题:基于 WEB 开发的汽车养护系统设计与实现 内容:1.摘要 本文介绍了基于 WEB 开发的汽车养护系统的设计与实现。文章首先阐述了系统的背景和目的&#xff0c;即随着汽车保有量的增加&#xff0c;汽车养护需求日益增长&#xff0c;传统的汽车养护方式已经无法满足人们的需求&…