当前位置: 首页 > news >正文

STM32 PWM驱动直流电机

接线图:

代码配置:

根据驱动舵机的代码来写,与舵机不同的是,这次的引脚接到了PA2上,所以需要改一下引脚以及改为OC3通道。

另外还需在配置两个GPIO引脚,来控制电机的旋转方向,这里连接到了PA4与PA5引脚

整体代码:

void Motor_Init(void)
{//-----------------定义结构体变量----------------------GPIO_InitTypeDef GPIO_InitStructure;    //定义GPIO结构体变量TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//定义TimeBase结构体变量TIM_OCInitTypeDef TIM_OCInitStructure;  //定义OC结构体变量//-----------------定义结构体变量----------------------//配置时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开GPIO时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//打开TIM2时钟//-----------------配置GPIO----------------------------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);				//GPIO初始化//-----------------配置GPIO----------------------------//-----------------配置GPIO----------------------------GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//选择推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;//配置引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速率GPIO_Init(GPIOA, &GPIO_InitStructure);				//GPIO初始化//-----------------配置GPIO----------------------------//-------------------配置时基单元----------------------TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,这里选择向上计数TIM_TimeBaseInitStructure.TIM_Period = 	100 - 1;//周期 就是自动重装器ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;//预分频器 PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;		//重复计数器的值TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);     //TimeBase初始化//-------------------配置时基单元----------------------//------------------配置输出比较单元-------------------TIM_OCStructInit(&TIM_OCInitStructure);          //给结构体赋初值TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//配置输出比较模式TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//设置输出比较极性TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设置输出使能TIM_OCInitStructure.TIM_Pulse = 0;//CCR的值TIM_OC3Init(TIM2, &TIM_OCInitStructure);//------------------配置输出比较单元-------------------TIM_Cmd(TIM2,ENABLE);//开启定时器}

功能代码:

这里实现电机的正转与反转

void Motor_SetSpeed(int8_t Speed)
{if(Speed >= 0){GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_ResetBits(GPIOA,GPIO_Pin_5);TIM_SetCompare3(TIM2,Speed);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_4);GPIO_SetBits(GPIOA,GPIO_Pin_5);TIM_SetCompare3(TIM2,-Speed);}}

主函数:

#include "Motor.h"
int main(void)
{LED_Init();OLED_Init();KEY_Init();Motor_Init();int16_t Speed = 0;OLED_ShowString(1, 1, "Speed:");while(1){if(KEY_Scanf(GPIOB,GPIO_Pin_1) == 1){Speed += 20;if(Speed > 100){Speed = -100;}}Motor_SetSpeed(Speed);OLED_ShowSignedNum(1, 7, Speed, 3);}}

http://www.lryc.cn/news/528815.html

相关文章:

  • 系统思考—心智模式
  • JavaScript_02 表单
  • 【Qt】06-对话框
  • AI学习指南Ollama篇-使用Ollama构建自己的私有化知识库
  • 2.策略模式(Strategy)
  • Python里的小整数问题挺有意思的
  • 开源智慧园区管理系统对比五款主流产品探索智能运营新模式
  • 正则表达式入门
  • hive:数据导入,数据导出,加载数据到Hive,复制表结构
  • 【某大厂一面】HashSet底层怎么实现的
  • 动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践
  • 免杀国内主流杀软的恶意样本分析
  • 第4章 基于中点电流的NPC逆变器中点电压平衡策略
  • 消息队列篇--通信协议篇--应用层协议和传输层协议理解
  • FLTK - FLTK1.4.1 - demo - animgifimage
  • 目前市场主流的AI PC对于大模型本地部署的支持情况分析-Deepseek
  • 1.2 基于深度学习的底层视觉技术
  • HTML 标题
  • SOME/IP--协议英文原文讲解3
  • Microsoft Visual Studio 2022 主题修改(补充)
  • UE(UltraEdit) 配置简易C/C++编译运行环境
  • 使用 MSYS2 qemu 尝鲜Arm64架构国产Linux系统
  • python Flask-Redis 连接远程redis
  • 在Windows系统中本地部署属于自己的大语言模型(Ollama + open-webui + deepseek-r1)
  • Haproxy入门学习二
  • Git图形化工具【lazygit】
  • node 爬虫开发内存处理 zp_stoken 作为案例分析
  • 基于Langchain-Chatchat + ChatGLM 本地部署知识库
  • 【C语言】main函数解析
  • 【QT】- QUdpSocket