


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、8 u_d OEOU #S8A-<O一douo uq n u!pp4tw eLIU_dlo_doH #820一dokoldnln u 怎 p#帝 eLIUillo 一 doHQrQrs8A8o-douoldnln uu= p4t議00 寸-LIQO 正山 dllAIMd u!pp4t段=lr010EIe>p= pnQu 算w =LTXOLReE0 pnQu 算矍 wOL u_d o_doHQrQr8A-<o一doko UQ AA u!pp4tw 0LIU_dlo 一 doH #S8A-<O一doUolUQIM u!pp4t聯 9LIU_dlo一doHQrQr8A-8o_
2、doti=oldnl/A u!pp4t世 9LIU_dlo 一 doHQrQrs8A-8o_douodnIM u!pp4t崔 6lu_dlo_doHQrQr8A-<0一dot=olucr> u!pp4t牌 6lu_dlo_doH #S8A-<O一doUOIUQI> u!pp4t蠻 寸 LI u_dlo_doHQrQraAmo一dot=oldnl> u!pp4tw 寸 LIU_dlo一doH 一douoldnl> u!pp4t>M 8lu_dlo_doHQrQr8A-<0一dokolucrn u!pp4t蠻羆 #defi ne SU_HOR GPI
3、OA->IDR & GPI0_Pin_15羀 #defi ne SV_HOR GPIOA->IDR & GPI0_Pin_12莀 #defi ne SW_HOR GPIOA->IDR & GPIO_Pin_11羅肅莁 u8 Motor_Dir=0;螈肇 u8 Motor_EN=0;膅螂 u8 Hor_Value=7;薀 u16 TIM2_Co nter=O;螇 u16 Hall_Co nter=O;芅膃羈 MotorStruct Motor=CLOCK,40,STOP;薆莅/*薄* 函数: void IO_Init(void)虿* 描述: IO蕿 *
4、参数:莅 * 返回:蚀* 其它:*莇 void IO_Init(void)肁衿GPIO_InitTypeDef GPIO_InitStruct;膆EXTI_InitTypeDef EXTI_InitStructure;薅/GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);/* 使能 SWD 禁用 JTAG*/* LED Light* *羅 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12;蚅 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;袃 GPIO_InitStruc
5、t.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_FLOATING;袄 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;腿 GPIO_Init(GPIOA, &GPIO_InitStruct);/Harl蒆袄GPIO_EXTILi
6、neConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);袂GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12);羁GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);蕿羄EXTI_InitStructure.EXTI_Line = EXTI_Line11 | EXTI_Line12|EXTI_Line15;芃EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;莈 EXTI
7、_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;芈EXTI_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_TimeBaseInitSt
8、ruct;莄 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_Pin_10); /PWM 口莆 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GP
9、IO_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_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;薀GP
10、I0_InitStructure.GPI0_Speed = GPI0_Speed_10MHz;膈GPI0_InitStructure.GPI0_Mode = GPI0_Mode_0ut_PP;蚃GPI0_Init(GPI0B, &GPI0_InitStructure);羂莂/ 定时器设置羇 TIM_TimeBaselnitStruct.TIM_Period = PWM_PERI0D_T;/5 极电机,3000RPM,每个 Step 有 10 个脉冲,载波 15KHZ螃 TIM_TimeBaseInitStruct.TIM_Prescaler = 2;莃TIM_TimeBaseInitS
11、truct.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);蒁/TIM_ARRPreloadConfig(TIM1, ENABLE);螈/TIM_ITConfi
12、g(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 = 1;芁TIM_OCInitStructure.TIM_OCPolarity = TIM_OC
13、Polarity_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, &TIM_OCInitStructure);荿TIM_OC3Init(TIM1,
14、 &TIM_OCInitStructure);蒆肃 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);袁 TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);膈 TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); 薆/ 使能 TIMx 在 ARR 上蒄 TIM_ARRPreloadConfig(TIM1, ENABLE); 的预装载寄存器TIM_Cmd(TIM1 , ENABLE);艿 袇 TIM_Cmd(TIM1 , ENABLE);蚆 TIM
15、_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 PWMChan
16、el,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_
17、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
18、_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_SetCompar
19、e3(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(
20、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
21、 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)
22、莀羅 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_Out
23、put(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) <
24、< 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_Ini
25、tTypeDef 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_IRQChannelS
26、ubPriority = 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_In
27、itStructure);蚇 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_IRQChannelSubPri
28、ority = 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);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论