版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、For pers onal use only in study and research; not for commercial useFor pers onal use only in study and research; not for commercial use1.检测霍尔传感器的值可以判断出转子的位置,再使能相应的上下桥臂,则能驱动电机运动;若要让电机持续转动,则必须再次检测传感器值及使能相应的上下桥臂。这里采用的是将霍尔传感器输出的三根线相边的10 口配置成外部中断,并且为边沿触发,在中断函数中加入传感器检测与上下桥臂切换程序,如此电机就能持续运转了。2上桥臂的控制采用IO 口置
2、高低电平来控制上桥臂的通断,下桥臂则使用单片机内部集成 的三路PWM波来控制,通过控制PWM波的占空比,可以实现对电机的调速了。实际测得,占空比与电机的速度成正比例关系,在PWM波频率为20KHZ时,占空比增加1%,速度增加60rpm,并在占空比为 53%时达到额定转速3000rpm (空载)。3. 速度测量则采用如下公式:电机每转一圈,霍尔值改变6次x5个周期=30次,记录边沿触发的中断次数 N/30=电机转 过的圈数,设运转时间为t(s)则电机转速v=N/30/t*60 rpm 。即动转时间为2s时,霍尔值改 变次数即为速度值,单位 rpm。4. 调速:给定速度,由电机驱动板自动由当前速度
3、平滑过渡到给定速度。实际测试发现,速度变化量很大时,电机会有突然加速或减速时的冲击;因此,调速应有一个缓冲的过程。即加速或减速应以小步进缓慢增加或减少占空比来让速度渐渐达到最终值。#include "stm32f10x.h"#in clude "driver_motor.h" #defi ne PWM_PERIOD_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
4、->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 #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 #d
5、efi 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 #defi ne SV_HOR GPIOA->IDR & GPIO_Pi n_12 #defi ne SW_HOR GPIOA->IDR & GPIO_Pin_11/u8 Motor_Dir=0;/u8
6、 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;EXTI_InitTypeDef EXTI_InitStructure;/GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); /* 使能 SW
7、D 禁 用 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_Mode=GPIO_Mode_IN_F
8、LOATING;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);/HarlGPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);EXTI_InitStructure.EXTI_L
9、ine = EXTI_Line11 | EXTI_Line12|EXTI_Line15; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); /* 函数: void PWM_Init(void) 描述:配置 PWM 定时器 TIM1 参数: 返回:无*/void PWM_
10、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_Pin_9 | GPIO_
11、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, GPI0_Pin_13 | GPI0_Pin_14 | GPI0_Pin_15);/厝通 10 口GPIO_Ini
12、tStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPI0_InitStructure.GPI0_Speed = GPI0_Speed_10MHz;GPI0_InitStructure.GPI0_Mode = GPI0_Mode_0ut_PP;GPI0_Init(GPI0B, &GPI0_InitStructure);/定时器设置TIM_TimeBaseInitStruct.TIM_Period = PWM_PERI0D_T;/5 极电机,3000RPM,每个 Step 有 10 个脉冲,载波 15KHZTIM
13、_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_Updat
14、e); /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
15、 = 1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;TIM_OC1Init(TIM1, &TIM_OCInitStructure);TIM_OC2Init(TIM1
16、, &TIM_OCInitStructure);TIM_OC3Init(TIM1, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM1, ENABLE);/ 使能 TIMx 在 ARR上的预装载寄存器 TIM_Cmd(TIM1 , ENABLE)
17、;TIM_Cmd(TIM1 , ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE); /*函数: void Motor_Init(void)描述:参数:返回:*/void Motor_Init(void)IO_Init(); PWM_Init(); /* 函数: void Flash_Led(u8 n)描述:参数:返回: */void Flash_Led(u8 n) u8 i=0; for(i=0;i<n;i+) Led_On;DelayMs(100*n);Led_Off;DelayMs(100*n);/*函数: void SetPWMduty(u8 PWM
18、Chanel,u16 pulse)描述:设置 pwm 波占空比参数:返回:*/void SetPWMduty(u8 PWMChanel,u16 pulse)switch(PWMChanel)case 1 :TIM1->CCR1=pulse;break;case 2 :TIM1->CCR2=pulse;break;case 3 :TIM1->CCR3=pulse;break;default :break;*函数: PWM_T_Output 描述:设置相应的 PWM 梯形波输出 参数: pName 上桥臂名称, nName 下桥臂名称 返回:无*/void PWM_T_Outpu
19、t(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 | GPIO_Pin_14 );
20、 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)
21、; 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);
22、/*函数: 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 , mRat
23、e); 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;elseswitch(hallValue)case 5:PWM_T_Output(3 , 1 , mRate);break;case 1:PWM_T_Output(2 , 1 , mRate);break;case 3:PWM_T_Outpu
24、t(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 , u
25、8 mRate)u8 hallValueTemp;u8 hallValue;GPIO_Pin_11) +hallValueTemp = GPIO_ReadInputDataBit(GPIOA, (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12) << 1) + (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) << 2);hallValue = hallValueTemp;PWM_T_Calculation(hallValue , mRate , direction);/*函数: PWM_Stop描述
26、: 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_IR
27、QChannel = 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_InitStr
28、ucture.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_
29、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
30、_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_
31、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_Cl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年太平人寿保险有限公司青岛分公司招聘备考题库及答案详解参考
- 2026年乳源瑶族自治县住房和城乡建设管理局公开招聘城市管理协管人员的备考题库含答案详解
- 2026年中山纪念中学火炬二中招聘语文、音乐临聘教师备考题库及参考答案详解1套
- 2026年成都市新都区部分单位公开招聘编外(聘用)人员7人的备考题库(二)附答案详解
- 2026年中国大地财产保险股份有限公司锡林郭勒中心支公司招聘备考题库参考答案详解
- 2026年义乌市胜利幼儿园招聘备考题库及答案详解一套
- 2026年中钞实业有限公司招聘备考题库及一套参考答案详解
- 2026年山东省妇幼保健公开招聘人员27人备考题库及答案详解一套
- 2026年哈尔滨德强学校招聘备考题库及完整答案详解一套
- 2026年国药国际医药科技(北京)有限公司招聘备考题库带答案详解
- 2025年合肥市档案馆公开招聘政府购买服务岗位人员2名备考考试试题及答案解析
- 成人泌尿造口护理团体标准解读2026
- 物料供应商遴选制度
- 多趾畸形护理查房
- 伊利并购澳优的财务绩效分析
- 胸腺瘤伴重症肌无力课件
- 安徽省合肥市蜀山区2024-2025学年上学期八年级数学期末试卷
- 电商售后客服主管述职报告
- 十五五安全生产规划思路
- 上海证券有限责任公司校招职位笔试历年参考题库附带答案详解
- 剪刀车专项施工方案
评论
0/150
提交评论