版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.检测霍尔传感器的值可以判断出转子的位置, 再使能相应的上下桥臂,则能驱动电机运动; 若要让电机持续转动, 则必须再次检测传感器值及使能相应的上下桥臂。 这里采用的是将霍 尔传感器输出的三根线相边的 10 口配置成外部中断,并且为边沿触发,在中断函数中加入 传感器检测与上下桥臂切换程序,如此电机就能持续运转了。 2上桥臂的控制采用10 口置高低电平来控制上桥臂的通断,下桥臂则使用单片机内部集成 的三路PWM波来控制,通过控制PWM波的占空比,可以实现对电机的调速了。 实际测得, 占空比与电机的速度成正比例关系,在 PWM波频率为20KHZ时,占空比增加1%,速度增 加60rpm,并在占空比为
2、 53%时达到额定转速3000rpm (空载)。 3. 速度测量则采用如下公式: 电机每转一圈,霍尔值改变6次x5个周期=30次,记录边沿触发的中断次数 N/30=电机转 过的圈数,设运转时间为t(s)则电机转速v=N/30/t*60 rpm 。即动转时间为2s时,霍尔值改 变次数即为速度值,单位 rpm。 4. 调速:给定速度,由电机驱动板自动由当前速度平滑过渡到给定速度。实际测试发现,速 度变化量很大时,电机会有突然加速或减速时的冲击;因此, 调速应有一个缓冲的过程。即 加速或减速应以小步进缓慢增加或减少占空比来让速度渐渐达到最终值。 #i nclude stm32f10 x.h #in
3、clude driver_motor.h #defi ne PWM_PERI0D_T 400 #defi ne U_Up_ On GPIOB-BSRR = GPIO_Pin_13 #defi ne U_Up_Off GPIOB-BRR = GPIO_Pin_13 #defi ne U_Dn_ On GPIOA-BSRR = GPIO_Pin_8 #defi ne U_Dn_Off GPIOA-BRR = GPIO_Pin_8 #defi ne V_Up_On GPIOB-BSRR = GPIO_Pin_14 #defi ne V_Up_Off GPIOB-BRR = GPIO_Pin_14 #
4、defi ne V_Dn_O n GPIOA-BSRR = GPIO_Pin_9 #defi ne V_Dn_Off GPIOA-BRR = GPIO_Pin_9 #defi ne W_Up_ On GPIOB-BSRR = GPIO_Pin_15 #defi ne W_Up_Off GPIOB-BRR = GPIO_Pin_15 #defi ne W_Dn_ On GPIOA-BSRR = GPIO_Pin_10 #defi ne W_Dn_Off GPIOA-BRR = GPIO_Pin_10 #defi ne SU_HOR GPIOA-IDR & GPIO_Pin_15 #def
5、i ne SV_HOR GPIOA-IDR & GPIO_Pi n_12 #defi ne SW_HOR GPIOA-IDR & GPIO_Pin_11 /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_InitType
6、Def GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStructure; /GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); /* 使能 SWD 禁 用 JTAG*/ 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)
7、; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStruct);/Harl GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11); GPIO_EXTILineConfig(GPIO_PortSourceGP
8、IOA, GPIO_PinSource12); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15); EXTI_InitStructure.EXTI_Line = EXTI_Line11 | EXTI_Line12|EXTI_Line15; * LED Light* * * 霍尔传感器中断 */ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EX
9、TI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* 函数: void PWM_Init(void) 描述:配置 PWM 定时器 TIM1 参数: 返回: 无 */ void PWM_Init(void) GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_OCInitTypeDef TIM_OCInitStructure; /TIM_BDTRInitTypeDef
10、TIM_BDTRInitStructure; TIM_Cmd(TIM1 , DISABLE); TIM_CtrlPWMOutputs(TIM1, DISABLE);/ 禁止 OC 输出 /IO 口设置 GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_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_InitStru
11、cture.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOB, GPI0_Pin_13 | GPI0_Pin_14 | GPI0_Pin_15);/厝通 10 口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPI0_InitStructure.GPI0_Speed = GPI0_Speed_10MHz; GPI0_InitStructure.GPI0_Mode =
12、GPI0_Mode_0ut_PP; GPI0_Init(GPI0B, &GPI0_InitStructure); /定时器设置 TIM_TimeBaseInitStruct.TIM_Period = PWM_PERI0D_T;/5 极电机,3000RPM,每个 Step 有 10 个脉冲,载波 15KHZ TIM_TimeBaseInitStruct.TIM_Prescaler = 2; TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode = TI
13、M_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1 , &TIM_TimeBaseInitStruct); /TIM_ClearITPendingBit(TIM1, TIM_IT_Update); /TIM_ARRPreloadConfig(TIM1, ENABLE); /TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); / 配置 PWM 输出 TIM_OCInitStructure.TIM_OCMode = TIM_OCM
14、ode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = 1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; TIM_OCInitSt
15、ructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set; TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_OC3Init(TIM1, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC2
16、PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); / 使能 TIMx 在 ARR上的 预装载寄存器 TIM_Cmd(TIM1 , ENABLE); TIM_Cmd(TIM1 , ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); /* * 函数: void Motor_Init(void) 描述: 参数: 返回: * */ void Motor_Init(
17、void) IO_Init(); PWM_Init(); /* * 函数: void Flash_Led(u8 n) 描述: 参数: 返回: * * void Flash_Led(u8 n) u8 i=0; for(i=0;iCCR1=pulse; break; case 2 : TIM1-CCR2=pulse; break; case 3 : TIM1-CCR3=pulse; break; default : break; /* * 函数: PWM_T_Output 描述:设置相应的 PWM 梯形波输出 参数: pName 上桥臂名称, nName 下桥臂名称 返回:无 * */ void
18、PWM_T_Output(u8 pName , u8 nName , u8 mRate) switch(pName) case 1: GPIO_SetBits(GPIOB, GPIO_Pin_15 | GPIO_Pin_14 ); GPIO_ResetBits(GPIOB , GPIO_Pin_13); break; case 2: GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_15 ); GPIO_ResetBits(GPIOB , GPIO_Pin_14); break; case 3: GPIO_SetBits(GPIOB, GPIO_Pin_13
19、 | 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);
20、 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_Se
21、tAutoreload(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 , mRat
22、e); 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
23、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 描述:定时器中断程序,根据霍尔位置设置输出梯形波
24、参数: 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; P
25、WM_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 输出 TI
26、M_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); GP
27、IO_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);
28、 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, &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 延安大学西安创新学院《普通心理学》2022-2023学年第一学期期末试卷
- 延安大学《中国古代文学(一)》2021-2022学年第一学期期末试卷
- 延安大学《心理学》2021-2022学年第一学期期末试卷
- 如何处理财务压力与焦虑计划
- 烟台大学《热力学与统计物理》2022-2023学年第一学期期末试卷
- 许昌学院《虚拟现实开源系统开发》2023-2024学年第一学期期末试卷
- 二年级数学计算题专项练习集锦
- 五年级数学(小数乘法)计算题专项练习及答案汇编
- 徐州工程学院《手工制作》2021-2022学年第一学期期末试卷
- 以美术教学引领学生风潮计划
- 肩胛骨骨折护理查房
- 分析《西游记》中的人性善恶
- 中国银行业监督管理委员会关于进一步提高数据质量做好非现场监管工作的通知-银监通200810号
- 课本含注音的注释汇总 统编版语文八年级上册
- 房屋建筑工程监理规划(范本-附带监理细则内容)
- 在线开放课程申报书(成功申报)
- 个人化健康管理服务系统
- 体育游泳比赛策划方案
- 特种设备锅炉日管控、周排查、月调度主要项目及内容表
- 2024届高考语文复习:牛油果人格与清水型人格写作指导
- 工会困难职工帮扶中心困难救助登记表
评论
0/150
提交评论