好文档 - 专业文书写作范文服务资料分享网站

三相直流无刷电机驱动程序

天下 分享 时间: 加入收藏 我要投稿 点赞

GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_15 ); GPIO_ResetBits(GPIOB , GPIO_Pin_14); break; case 3:

GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 ); GPIO_ResetBits(GPIOB , GPIO_Pin_15); break; default:

GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); }

switch(nName) {

case 1:

TIM_SetCompare2(TIM1,0); TIM_SetCompare3(TIM1,0);

TIM_SetCompare1(TIM1,(u16)(PWM_PERIOD_T * mRate / 100)); break; case 2:

TIM_SetCompare3(TIM1,0); TIM_SetCompare1(TIM1,0);

TIM_SetCompare2(TIM1,(u16)(PWM_PERIOD_T * mRate / 100)); break; case 3:

TIM_SetCompare2(TIM1,0); TIM_SetCompare1(TIM1,0);

TIM_SetCompare3(TIM1,(u16)(PWM_PERIOD_T * mRate / 100)); break; default:

TIM_SetCompare1(TIM1,0); TIM_SetCompare2(TIM1,0); TIM_SetCompare3(TIM1,0); }

TIM_SetAutoreload(TIM1, PWM_PERIOD_T); }

/***************************************************************************************** 函数:PWM_T_Calculation 描述:梯形波计算

参数:HallValue霍尔值,mRate调制百分比,direction方向 返回:无

*****************************************************************************************/ void PWM_T_Calculation(u8 hallValue , u8 mRate , u8 direction) {

if(direction == 1) {

switch(hallValue) { case 5:

PWM_T_Output(1 , 3 , mRate); break; case 1:

PWM_T_Output(1 , 2 , mRate); break; case 3:

PWM_T_Output(3 , 2 , mRate); break; case 2:

PWM_T_Output(3 , 1 , mRate); break; case 6:

PWM_T_Output(2 , 1 , mRate); break; case 4:

PWM_T_Output(2 , 3 , mRate); break; default:

PWM_T_Output(4 , 4 , 0); break; } } else {

switch(hallValue) {

case 5:

PWM_T_Output(3 , 1 , mRate); break; case 1:

PWM_T_Output(2 , 1 , mRate); break; case 3:

PWM_T_Output(2 , 3 , mRate); break; case 2:

PWM_T_Output(1 , 3 , mRate); break; case 6:

PWM_T_Output(1 , 2 , mRate); break; case 4:

PWM_T_Output(3 , 2 , mRate); break; default:

PWM_T_Output(4 , 4 , 0); break; } } }

/******************************************************************************* 函数:PWM_T_Int

描述:定时器中断程序,根据霍尔位置设置输出梯形波 参数:direction=顺时针/逆时针,mRate调制率 返回:无

********************************************************************************/ void PWM_T_Int(u8 direction , u8 mRate) {

u8 hallValueTemp; u8 hallValue; hallValueTemp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) + (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12) << 1) + (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) << 2);

hallValue = hallValueTemp;

PWM_T_Calculation(hallValue , mRate , direction); }

/************************************************************************ 函数:PWM_Stop

描述:PWM控制信号使能输出,禁止TIM1中断,使能TIM1中断

参数:pwmflag=DISABLE,PWM信号使能输出,pwmflag=ENABLE,禁止 PWM输出 返回:无

*************************************************************************/ void PWM_Stop(u8 pwmflag) {

NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;

if(pwmflag == ENABLE)//禁止 PWM输出 {

TIM_Cmd(TIM1 , DISABLE); //TIM_Cmd(TIM2 , DISABLE);

NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM16_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE; NVIC_Init(&NVIC_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10); //PWM口

//PWM_T_Output(4 , 4 , 0); }

if(pwmflag == DISABLE)//使能PWM输出 {

NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM16_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOA, &GPIO_InitStructure);

// TIM_Cmd(TIM2 , ENABLE); } }

/***************************************************************************************** 函数:void Motor_Start(void) 描述:启动电机 参数: 返回:

*****************************************************************************************/ void Motor_Start(void) {

PWM_T_Int(Motor.Dir,Motor.Speed); }

/*****************************************************************************************

函数:void Motor_Stop(void) 描述:停止 参数: 返回:

*****************************************************************************************/ void Motor_Stop(void) {

//U_Up_On;V_Up_On;W_Up_On; //U_Dn_On;V_Dn_On;W_Dn_On; PWM_T_Output(4,4,0); }

/***************************************************************************************** 函数:void EXTI15_10_IRQHandler(u8 dir,u8 hall) 描述:霍尔传感器中断 参数: 返回:

*****************************************************************************************/ void EXTI15_10_IRQHandler(void) {

Hall_Conter++;

if ((EXTI_GetITStatus(EXTI_Line11) != RESET)||(EXTI_GetITStatus(EXTI_Line12) != RESET)||(EXTI_GetITStatus(EXTI_Line15) != RESET)) {

if(Motor.State!=STOP)

PWM_T_Int(Motor.Dir,Motor.Speed); }

EXTI_ClearITPendingBit(EXTI_Line11); //清除标志 EXTI_ClearITPendingBit(EXTI_Line12); //清除标志 EXTI_ClearITPendingBit(EXTI_Line15); //清除标志 }

/***************************************************************************************** 函数:void Test_Motor(u8 dir,u8 hall) 描述:电机控制 参数: 返回:

*****************************************************************************************/ void Test_Motor(void) {

while(1) {

switch(Motor.State) {

case STOP :

Motor_Stop(); break; case RUN :

Motor_Start();

Motor.State=FREE; break; default : break; } } }

您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。

三相直流无刷电机驱动程序

GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_15);GPIO_ResetBits(GPIOB,GPIO_Pin_14);break;case3:GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14);
推荐度:
点击下载文档文档为doc格式
05csq7wsgz2teb88j4i568ub00wtu60062w
领取福利

微信扫码领取福利

微信扫码分享