高级会员

- 积分
- 986
- 金钱
- 986
- 注册时间
- 2017-4-3
- 在线时间
- 118 小时
|

楼主 |
发表于 2017-4-28 13:29:49
|
显示全部楼层
#include "stm32f10x.h"
#include "motor.h"
#include "sys.h"
//×óÂÖ3õê¼»ˉ
void MotorDriver_L_Config(void){
GPIO_InitTypeDef GPIO_InitStructure ;
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/*ê1ÄüGPIOB¡¢TIM4íaéèê±Öó*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1, ENABLE);
/*3õê¼»ˉPB6¶Ë¿úÎaOut_PPÄ£ê½*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*3õê¼»ˉPB8¶Ë¿úÎaOut_PPÄ£ê½*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*3õê¼»ˉPA7¶Ë¿ú(TIM4_CH2)ÎaAF_PPÄ£ê½íÆíìêä3ö*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*¶¨ê±Æ÷»ù±¾ÅäÖÃtime3 μÄ ch2í¨μà*/
TIM_BaseInitStructure.TIM_Prescaler = 3-1; //ê±ÖóÔ¤·ÖÆμêy3,TIM8μļÆêyê±ÖóÆμÂêÎa24MHz
TIM_BaseInitStructure.TIM_Period = 1000-1; //×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷êyÖμ,PWM2ÆμÂêÎa24MHz/1000=24KHz
TIM_BaseInitStructure.TIM_ClockDivision = 0; //2éÑù·ÖÆμ
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòéϼÆêy
TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /*PWM2 ch2êä3öÄ£ê½ WMÄ£ê½2£- ÔúÏòéϼÆêyê±£¬
ò»μ©TIMx_CNT<TIMx_CCR1ê±í¨μà1ÎaÎTD§μçÆ½£¬·ñÔòÎa
óDD§μçÆ½£»ÔúÏòϼÆêyê±£¬ò»μ©TIMx_CNT>TIMx_CCR1ê±í¨μà1ÎaóDD§μçÆ½
£¬·ñÔòÎaÎTD§μçÆ½¡£*/
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //ê1Äü¸Ãí¨μàêä3ö
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ
TIM_OC4Init(TIM1, &TIM_OCInitStructure); //°′Ö¸¶¨2Îêy3õê¼»ˉ
TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable); //ê1ÄüTIM8ÔúCCRéÏμÄÔ¤×°ÔØ¼Ä′æÆ÷
TIM_ARRPreloadConfig(TIM1, ENABLE); //ê1ÄüTIM8ÔúARRéÏμÄÔ¤×°ÔØ¼Ä′æÆ÷
TIM_Cmd(TIM1, ENABLE); //ê1ÄüTIM8
}
//óòÂÖ3õê¼»ˉ
void MotorDriver_R_Config(void){
GPIO_InitTypeDef GPIO_InitStructure ;
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/*ê1ÄüGPIOc¡¢TIM8íaéèê±Öó*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_TIM8, ENABLE);
/*3õê¼»ˉPB10¶Ë¿úÎaOut_PPÄ£ê½*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*3õê¼»ˉPB.111¶Ë¿úÎaOut_PPÄ£ê½*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*3õê¼»ˉPC.09¶Ë¿ú(TIM8_CH4)ÎaAF_PPÄ£ê½*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*¶¨ê±Æ÷»ù±¾ÅäÖÃtime8 μÄ ch4í¨μà*/
TIM_BaseInitStructure.TIM_Prescaler = 3-1; //ê±ÖóÔ¤·ÖÆμêypsc=3,TIM8μļÆêyê±ÖóÆμÂêÎa24MHz
TIM_BaseInitStructure.TIM_Period = 1000-1; //×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷êyÖμarr=1000,PWM2ÆμÂêÎa24MHz/1000=24KHz
TIM_BaseInitStructure.TIM_ClockDivision = 0; //2éÑù·ÖÆμ
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòéϼÆêy
TIM_TimeBaseInit(TIM8, &TIM_BaseInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM2 ch2êä3öÄ£ê½
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //ê1Äü¸Ãí¨μàêä3ö
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ
TIM_OC4Init(TIM8, &TIM_OCInitStructure); //°′Ö¸¶¨2Îêy3õê¼»ˉ
TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable); //ê1ÄüTIM8ÔúCCRéÏμÄÔ¤×°ÔØ¼Ä′æÆ÷
TIM_ARRPreloadConfig(TIM8, ENABLE); //ê1ÄüTIM8ÔúARRéÏμÄÔ¤×°ÔØ¼Ä′æÆ÷
TIM_Cmd(TIM8, ENABLE); //′ò¿aTIM8
}
void MotorDriver_L_Turn_Forward(void){ //×óÂÖμç»úÕy×a
IN1=1;
IN2=0;
}
void MotorDriver_L_Turn_Reverse(void){ //×óÂÖμç»ú·′×a
IN1=0;
IN2=1;
}
void MotorDriver_R_Turn_Forward(void){ //óòÂÖμç»úÕy×a
IN3=1;
IN4=0;
}
void MotorDriver_R_Turn_Reverse(void){ //óòÂÖμç»ú·′×a
IN3=0;
IN4=1;
}
void MotorDriver_L_Turn_Stop(void) //×óÂÖμç»úÖÆ¶ˉ
{
IN1=0;
IN2=0;
}
void MotorDriver_R_Turn_Stop(void) //óòÂÖμç»úÖÆ¶ˉ
{
IN3=0;
IN4=0;
}
void MotorDriver_Init(void){
MotorDriver_R_Config();
MotorDriver_L_Config();
MotorDriver_L_Turn_Stop(); //×óÂÖμç»úÖÆ¶ˉ
MotorDriver_R_Turn_Stop(); //óòÂÖμç»úÖÆ¶ˉ
}
|
|