摘要:延時函數(shù)初始化定時器初始化對應度對應度對應度對應度對應度驅(qū)動模塊驅(qū)動程序主函數(shù)延時函數(shù)初始化初始化舵機驅(qū)動
目錄
舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms范圍內(nèi)的角度控制脈沖部分,總間隔為2ms,比如說180度伺服角度,對應的關(guān)系如下。
void main(void){ InitTimer0(); //定時器0初始化 EA = 1; //開總中斷 while(1) //大循環(huán) { Servo0PwmDuty = 500; //脈沖寬度在500微秒,對應-90° DelayMs(1000); //延時1秒 Servo0PwmDuty = 1000; //脈沖寬度在1000微秒,對應-45° DelayMs(1000); Servo0PwmDuty = 1500; DelayMs(1000); Servo0PwmDuty = 2000; DelayMs(1000); Servo0PwmDuty = 2500; DelayMs(1000); }}
void main(void){ uint8 i; InitTimer0(); //定時器0初始化 EA = 1; //開總中斷 while(1) //大循環(huán) { for(i = 0;i<8;i++) ServoPwmDuty[i] = 500; //脈沖寬度在500微秒,對應-90° DelayMs(1000); //延時1秒 for(i = 0;i<8;i++) ServoPwmDuty[i] = 1000; //脈沖寬度在1000微秒,對應-45° DelayMs(1000); for(i = 0;i<8;i++) ServoPwmDuty[i] = 1500; //脈沖寬度在1500微秒,對應0° DelayMs(1000); //延時1秒 for(i = 0;i<8;i++) ServoPwmDuty[i] = 2000; //脈沖寬度在2000微秒,對應45° DelayMs(1000); for(i = 0;i<8;i++) ServoPwmDuty[i] = 2500; //脈沖寬度在2500微秒,對應90° DelayMs(1000); //延時1秒 }}
PWM就是脈沖寬度調(diào)制,也就是占空比可變的脈沖波形.
pwm的占空比,就是指高電平保持的時間,與該pwm時鐘周期時間之比。
在應用中就是通過調(diào)節(jié)pwm占空比來控制,也就是一個周期中高電平所占的百分比來控制舵機的轉(zhuǎn)角的。
在代碼中要特別注意的是時基結(jié)構(gòu)體的TIM_Period(自動重裝載寄存器值,簡稱arr)和TIM_Prescaler(預分頻寄存器值,簡稱psc),因為這兩個決定了輸出PWM信號的周期。具體的周期計算公式為:周期=(arr+1)*(psc+1)/CLK。其中CLK為計數(shù)器的時鐘頻率,我的是72MHZ,也就是72000000。最后計算結(jié)果單位為秒,結(jié)果為0.02s,也就是20ms。這樣的配置就是為了讓輸出的PWM信號達到前面說到的舵機要求的20ms周期。
int main(void){ int delay_time; delay_init(); //延時函數(shù)初始化 TIM_Init(); //定時器初始化 while(1) { delay_ms(1000); TIM_SetCompare1(TIM1, 175); //對應180度 delay_ms(1000); TIM_SetCompare1(TIM1, 180); //對應135度 delay_ms(1000); TIM_SetCompare1(TIM1, 185); //對應90度 delay_ms(1000); TIM_SetCompare1(TIM1, 190); //對應45度 delay_ms(1000); TIM_SetCompare1(TIM1, 195); //對應0度 }}
stm32驅(qū)動程序:
#include "pca9685.h"#include "myiic.h"#include "delay.h"#include "math.h"void pca_write(u8 adrr,u8 data){ IIC_Start(); IIC_Send_Byte(pca_adrr); IIC_Wait_Ack(); IIC_Send_Byte(adrr); IIC_Wait_Ack(); IIC_Send_Byte(data); IIC_Wait_Ack(); IIC_Stop();}u8 pca_read(u8 adrr){ u8 data; IIC_Start(); IIC_Send_Byte(pca_adrr); IIC_Wait_Ack(); IIC_Send_Byte(adrr); IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(pca_adrr|0x01); IIC_Wait_Ack(); data=IIC_Read_Byte(0); IIC_Stop(); return data;}void pca_setfreq(float freq){ u8 prescale,oldmode,newmode; double prescaleval; freq *= 0.92; prescaleval = 25000000; prescaleval /= 4096; prescaleval /= freq; prescaleval -= 1; prescale =floor(prescaleval + 0.5f); oldmode = pca_read(pca_mode1); newmode = (oldmode&0x7F) | 0x10; // sleep pca_write(pca_mode1, newmode); // go to sleep pca_write(pca_pre, prescale); // set the prescaler pca_write(pca_mode1, oldmode); delay_ms(2); pca_write(pca_mode1, oldmode | 0xa1); }void pca_setpwm(u8 num, u32 on, u32 off){ pca_write(LED0_ON_L+4*num,on); pca_write(LED0_ON_H+4*num,on>>8); pca_write(LED0_OFF_L+4*num,off); pca_write(LED0_OFF_H+4*num,off>>8);}void Servo_Init(float hz,u8 angle){ u32 off=0; IIC_Init(); pca_write(pca_mode1,0x0); pca_setfreq(hz); off=(u32)(145+angle*2.4); pca_setpwm(0,0,off); pca_setpwm(1,0,off); pca_setpwm(2,0,off); pca_setpwm(3,0,off); pca_setpwm(4,0,off); pca_setpwm(5,0,off); pca_setpwm(6,0,off); pca_setpwm(7,0,off); pca_setpwm(8,0,off); pca_setpwm(9,0,off); pca_setpwm(10,0,off); pca_setpwm(11,0,off); pca_setpwm(12,0,off); pca_setpwm(13,0,off); pca_setpwm(14,0,off); pca_setpwm(15,0,off); delay_ms(500);}void Servo_angle(u8 num,u8 angle){ u32 off = 0; off = (u32)(158+angle*2.2); pca_setpwm(num,0,off);}
stm32主函數(shù):
int main(void){ delay_init();//延時函數(shù)初始化 Servo_Init(50,90);//初始化舵機驅(qū)動 delay_ms(1000); uart_init(9600); Servo_angle(0,90); printf("this is a drill");}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123604.html
摘要:四足仿生機器人具有高機動性,負載能力和適應能力強,可運用于物資運輸搶險救援等方面,具有廣闊前景。由于制作電機狗需要高昂的成本。自主設(shè)計制造一款舵機狗來學習研究四足機器狗的步態(tài)算法是一件性價比極高且很有意義的一件事。 文章目錄 前言 一、初步了解四足結(jié)構(gòu) 1.1.2串聯(lián)機構(gòu) 1.2?...
摘要:導航在這里白澤四足機器人導航貼白澤四足機器人導航貼給模塊燒錄透傳程序這個程序燒錄進模塊之后,它就可以接收手機指令了。然后我們?nèi)ゲ榭礄C器人的地址,在設(shè)置那里進行地址修改然后點擊右上角的按鈕就可以了連上機器人了。 導航在這里:白澤四足機器人導航貼 1.給esp8266模塊燒錄透傳程序 這個程序燒...
摘要:舵機接線小車避障原理小車啟動后,小車開始向前運動。搭載的外部電源過重時,會影響小車車輪的摩擦力,可能兩個車輪的轉(zhuǎn)速不一致,導致小車并不能按照軌跡行駛。小車車輪在光滑地面有可能造成空轉(zhuǎn)的現(xiàn)象,導致小車不能走直線。 1.試驗設(shè)備及接線 1.1實驗設(shè)備 ? MiniQ 桌面機器人底盤showImg(https://segmentfault.com/img/bVbu59l); 底盤直...
摘要:中央對齊模式向上計數(shù)時當時通道為無效電平,否則為有效電平向下計數(shù)時一旦通道為有效電平,否則為無效電平。一般來說,舵機接收的信號頻率為,即周期為。 STM32——P...
摘要:只能在度到度之間運動,超過范圍,舵機輕則齒輪打壞,重則燒壞內(nèi)部電路舵機能度轉(zhuǎn)動能控制轉(zhuǎn)速。相關(guān)定時器的參數(shù)設(shè)置定時器為例編寫相關(guān)的函數(shù)文件相關(guān)函數(shù)開啟添加定時器的通道和通道的生成開啟使能函數(shù),放置于到中的用戶代碼區(qū)。 ...
閱讀 4365·2021-11-24 10:24
閱讀 1409·2021-11-22 15:22
閱讀 2038·2021-11-17 09:33
閱讀 2428·2021-09-22 15:29
閱讀 514·2019-08-30 15:55
閱讀 1652·2019-08-29 18:42
閱讀 2731·2019-08-29 12:55
閱讀 1772·2019-08-26 13:55