版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1.檢測霍爾傳感器的值可以判斷出轉(zhuǎn)子的位置, 再使能相應的上下橋臂,則能驅(qū)動電機運動; 若要讓電機持續(xù)轉(zhuǎn)動, 則必須再次檢測傳感器值及使能相應的上下橋臂。 這里采用的是將霍 爾傳感器輸出的三根線相邊的 10 口配置成外部中斷,并且為邊沿觸發(fā),在中斷函數(shù)中加入 傳感器檢測與上下橋臂切換程序,如此電機就能持續(xù)運轉(zhuǎn)了。 2上橋臂的控制采用10 口置高低電平來控制上橋臂的通斷,下橋臂則使用單片機內(nèi)部集成 的三路PWM波來控制,通過控制PWM波的占空比,可以實現(xiàn)對電機的調(diào)速了。 實際測得, 占空比與電機的速度成正比例關系,在 PWM波頻率為20KHZ時,占空比增加1%,速度增 加60rpm,并在占空比為
2、 53%時達到額定轉(zhuǎn)速3000rpm (空載)。 3. 速度測量則采用如下公式: 電機每轉(zhuǎn)一圈,霍爾值改變6次x5個周期=30次,記錄邊沿觸發(fā)的中斷次數(shù) N/30=電機轉(zhuǎn) 過的圈數(shù),設運轉(zhuǎn)時間為t(s)則電機轉(zhuǎn)速v=N/30/t*60 rpm 。即動轉(zhuǎn)時間為2s時,霍爾值改 變次數(shù)即為速度值,單位 rpm。 4. 調(diào)速:給定速度,由電機驅(qū)動板自動由當前速度平滑過渡到給定速度。實際測試發(fā)現(xiàn),速 度變化量很大時,電機會有突然加速或減速時的沖擊;因此, 調(diào)速應有一個緩沖的過程。即 加速或減速應以小步進緩慢增加或減少占空比來讓速度漸漸達到最終值。 #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; /* * * 函數(shù): void IO_Init(void) * 描述: IO * 參數(shù): * 返回: * 其它: * / 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); /* 函數(shù): void PWM_Init(void) 描述:配置 PWM 定時器 TIM1 參數(shù): 返回: 無 */ 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); /* * 函數(shù): void Motor_Init(void) 描述: 參數(shù): 返回: * */ void Motor_Init(
17、void) IO_Init(); PWM_Init(); /* * 函數(shù): void Flash_Led(u8 n) 描述: 參數(shù): 返回: * * 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; /* * 函數(shù): PWM_T_Output 描述:設置相應的 PWM 梯形波輸出 參數(shù): 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); /* * 函數(shù): PWM_T_Calculation 描述:梯形波計算 參數(shù): HallValue 霍爾值, mRate 調(diào)制百分比, 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; /* * 函數(shù): PWM_T_Int 描述:定時器中斷程序,根據(jù)霍爾位置設置輸出梯形波
24、參數(shù): direction= 順時針 /逆時針 ,mRate 調(diào)制率 返回:無 * */ 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); /* 函數(shù): PWM_Stop 描述: PWM 控制信號使能輸出 ,禁止 TIM1 中斷,使能 TIM1 中斷 參數(shù):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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《聊聊品牌那些事》課件
- 《視頻監(jiān)控學習資料》課件
- 協(xié)調(diào)科護士工作總結(jié)
- 家居裝飾行業(yè)行政后勤工作總結(jié)
- 銀行行業(yè)保安工作總結(jié)
- 黑龍江省哈爾濱市平房區(qū)2023-2024學年九年級上學期期末調(diào)研測試化學試卷
- 財務工作項目落實總結(jié)
- 旅游接待員工作總結(jié)
- 溫泉景區(qū)服務員工作總結(jié)
- 《清華土力學》課件
- 兒童涂色畫空白填色圖(100張文本打印版)
- 2024版合同及信息管理方案
- 壓縮空氣(教學設計)-2024-2025學年三年級上冊科學教科版
- JGT266-2011 泡沫混凝土標準規(guī)范
- 健康證體檢表
- 右心導管檢查及心血管造影ppt課件
- 大氣課程設計---袋式除塵器
- 市政橋梁工程施工
- 長線法節(jié)段梁預制施工方案wgm
- ProE5.0全套教程(完整版)
- 鋼筋混凝土框架結(jié)構(gòu)施工工藝(附施工圖)
評論
0/150
提交評論