項目需求
在制作一個使用全向輪的機器人底盤,對于全向輪,電機的精度是影響效果的重要因素。所以使用了步進電機,使用步進電機的優點是可以不使用編碼器,開環控制即可達到高精度的效果。
調整占空比或者調整周期
眾所周知,PWM有兩個重要參數,周期與占空比。
步進電機的運動方式是,每收到一個脈沖,就旋轉指定的角度。因此影響電機速度的唯一參數就是PWM的頻率。以下附圖兩張來說明調整占空比與調整周期的區別。
周期固定,調整占空比
上圖中有4個PWM,它們的周期是一樣的,不同之處是擁有從80%至20%的占空比。可以看出,無論占空比為多少,在1s內,它們產生的高電平的數量是一樣的,即無論占空比為多少,PWM的頻率都一致。因此也就無法調整步進電機的速度。因為步進電機的速度僅與PWM的頻率有關。
占空比固定,調整周期
上圖中有4個PWM,它們的占空比都固定為50%,卻擁有不同的周期。可以看出,即使占空比固定,只要動態調整周期,PWM就能在相同時間內產生數量不同的脈沖。因此,固定占空比,動態調整PWM周期,即可達到控制步進電機速度的效果。
基于STM32的實現
在STM32F1中,定時器具有PWM模式,可以用來產生PWM。但是,STM32的PWM模式,只要確定了時基單元(即確定了PWM周期),改變輸出比較寄存器,僅可改變PWM的占空比。
若需要改變PWM周期,需不停地改變定時器的時基單元。但時基單元與硬件相關,不適合頻繁變更。因此,步進電機的調速,不適合使用STM32下定時器的PWM模式來控制。
在多方查找資料后,確定了一種利用輸出比較精確控制PWM周期的方式。
利用輸出比較產生頻率可變的PWM
利用輸出比較產生頻率可變的PWM,原理簡單介紹如下:
首先配置定時器時基單元,確定脈沖最小長度單位CK。
然后開啟定時器的輸出比較,設置模式為翻轉模式,并開啟輸出比較中斷。
將定時器內計數器CNT當前值,加上脈沖長度X(單位為CK),寫入輸出比較寄存器。
在X個CK后,將會觸發輸出比較中斷。同時電平翻轉。
在中斷中再次將當前計數器CNT的值,加上脈沖長度X,寫入輸出比較寄存器。
在X個CK后,將會觸發輸出比較中斷。同時電平翻轉。
在中斷中再次將當前計數器CNT的值,加上脈沖長度X,寫入輸出比較寄存器。
如此往復……
以此即可得到一個占空比為50%,周期為2X個CK的PWM。
確定最小單位CK,配置時基單元
首先確定一個最小的間隔CK,規定PWM的高電平長度和低電平長度的單位都是CK。
即高電平的長度一定是CK的整數倍。低電平亦然。
然后配置定時器的時基單元,通過CK的長度確定預分頻系數。
已知STM32F103的主頻為72MHZ,則時基單元中預分頻系數為
PSC = 72M / (1/CK)
例如,rtz所確定的CK長度為10us(0.00001s),即可得出方程。
預分頻系數確定為720后,由高速晶振產生的72MHZ的時鐘信號被720分頻,得到100000HZ的時鐘信號。即時鐘信號每秒變動100000次。每次10us。同時可將重裝載值設定為0XFFFF(16位定時器的最大值)。因為本次使用的輸出比較模式不使用更新中斷,該值可隨意設置。
TIM_TimeBaseStructure.TIM_Period = 0XFFFF;
TIM_TimeBaseStructure.TIM_Prescaler =720;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
開啟輸出比較通道,設置輸出比較模式為翻轉模式,并配置NVIC,開啟輸出比較中斷,配置輸出比較通道:
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Pulse = 500;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
開啟輸出比較中斷,配置NVIC優先級:
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
編寫中斷服務函數
在輸出比較中斷中,唯一要做的事情就是把當前CNT的值取出,加上脈沖長度X,寫入輸出比較寄存器。
當計數器達到0XFFFF(之前設定的重裝載值)后,再加一會自動變為0.
例如,當前CNT值為0XFFFF,脈沖長度為5,很明顯,輸出比較寄存器應設置為0X0004才可觸發下一次中斷,而不是0X10004,這樣會造成溢出。
因此將CNT的值與脈沖長度相加后,需要取0XFFFF的余數后,再寫入輸出比較寄存器。
int t_m=5;//低電平和高電平的長度
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) {
TIM_SetCompare1(TIM2,(TIM2- >CNT+t_m)%0XFFFF);
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
}
}
動態調整中斷服務函數中的變量t_m,即可達到修改PWM頻率的效果。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
機器人
+關注
關注
210文章
28205瀏覽量
206520 -
PWM
+關注
關注
114文章
5144瀏覽量
213401 -
電機
+關注
關注
142文章
8933瀏覽量
145096
發布評論請先 登錄
相關推薦
智能電子創新制作-機器人制作入門
多涉及諸如電子學理論或軟件編程等基礎細節,書中提及的理論并不十分高深難懂,也沒有復雜的數學公式,而是重點介紹構成機器人的機械、電路、電源、傳感器、直流電機、步進電機、舵機以及常用電子元
發表于 08-14 23:18
履帶機器人 金屬底盤
` 本帖最后由 威凱-智控 于 2012-8-14 23:28 編輯
今天給大家分享一個全金屬的履帶機器人底盤準備最履帶機器人的朋友們,可以一起交流一下機器人瘋狂愛好者 讓思維沸騰
發表于 08-14 23:25
鷗鵬四輪全向自主移動足球機器人
四輪全向自主移動機器人是鷗鵬科技2007年8月份推出的極具競爭優勢的機器人核心產品之一,其機械、電氣及軟件設計標準完全遵循Robocup中型組比賽規則,因此,用戶可直接使用并參加年度R
發表于 03-24 11:05
自律型機器人制作入門.基于Arduino
了一層硬件接口的Dreamer,使得硬件模塊的連接更加方便、簡單。《自律型機器人制作入門:基于Arduino》是關于Drearner控制板的第一本書,內容循序漸進,圖文并茂。從最基礎的控制電機和舵機
發表于 06-23 11:18
機器人底盤傳感器位置坐標及底盤配置工具的使用
SLAMWARE模塊通過control bus和機器人底盤連接,機器人底盤需要將底盤的正確配置信息上傳至SLAMWARE模塊,否則會導致定位
發表于 01-24 14:42
怎樣去制作一種球上自平衡機器人
,該機器人根據陀螺儀的位姿數據,通過三全向輪驅動底部球體調整自己在球上的位置,保持動態平衡的同時實現全向移動。二、硬件清單材料價格數量淘寶鏈接 56mm
發表于 08-17 08:44
全向輪機器人有哪些特性?
)?速度空間范圍不同:如圖 4.1所示,在之前的文章《兩輪差速驅動機器人運動模型及應用分析》中對兩輪差速驅動機器人的速度空間做了分析,其只有2個自由度,不能沿著
發表于 08-30 09:15
麥克納姆輪全向移動的原理是什么
什么是麥克納姆輪在競賽機器人和特殊工種機器人中,全向移動經常是一個必需的功能。「全向移動」意味著可以在平面內做出任意方向平移同時自轉的動作。
發表于 08-30 08:50
如何搭建實體機器人ros底盤
目錄介紹一、底盤主控板二、嵌入式開發板1. 與上位機pc的關系2. 與STM32主控板的關系介紹自下而上的分析實體機器人(差分輪速機器人)搭建中的關鍵過程。一、
發表于 01-20 07:36
基于RT-Thread+RA6M4的麥輪結構的底盤運動控制系統設計案例
,使其驅動4個麥輪的電機。其地盤可實現全向移動,即平面的縱向,橫向移動和原地的旋轉移動。應用背景在目前移動機器人開發中,除了仿生結構的機器人
發表于 08-17 14:50
評論