步进电机-STM32高级定时器输出正弦波pwm控制四相五线步进电机

本文主要是介绍步进电机-STM32高级定时器输出正弦波pwm控制四相五线步进电机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面的文章介绍了单片机控制步进电机四相四拍、四相八拍的方式。用的是持续电平驱动,这种驱动方式电机的噪音大,震动明显,正弦波驱动方式,这种方式能很好的解决噪音和震动问题。前面的文章也介绍了使用定时器产生符合正弦波规律的PWM,下面教大家用正弦波替代持续电平。

这是定时器的配置部分,里面配置了PWM的输出IO管脚,配置了定时器,配置了定时器更新中断。

void TIM_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period=512;	TIM_TimeBaseStructure.TIM_Prescaler= 7;	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;		TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;		TIM_TimeBaseStructure.TIM_RepetitionCounter=0;	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_Pulse=512;                 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM1, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC2Init(TIM1, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC3Init(TIM1, &TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC4Init(TIM1, &TIM_OCInitStructure);TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM1, ENABLE);	TIM_Cmd(TIM1, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);		 										TIM_CtrlPWMOutputs(TIM1,ENABLE);TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);										
}

定时器更新中断按照四相四拍的要求使能或禁止定时器PWM输出,代码如下

void TIM1_UP_IRQHandler(void)
{	if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)	{		pwm_index++;if(pwm_index>35){pwm_index=0;pwm_count++;if(pwm_count>3)pwm_count=0;if(pwm_count==0)TIM1->CCER=0x2ABB;if(pwm_count==1)TIM1->CCER=0x2BBA;if(pwm_count==2)TIM1->CCER=0x3BAA;if(pwm_count==3)TIM1->CCER=0x3AAB;}TIM1->CCR1 = indexWave[pwm_index];	TIM1->CCR2 = indexWave[pwm_index];	TIM1->CCR3 = indexWave[pwm_index];	TIM1->CCR4 = indexWave[pwm_index];TIM_ClearITPendingBit (TIM1, TIM_IT_Update);	}
}

至此完成了四相四拍的正弦波驱动,实验证明,正弦波驱动步进电机噪音和震动明显减小

这是PWM输出的波形图

 

这是实物图

这篇关于步进电机-STM32高级定时器输出正弦波pwm控制四相五线步进电机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563798

相关文章

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制