STM32通过TB6612FNG模块驱动电机
简介
pass
设置pwm脉冲
pass
参考代码
/*控制GPIO PB12/PB13/PB14/PB15电机MOTOR TIM2_CH3/TIM2_CH4
*/
void MOTOR_GPIO_Config(void)
{ /*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启GPIOB的外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /*选择要控制的GPIOB引脚*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; /*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚速率为50MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*调用库函数,初始化GPIOB*/GPIO_Init(GPIOB, &GPIO_InitStructure); /* 低电平 */GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_12 | GPIO_Pin_15);GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14);GPIO_ResetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_15);
}/** 函数名:TIM2_GPIO_Config* 描述 :配置TIM2复用输出PWM时用到的I/O* 输入 :无* 输出 :无* 调用 :内部调用*/
static void TIM2_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/* TIM2 clock enable *///PCLK1经过2倍频后作为TIM2的时钟源等于72MHzRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* GPIOA clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*GPIOA Configuration: TIM2 channel 3 and 4 as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);}/** 函数名:TIM2_Mode_Config* 描述 :配置TIM2输出的PWM信号的模式,如周期、极性、占空比* 输入 :无* 输出 :无* 调用 :内部调用*/
static void TIM2_Mode_Config(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/* PWM信号电平跳变值 */
// u16 CCR1_Val = 500;
// u16 CCR2_Val = 800;u16 CCR3_Val = 500;u16 CCR4_Val = 800;//u16 PrescalerValue;
/* -----------------------------------------------------------------------TIM2 Configuration: generate 4 PWM signals with 4 different duty cycles:TIM3CLK = 72 MHz, Prescaler = 0x0, TIM3 counter clock = 72 MHzTIM3 ARR Register = 71999 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)TIM3 Frequency = 1 KHz.CC1 update rate = TIM2 counter clock / CCR1_ValTIM3 Channelx duty cycle = (TIM2_CCRx/ TIM2_ARR)* 100 = x%----------------------------------------------------------------------- *//* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 1000 ; //ARR 当定时器从0计数到999,即为1000次,为一个定时周期TIM_TimeBaseStructure.TIM_Prescaler = 0; //设置预分频:不预分频,即为72MHzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);/* PWM2 Mode configuration: Channel3 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_Pulse = CCR3_Val; //设置跳变值,当计数器计数到这个值时,电平发生跳变TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于CCR1_Val时为高电平TIM_OC3Init(TIM2, &TIM_OCInitStructure); //使能通道3TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel4 */TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = CCR4_Val; //设置通道2的电平跳变值,输出另外一个占空比的PWMTIM_OC4Init(TIM2, &TIM_OCInitStructure); //使能通道4TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM2, ENABLE); // 使能TIM2重载寄存器ARR/* TIM2 enable counter */TIM_Cmd(TIM2, ENABLE); //使能定时器2
}void TIM2_PWM_Init(void)
{MOTOR_GPIO_Config();TIM2_GPIO_Config();TIM2_Mode_Config();
}int main()
{TIM2_PWM_Init();while(1){ TIM_SetCompare3(TIM2, 1000);TIM_SetCompare4(TIM2, 1000);}
}
STM32通过TB6612FNG模块驱动电机相关推荐
- 浅谈STM32的DMA模块的使用
浅谈STM32的DMA模块的使用 转自:http://blog.ednchina.com/jack_chang/123085/message.aspx http://article.ednchina. ...
- 使用STM32的USB模块中后对USB缓冲区的认识
最近在使用STM32的USB模块开发个项目,还以为挺简单,结果搞了快两天才把USB的包缓冲区的访问搞定,在此做个小总结吧. STM32的USB模块包缓冲区有512B,但是在STM32的参考手册中的存储 ...
- 基于STM32与GSM模块发送中英文短信
基于STM32与GSM模块发送中英文短信 最近在做毕业设计有用到GSM模块进行短信报警,模块的功能比较多这里就不介绍了,一般的拨打电话都很简单就只需要一条指令即可,发送英文短信也很简单也只要几条命令也 ...
- 基于STM32的ESP8266模块控制多路继电器
基于STM32的ESP8266模块控制多路继电器 1.视频讲解 基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制 物联网视频教程STM32+ESP8266 2.实物设计 ESP82 ...
- 【STM32训练—WiFi模块】第一篇、STM32驱动ESP8266WiFi模块获取网络时间
目录 第一部分.写在前面 1.硬件准备 2.相关的AT指令 3.参考博客 第二部分.电脑串口助手调试ESP8266模块获取网络时间 1.ESP8266获取时间的流程 2.具体实现步骤 第三部分.STM ...
- stm32与GPS模块的数据传输,最后把数据传回到电脑上
stm32与GPS模块的数据传输,最后把数据传回到电脑上 准备工作 GPS(G28Z2FTTL)模块介绍 GPS数据类型及格式 代码部分 串口初始化部分 GPS部分代码 数据展示 准备工作 stm32 ...
- STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换)
STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换) 目的是按下按键,短信发送 PDU转换网站 链接: PDU转换网站. 使用硬件: ··· 开发板:正点原子战舰V3 GSM模块: ...
- stm32利用TOFSense模块测距教程
stm32利用TOFSense模块测距教程 TOFSense是什么 简单来讲,TOFSense就是一个激光测距模块,它前面那个小小的黑框框就是它测距的地方即发射激光的地方.它有两种通讯方式:串口和ca ...
- stm32通过wifi模块实现手机远程控制灯与舵机
由于对wifi模块的控制需要,在网上找了许多资料,发现wifi模块通过单片机进行通讯的代码不多,也有一些存在着错误,于是便自己写了一个wifi控制舵机和灯的程序,记录下来 stm32通过wifi模块实 ...
最新文章
- 试图将驱动程序添加到存储区_Ubuntu 19.10IOS将捆绑NVIDIA驱动
- SQL Server 2012 sa 用户登录 18456 错误
- c语言十万以内超级素数,用C语言求素数的优化
- 软件调试学习笔记(七)—— 单步步入单步步过
- python定义距离_距离度量以及python实现(一)
- php用array_merge实现无限级分类
- js中的cookie使用和vue-cookie的使用
- 动态修改网页title
- C 语言实例 - 判断三边能否构成三角形
- Web加固linux,Linux系统下web服务器的加固
- 常用数据库的驱动程序加载和Url下载地址
- 企业手机装配线平衡改善研究
- 系统架构设计的十大原则
- qq红包裂变式引流?QQ群红包裂变吸粉引流
- Win11怎么以管理员身份运行?Win11以管理员身份运行的设置方法
- Latch的产生和避免
- ArcEngine 开发之ITopologicalOperator 处理奇葩问题解决
- 代码风格自动化(二)——husky + lint-staged
- 百家号自媒体如何提升文章质量,百家号怎么写好文章,百家号写文章技巧
- 语雀实现收藏网页的功能(借助印象笔记)