資源簡介
STM32控制步進電機勻加速勻減速,修改宏定義就可以控制起始頻率,目標頻率,加速時間和加速次數。

代碼片段和文件信息
#include?“stepmotor.h“
#if?STEP_MOTOR
StepMotorAddSpeed?MotorAddSpeed;
/*******************************************************************************
* 定時器4初始化函數
*
*函數名:void?TIM5_Int_Init(u16?arru16?psc)
*
*形參: arr? 預裝載值
psc 分頻系數
*
*返回值: 無
*
*
*******************************************************************************/
void?TIM4_Int_Init(u16?arru16?psc)
{
GPIO_InitTypeDef?GPIO_InitStructure;
TIM_TimebaseInitTypeDef??TIM_TimebaseStructure;
TIM_OCInitTypeDef??TIM_OCInitStructure;
?
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4?ENABLE); //使能定時器3時鐘
? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB??|?RCC_APB2Periph_AFIO?ENABLE);??//使能GPIO外設和AFIO復用功能模塊時鐘?
?
???//設置該引腳為復用輸出功能輸出TIM4?CH3的PWM脈沖波形 GPIOB.8
GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_8;? //TIM_CH2
GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;?? //復用推挽輸出
GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
GPIO_Init(GPIOB?&GPIO_InitStructure); //初始化GPIO
?
???//初始化TIM4
TIM_TimebaseStructure.TIM_Period?=?arr;? //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimebaseStructure.TIM_Prescaler?=psc;? //設置用來作為TIMx時鐘頻率除數的預分頻值?
TIM_TimebaseStructure.TIM_ClockDivision?=?0;? //設置時鐘分割:TDTS?=?Tck_tim
TIM_TimebaseStructure.TIM_CounterMode?=?TIM_CounterMode_Up;?? //TIM向上計數模式
TIM_TimebaseInit(TIM4?&TIM_TimebaseStructure);? //根據TIM_TimebaseInitStruct中指定的參數初始化TIMx的時間基數單位
//初始化TIM3?Channel2?PWM模式 ?
TIM_OCInitStructure.TIM_OCMode?=?TIM_OCMode_PWM1;? //選擇定時器模式:TIM脈沖寬度調制模式2
? TIM_OCInitStructure.TIM_OutputState?=?TIM_OutputState_Enable;? //比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity?=?TIM_OCPolarity_High;? //輸出極性:TIM輸出比較極性高
TIM_OC3Init(TIM4?&TIM_OCInitStructure);?? //根據T指定的參數初始化外設TIM3?OC2
?
TIM_OC3PreloadConfig(TIM4?TIM_OCPreload_Enable);? ?//使能TIM3在CCR2上的預裝載寄存器
?
// TIM_Cmd(TIM4?ENABLE);??//使能TIM4
}
u32?PluseNum?=?0;
/*******************************************************************************
* 步進電機初始化
*
*函數名:void?MotorInit(void)
*
*形參: 無
*
*返回值: 無
*
*
*******************************************************************************/
void?MotorInit(void)
{
GPIO_InitTypeDef??GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD?ENABLE); ?
GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;??//推挽輸出
GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;?
GPIO_Init(GPIOE?&GPIO_InitStructure);
GPIO_ResetBits(GPIOEGPIO_Pin_14|GPIO_Pin_15);
GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;??//推挽輸出
GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;?
GPIO_Init(GPIOB?&GPIO_InitStructure);
GPIO_SetBits(GPIOBGPIO_Pin_11);
GPIO_ResetBits(GPIOBGPIO_Pin_10);
MF?=?0;
DIR?=?1;
DE?=?0;
TIM3_Int_Init(1000-1); //計算PWM波的脈沖來進入中斷
TIM4_Int_Init(100071); //1Mhz.1ms一個10us的脈沖?步進電機的脈沖必須大于2.5us
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-04-15?20:57??步進電機梯形加速算法\MOTOR_B\
?????文件???????11512??2019-04-15?21:03??步進電機梯形加速算法\MOTOR_B\stepmotor.c
?????文件????????2293??2019-04-15?17:47??步進電機梯形加速算法\MOTOR_B\stepmotor.h
?????文件??????786542??2019-04-11?23:25??步進電機梯形加速算法\幾種步進電機加減速方法的對比研究及其應用.pdf
?????文件?????1838596??2019-04-11?20:22??步進電機梯形加速算法\基于AT91SAM9261的步進電機S曲線_加減速控制研究與實現.pdf
?????文件??????664839??2019-04-11?23:25??步進電機梯形加速算法\基于S曲線的步進電機加減速的控制.pdf
?????目錄???????????0??2019-04-15?21:17??步進電機梯形加速算法\
評論
共有 條評論