摘要:本次實驗的采用的舵機是度伺服,控制關系如下二舵機電路圖三高級定時器產生波相比普通定時器初始化中需要多加兩句重復計數器的值主輸出使能四代碼電機初始化延遲初始化電機管腳初始化尋跡管腳初始化。
一、舵機工作原理
? ? 控制信號由接收機的通道進入信號調制芯片,獲得直流的偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后電壓差的正負輸出到電機驅動芯片決定電機的正反轉。當電機轉速一定時,通過級聯減速此輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。 舵機的控制:一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍內的角度控制脈沖部分。本次實驗的采用的舵機是180度伺服,控制關系如下:
?二、舵機電路圖
三、高級定時器產生PWM波
相比普通定時器1初始化中需要多加兩句:
//重復計數器的值TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;//主輸出使能 TIM_CtrlPWMOutputs(TIM1, ENABLE);
四、代碼
main.c
#include "motor.h"#include #include "delay.h"#include "stm32f10x.h"#include "followline.h"#include "ultrasonic.h"#include "steeringengine.h"u8 UART3_data,UART1_data;u8 UART3_rcv[20],UART3_rcv_count;u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;int main(void){// motor_pwm_TIME4_init(71,999);//電機PWM初始化 delay_init();//延遲初始化// motor_GPIO_init();//電機管腳初始化、尋跡管腳初始化。// uart_init1(9600);// hwbz_gpio_init(); steer_gpio_init(); steering_pwm_TIME1_init(7199,199); //int right_2=0,right_1=0 ,left_2=0,left_1=0; while(1) { TIM_SetCompare4(TIM1,jd45); delay_ms(800); TIM_SetCompare4(TIM1,jd90); delay_ms(800); TIM_SetCompare4(TIM1,jd180); delay_ms(800); }}
steeringengine.c?
#include "steeringengine.h"void steer_gpio_init(void ){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct);}void steering_pwm_TIME1_init(int presc,int arr){ //定義定時器的結構體 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定義定時器PWM輸出通道的結構體 TIM_OCInitTypeDef TIM_OCInitStruct; //打開TIME1的時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //配置TIME1結構體的參數 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Prescaler = presc; TIM_TimeBaseInitStruct.TIM_Period =arr; //重復計數器的值 TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct); //配置TIME1通道結構體的參數 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStruct.TIM_OutputState =TIM_OutputState_Enable ; TIM_OCInitStruct.TIM_Pulse =0; //TIME4通道4初始化 TIM_OC4Init(TIM1, &TIM_OCInitStruct); //使能TIME4通道1的預存寄存器 TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); // 主輸出使能,當使用的是通用定時器時,這句不需要 TIM_CtrlPWMOutputs(TIM1, ENABLE); // TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIME4 TIM_Cmd(TIM1, ENABLE); }
steeringengine.h
#ifndef __STEERINGENGINE_H__#define __STEERINGENGINE_H__#include "stm32f10x_gpio.h"#include "stm32f10x_tim.h"#include "stm32f10x_rcc.h"#define jd0 5#define jd45 10#define jd90 15#define jd135 20#define jd180 25void steer_gpio_init(void );void steering_pwm_TIME1_init(int presc,int arr);#endif
?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119359.html
摘要:中央對齊模式向上計數時當時通道為無效電平,否則為有效電平向下計數時一旦通道為有效電平,否則為無效電平。一般來說,舵機接收的信號頻率為,即周期為。 STM32——P...
摘要:只能在度到度之間運動,超過范圍,舵機輕則齒輪打壞,重則燒壞內部電路舵機能度轉動能控制轉速。相關定時器的參數設置定時器為例編寫相關的函數文件相關函數開啟添加定時器的通道和通道的生成開啟使能函數,放置于到中的用戶代碼區。 ...
摘要:一般調高飽和度會降低中相對較低的數值,凸顯主要顏色的純度。對當前唯一的方法霍夫梯度法,它表示在檢測階段圓心的累加器閾值。第八個參數,類型的有默認值,表示圓半徑的最小值。 目錄 效果展示? 基礎理論(HSV) 為什么用HSV空間而不是RGB空間? HSV 1、Hue(色相) 2、Value(明...
摘要:延時函數初始化定時器初始化對應度對應度對應度對應度對應度驅動模塊驅動程序主函數延時函數初始化初始化舵機驅動 目錄 1、51定時器控制單個舵機 2、51定時器控制多路舵機 3、stm32控制舵機 4、pca9685驅動模塊 1、51定時器控制單個舵機 舵機的控制一般需要一個20ms左右的時基脈...
摘要:較高時,電機運行連續平穩噪音小,但器件功耗會隨頻率升高而增大較低時,利于降低功耗,并能提高調速線性度,但過低的頻率可能導致電機轉動連貫性的降低。通常時,器件能夠穩定的控制電機。 一、驅動芯片介紹 TB6612?的的用法: ? ? ?TB6612?是雙驅動,也就是可以驅動兩個電機下面分別是控制...
閱讀 942·2021-09-07 09:58
閱讀 1491·2021-09-07 09:58
閱讀 2884·2021-09-04 16:40
閱讀 2506·2019-08-30 15:55
閱讀 2414·2019-08-30 15:54
閱讀 1371·2019-08-30 15:52
閱讀 433·2019-08-30 10:49
閱讀 2606·2019-08-29 13:21