版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 STM32控制編碼器電機(jī)實(shí)現(xiàn)【速度閉環(huán)控制】與【位置閉環(huán)控制】、硬件及接線說(shuō)明本實(shí)驗(yàn)所基于的硬件分別為:STM32F103C8T6 主控板TB6612FNG 直流電機(jī)驅(qū)動(dòng)模塊6線正交編碼器電機(jī)(帶AB相)其中硬件接線為:PWMA PA8AIN1 PB14AIN2 PB15STBY 5V編碼器A相 PA1編碼器B相 PA0STM32定時(shí)器資源分配:定時(shí)器1(TIM1):產(chǎn)PWM波,作為TB6612的輸,控制電機(jī)進(jìn)調(diào)速;定時(shí)器2(TIM2):讀取編碼器的波形;定時(shí)器3(TIM3):產(chǎn)周期為10ms的定時(shí)器中斷,為控制系統(tǒng)提供穩(wěn)定的時(shí)間基準(zhǔn)?!菊f(shuō)明】上述硬件平臺(tái)和接線僅給讀者提供參考,更換主控或接
2、線式,請(qǐng)對(duì)例程序進(jìn)微調(diào)。本對(duì)于編碼器的作原理不加贅述,對(duì)于其原理請(qǐng)讀者查閱相關(guān)資料。、速度閉環(huán)控制程序邏輯【說(shuō)明】下述程序中 control.c 最為重要,包含了速度閉環(huán)控制器的詳細(xì)代碼。其他程序模塊供讀者初始化參考。main.c (主函數(shù))12u8 flag_Stop=1; /停標(biāo)志位/編碼器的脈沖計(jì)數(shù)/電機(jī)PWM變量34567/=延時(shí)初始化8LED_Init();/=初始化與LED 連接的硬件接/=初始化串19101112131415161718/初始化控制電機(jī)所需的IO/初始化pwm輸出/初始化計(jì)數(shù)器(定時(shí)器)TIM3_Int_Init (99,7199); /10ms次中斷printf
3、(Encoder:%d rn,Encoder);moto.c (電機(jī)初始化相關(guān)函數(shù)) 12void MOTO_Init(void)/初始化控制電機(jī)所需的IO3GPIO_InitTypeDef GPIO_InitStruct ;4RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);/PORTB12 13 14 15推挽輸出56789101112131415161718192021222324252627282930313233343536373839404142434445void pwm_Init(u16 arr,u16 psc) /初始化p
4、wm輸出引腳RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); /使能定時(shí)器1時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /使能GPIOA的時(shí)鐘TIM_TimeBaseInitStruct .TIM_Period = arr;TIM_TimeBaseInitStruct .TIM_Prescaler = psc;TIM_TimeBaseInitStruct .TIM_CounterMode = TIM_CounterMode_Up ; /TIM向上計(jì)數(shù)模式TIM_OCInitS
5、truct.TIM_OCMode = TIM_OCMode_PWM2 ;/選擇PWM2模式TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable ; /較輸出使能TIM_OCInitStruct.TIM_Pulse = 0;/設(shè)置待裝捕獲較寄存器的脈沖值TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM1,&TIM_OCInitStruct);/初始化輸出較參數(shù)TIM_OC1PreloadConfig (TIM1,TIM_OCPreload_Ena
6、ble ); /CH1使能預(yù)裝載寄存器TIM_CtrlPWMOutputs(TIM1,ENABLE);TIM_ARRPreloadConfig(TIM1, ENABLE);TIM_Cmd(TIM1,ENABLE);/級(jí)定時(shí)器輸出必須設(shè)置這句/使能TIM1在ARR上的預(yù)裝載寄存器/使能定時(shí)器1encoder.c (編碼器初始化函數(shù)) 12/*函數(shù)功能:把TIM2初始化為編碼器接模式參數(shù):34返回 值:56void Encoder_Init_TIM2 (void)78910111213141516171819202122232425262728293031323334353637383940414
7、2434445464748GPIO_InitTypeDef GPIO_InitStructure ;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);/使能定時(shí)器2的時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/使 能PA端時(shí)鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; /端配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; /浮空輸/根據(jù)設(shè)定參數(shù)初始化
8、GPIOBTIM_TimeBaseStructure .TIM_Period = ENCODER_TIM_PERIOD-1; /設(shè)定計(jì)數(shù)器動(dòng)重裝值TIM_TimeBaseStructure .TIM_ClockDivision = TIM_CKD_DIV1;/選擇時(shí)鐘分頻:不分頻TIM_TimeBaseStructure .TIM_CounterMode = TIM_CounterMode_CenterAligned1 ;TIM向上計(jì)數(shù)TIM_TimeBaseInit (TIM2, &TIM_TimeBaseStructure );TIM_EncoderInterfaceConfig (TIM
9、2, TIM_EncoderMode_TI12 , TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);/使編碼器模式3TIM_ICStructInit(&TIM_ICInitStructure ); /把TIM_ICInitStruct 中的每個(gè)參數(shù)按缺省值填TIM_ICInitStructure .TIM_ICFilter = 10; /設(shè)置濾波器長(zhǎng)度TIM_ICInit(TIM2, &TIM_ICInitStructure ); /根據(jù) TIM_ICInitStruct 的參數(shù)初始化外設(shè)TIMxTIM_ClearFlag (TIM2, TIM_FL
10、AG_Update );/清除TIM的更新標(biāo)志位TIM_ITConfig(TIM2, TIM_IT_Update , ENABLE);/使能定時(shí)器中斷TIM_SetCounter (TIM2,0);/設(shè) 置TIMx 計(jì)數(shù)器寄存器值TIM_Cmd(TIM2, ENABLE); /使能定時(shí)器2/中斷處理函數(shù)為空,清除中斷標(biāo)志位后結(jié)束中斷void TIM2_IRQHandler (void)if(TIM_GetFlagStatus (TIM2,TIM_FLAG_Update )=SET)/溢出中斷TIM_ClearITPendingBit (TIM2,TIM_IT_Update ); /清除中斷標(biāo)志
11、位/*函數(shù)功能:?jiǎn)挝粫r(shí)間讀取編碼器計(jì)數(shù)49 參數(shù):定時(shí)器返回 值:速度值50*/515253int Encoder_TIM;54switch(TIMX)55565758596061626364 timer.c (定時(shí)器中斷初始化函數(shù))123456789101112131415161718192021222324252627TIM_TimeBaseInitStruct .TIM_Period = arr; /重裝載值TIM_TimeBaseInitStruct .TIM_Prescaler = psc; /預(yù)分頻系數(shù)TIM_TimeBaseInitStruct .TIM_ClockDivisio
12、n =0; /時(shí)鐘分割TIM_TimeBaseInitStruct .TIM_CounterMode = TIM_CounterMode_Up ; /TIM向上計(jì)數(shù)模式TIM_TimeBaseInit (TIM3,&TIM_TimeBaseInitStruct );TIM_ITConfig(TIM3,TIM_IT_Update ,ENABLE); /使能定時(shí)器中斷NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; /使能外部中斷通道NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; /使能外部中斷通道NVIC_Init
13、Struct.NVIC_IRQChannelPreemptionPriority = 1; /搶占優(yōu)先級(jí)1NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; /響應(yīng)優(yōu)先級(jí)3NVIC_Init(&NVIC_InitStruct);TIM_Cmd(TIM3,ENABLE); /使能定時(shí)器3control.c (核控制程序,此模塊程序可供讀者詳細(xì)閱讀)12#include control.hint Target_velocity=50; /設(shè)定速度控制的標(biāo)速度為50個(gè)脈沖每10ms34int TIM3_IRQHandler (void)5678TIM_Cl
14、earITPendingBit (TIM3,TIM_IT_Update );/=清除定時(shí)器3中斷標(biāo)志位/取定時(shí)器2計(jì)數(shù)器的值/LED閃爍910111213141516moto=Incremental_PI(Encoder,Target_velocity); /=速度PID控制器Xianfu_Pwm();Set_Pwm(moto);return 0;17 /*函數(shù)功能:賦值給PWM寄存器參數(shù):PWM返回 值:1819202122232425262728void Set_Pwm(int moto)/賦值給PWM寄存器else返回 值:30 30313233343536373839int Ampli
15、tude=7100; /=PWM滿幅是7200 限制在7100if(motoAmplitude) moto = Amplitude;4344454647484950515253545556e(k)代表本次偏差e(k-1)代表上次的偏差 以此類推pwm代表增量輸出在我們的速度控制閉環(huán)系統(tǒng),只使PI控制57 pwm+=Kpe(k)-e(k-1)+Ki*e(k)58 */59 int Incremental_PI (int Encoder,int Target)60616263646566676869float Kp=20,Ki=30;Pwm+=Kp*(Bias-Last_bias)+Ki*Bias
16、; /增量式PI控制器/保存上次偏差/增量輸出三、位置閉環(huán)控制程序邏輯【說(shuō)明】下述程序中 control.c 最為重要,包含了速度閉環(huán)控制器的詳細(xì)代碼。其他程序模塊供讀者初始化參考。main.c 12u8 flag_Stop=1; /停標(biāo)志位int Encoder,Position=10000;/編碼器的脈沖計(jì)數(shù)3/電機(jī)PWM變量4567/=延時(shí)初始化8/=初始化與LED 連接的硬件接/=初始化串19101112131415161718/初始化控制電機(jī)所需的IO/初始化pwm輸出/初始化計(jì)數(shù)器(定時(shí)器)TIM3_Int_Init (99,7199); /10ms次中斷moto.c 123GPI
17、O_InitTypeDef GPIO_InitStruct ;4RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);/PORTB12 13 14 15推挽輸出GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStr
18、uct);5678910111213141516171819202122232425262728293031323334353637383940414243444546void pwm_Init(u16 arr,u16 psc) /初始化pwm輸出引腳RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); /使能定時(shí)器1時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /使能GPIOA的時(shí)鐘TIM_TimeBaseInitStruct .TIM_Period = arr;TIM_Time
19、BaseInitStruct .TIM_CounterMode = TIM_CounterMode_Up ; /TIM向上計(jì)數(shù)模式TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2 ;/選擇PWM2模式TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable ; /較輸出使能TIM_OCInitStruct.TIM_Pulse = 0;/設(shè)置待裝捕獲較寄存器的脈沖值TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(T
20、IM1,&TIM_OCInitStruct);/初始化輸出較參數(shù)TIM_OC1PreloadConfig (TIM1,TIM_OCPreload_Enable ); /CH1使能預(yù)裝載寄存器TIM_CtrlPWMOutputs(TIM1,ENABLE);TIM_ARRPreloadConfig(TIM1, ENABLE);TIM_Cmd(TIM1,ENABLE);/級(jí)定時(shí)器輸出必須設(shè)置這句/使能TIM1在ARR上的預(yù)裝載寄存器/使能定時(shí)器1encoder.c 12void Encoder_Init_TIM2 (void)345GPIO_InitTypeDef GPIO_InitStructur
21、e ;6RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);/使能定時(shí)器2的時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/使 能PA端時(shí)鐘789GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; /端配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; /浮空輸10111213141516171819202122232425262728293031323334353
22、63738394041/根據(jù)設(shè)定參數(shù)初始化GPIOBTIM_TimeBaseStructure .TIM_Period = ENCODER_TIM_PERIOD-1; /設(shè)定計(jì)數(shù)器動(dòng)重裝值TIM_TimeBaseStructure .TIM_ClockDivision = TIM_CKD_DIV1;/選擇時(shí)鐘分頻:不分頻TIM_TimeBaseStructure .TIM_CounterMode = TIM_CounterMode_CenterAligned1 ;TIM向上計(jì)數(shù)TIM_TimeBaseInit (TIM2, &TIM_TimeBaseStructure );TIM_Encode
23、rInterfaceConfig (TIM2, TIM_EncoderMode_TI12 , TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);/使編碼器模式3TIM_ICStructInit(&TIM_ICInitStructure ); /把TIM_ICInitStruct 中的每個(gè)參數(shù)按缺省值填TIM_ICInitStructure .TIM_ICFilter = 10; /設(shè)置濾波器長(zhǎng)度TIM_ICInit(TIM2, &TIM_ICInitStructure );/根據(jù) TIM_ICInitStruct 的參數(shù)初始化外設(shè)TIMxTIM_Cle
24、arFlag (TIM2, TIM_FLAG_Update );/清除TIM的更新標(biāo)志位TIM_ITConfig(TIM2, TIM_IT_Update , ENABLE);/使能定時(shí)器中斷TIM_SetCounter (TIM2,10000);/設(shè) 置TIMx 計(jì)數(shù)器寄存器值TIM_Cmd(TIM2, ENABLE); /使能定時(shí)器2/中斷處理函數(shù)為空,清除中斷標(biāo)志位后結(jié)束中斷void TIM2_IRQHandler (void)if(TIM_GetFlagStatus (TIM2,TIM_FLAG_Update )=SET)/溢出中斷TIM_ClearITPendingBit (TIM2,
25、TIM_IT_Update );/清除中斷標(biāo)志位42 /*4344454647484950515253545556575859*/int Encoder_TIM;switch(TIMX)case 2:Encoder_TIM=(short)TIM2-CNT; break;case 3:Encoder_TIM=(short)TIM3-CNT; break;case 4:Encoder_TIM=(short)TIM4-CNT; break;default: Encoder_TIM=0;timer.c 12345678910111213141516171819202122232425262728TIM
26、_TimeBaseInitStruct .TIM_Period = arr; /重裝載值TIM_TimeBaseInitStruct .TIM_Prescaler = psc; /預(yù)分頻系數(shù)TIM_TimeBaseInitStruct .TIM_ClockDivision =0; /時(shí)鐘分割TIM_TimeBaseInitStruct .TIM_CounterMode = TIM_CounterMode_Up ; /TIM向上計(jì)數(shù)模式TIM_TimeBaseInit (TIM3,&TIM_TimeBaseInitStruct );TIM_ITConfig(TIM3,TIM_IT_Update
27、,ENABLE); /使能定時(shí)器中斷NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; /使能外部中斷通道NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; /使能外部中斷通道NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; /搶占優(yōu)先級(jí)1NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; /響應(yīng)優(yōu)先級(jí)3NVIC_Init(&NVIC_InitStruct);TIM_Cmd(TIM3,ENABLE); /使能定時(shí)器3control.c (核控制程序,此模塊程序可供讀者詳細(xì)閱讀)12#include cont
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文明校園演講稿范文300字(8篇)
- 護(hù)理見(jiàn)習(xí)自我評(píng)價(jià)
- 工作失職萬(wàn)能檢討書(6篇)
- 房屋所有權(quán)證明范文
- 小區(qū)關(guān)于燃放煙花爆竹的承諾書(5篇)
- 幸運(yùn)是不存在的努力才是硬道理
- 2025年山東淄博沂源縣事業(yè)單位招考115人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)寧鄒城市事業(yè)單位招聘工作人員(綜合類)113人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)寧市屬事業(yè)單位招聘47人(教育類)管理單位筆試遴選500模擬題附帶答案詳解
- 開(kāi)會(huì)遲到檢討書范文
- 6000噸年氧化羰化制碳酸二甲酯合成工藝設(shè)計(jì)說(shuō)明書
- ASME壓力容器工藝評(píng)定試板取樣尺寸
- 治理超限超載從業(yè)人員學(xué)習(xí)培訓(xùn)資料
- 人教版八年級(jí)上冊(cè) 第十二章12.1 全等三角形復(fù)習(xí)課 教案
- 機(jī)械原理課程設(shè)計(jì)設(shè)計(jì)加熱爐推料機(jī)傳動(dòng)裝置
- 立井井筒裝備方案
- 給我店周邊各企事業(yè)單位領(lǐng)導(dǎo)贈(zèng)送體驗(yàn)券方案的請(qǐng)示
- 世界氣候分布圖(空白輪廓底圖)
- 山東省建設(shè)工程質(zhì)量監(jiān)督檔案樣表
- 天津市工傷職工停工留薪期確定通知書
- 小學(xué)二年級(jí)數(shù)學(xué)期末口試模擬試題
評(píng)論
0/150
提交評(píng)論