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

上传人:M****1 文档编号:512146956 上传时间:2023-10-22 格式:DOC 页数:10 大小:44KB
返回 下载 相关 举报
三相直流无刷电机驱动程序_第1页
第1页 / 共10页
三相直流无刷电机驱动程序_第2页
第2页 / 共10页
三相直流无刷电机驱动程序_第3页
第3页 / 共10页
三相直流无刷电机驱动程序_第4页
第4页 / 共10页
三相直流无刷电机驱动程序_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《三相直流无刷电机驱动程序》由会员分享,可在线阅读,更多相关《三相直流无刷电机驱动程序(10页珍藏版)》请在金锄头文库上搜索。

1、-1.检测霍尔传感器的值可以判断出转子的位置,再使能相应的上下桥臂,则能驱动电机运动;假设要让电机持续转动,则必须再次检测传感器值及使能相应的上下桥臂。这里采用的是将霍尔传感器输出的三根线相边的IO口配置成外部中断,并且为边沿触发,在中断函数中参加传感器检测与上下桥臂切换程序,如此电机就能持续运转了。2.上桥臂的控制采用IO口置上下电平来控制上桥臂的通断,下桥臂则使用单片机部集成的三路PWM波来控制,通过控制PWM波的占空比,可以实现对电机的调速了。实际测得,占空比与电机的速度成正比例关系,在PWM波频率为20KHz时,占空比增加1%,速度增加60rpm,并在占空比为53%时到达额定转速300

2、0rpm空载。3.速度测量则采用如下公式:电机每转一圈,霍尔值改变6次*5个周期=30次,记录边沿触发的中断次数N/30=电机转 过的圈数,设运转时间为t(s)则电机转速v=N/30/t*60 rpm。即动转时间为2s时,霍尔值改变次数即为速度值,单位rpm。4.调速:给定速度,由电机驱动板自动由当前速度平滑过渡到给定速度。实际测试发现,速度变化量很大时,电时机有突然加速或减速时的冲击;因此,调速应有一个缓冲的过程。即加速或减速应以小步进缓慢增加或减少占空比来让速度渐渐到达最终值。*include stm32f10*.h*include driver_motor.h*define PWM_PE

3、RIOD_T 400*define U_Up_On GPIOB-BSRR = GPIO_Pin_13*define U_Up_Off GPIOB-BRR = GPIO_Pin_13*define U_Dn_On GPIOA-BSRR = GPIO_Pin_8*define U_Dn_Off GPIOA-BRR = GPIO_Pin_8*define V_Up_On GPIOB-BSRR = GPIO_Pin_14*define V_Up_Off GPIOB-BRR = GPIO_Pin_14*define V_Dn_On GPIOA-BSRR = GPIO_Pin_9*define V_Dn_

4、Off GPIOA-BRR = GPIO_Pin_9*define W_Up_On GPIOB-BSRR = GPIO_Pin_15*define W_Up_Off GPIOB-BRR = GPIO_Pin_15*define W_Dn_On GPIOA-BSRR = GPIO_Pin_10*define W_Dn_Off GPIOA-BRR = GPIO_Pin_10*define SU_HOR GPIOA-IDR & GPIO_Pin_15*define SV_HOR GPIOA-IDR & GPIO_Pin_12*define SW_HOR GPIOA-IDR & GPIO_Pin_11

5、/u8 Motor_Dir=0;/u8 Motor_EN=0;/u8 Hor_Value=7;/u16 TIM2_Conter=0;u16 Hall_Conter=0;MotorStruct Motor=CLOCK,40,STOP;/* 函数:void IO_Init(void)* 描述:IO* 参数:* 返回:* 其它:*/void IO_Init(void) GPIO_InitTypeDef GPIO_InitStruct; E*TI_InitTypeDef E*TI_InitStructure; /GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisabl

6、e, ENABLE); /*使能SWD 禁用JTAG*/ /*LED Light*/ GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); /*霍尔传感器中断*/ GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15; GPIO_InitStruct.GPIO_

7、Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStruct);/Harl GPIO_E*TILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);GPIO_E*TILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12); GPIO_E*TILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15); E*TI_

8、InitStructure.E*TI_Line = E*TI_Line11 | E*TI_Line12|E*TI_Line15; E*TI_InitStructure.E*TI_Mode = E*TI_Mode_Interrupt; E*TI_InitStructure.E*TI_Trigger = E*TI_Trigger_Rising_Falling; E*TI_InitStructure.E*TI_LineCmd = ENABLE; E*TI_Init(&E*TI_InitStructure); /*函数:void PWM_Init(void)描述:配置PWM定时器TIM1参数:返回:无

9、*/void PWM_Init(void) GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_OCInitTypeDef TIM_OCInitStructure;/TIM_BDTRInitTypeDef TIM_BDTRInitStructure; TIM_Cmd(TIM1 , DISABLE); TIM_CtrlPWMOutputs(TIM1, DISABLE);/制止OC输出 /IO口设置 GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO

10、_Pin_9 | GPIO_Pin_10); /PWM口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);/普通IO口

11、GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); /定时器设置 TIM_TimeBaseInitStruct.TIM_Period = PWM_PERIOD_T;/5极电机,3000RPM,每个Step有10个脉冲,载波15KHZ TI

12、M_TimeBaseInitStruct.TIM_Prescaler = 2; TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1 , &TIM_TimeBaseInitStruct); /TIM_ClearITPendingBit(TIM1, TIM_IT_Update)

13、; /TIM_ARRPreloadConfig(TIM1, ENABLE); /TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); /配置PWM输出 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse =

14、 1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OCInitStructure.TIM_OPolarity = TIM_OPolarity_Low; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OIdleState = TIM_OIdleState_Set; TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_OC3Init(TIM1,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号