前言5 j8 @2 J8 P5 R/ ]& t3 U% N4 ^$ z2 W) h
本文将带大家学习如何驱动舵机转向以及控制转向的角度值。
& l; n/ @$ g$ `6 ]1 O6 ]
; W6 }1 Z. ~! k2 y一、舵机简单介绍及接线方式' \( b; @1 j2 [* W& z
信号线(黄线)红线(电源线)棕色(地线)
4 Y* F, g$ r, L" ^0 i舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
- Y; U* J; H* A' }6 E5 f5 w0.5ms--------------0度;
$ s8 U3 L8 ]1 [. N- D/ U9 @1.0ms------------45度; a8 f/ w9 [. p9 h/ q; V
1.5ms------------90度;; S! k6 x& n- F% q7 \
2.0ms-----------135度;
) K9 G; c) H( w. Q2.5ms-----------180度;* L. D: q( q$ M; B J+ j
* r3 C1 N* p: c: N
4 S0 @+ k; N- H; V" {$ S
6 g: _$ f5 T0 Y* j2 U0 Z3 j二、cubeMX配置
s1 a8 u7 b7 b" N0 v% V+ n前面我们说过舵机的控制一般需要一个20ms左右的时基脉冲,所以我们要将舵机的PWM的频率设置为50HZ。7 A% ^! v* A" j8 b: s5 H3 O
电机的驱动引角接到了PA8所以将cuebMX配置如下:0 e. }) G4 {" \' Q" J C
1 l K# a+ Q7 R9 k6 F
, b3 A! l; ^6 E ~& L7 e4 ]5 r7 c
" @0 L1 y2 N. J* m4 S
三、代码解析# I) T1 E& G2 \; y/ o u
SG90.c
8 U& X0 [8 U3 h$ z$ k+ j7 R7 f" h1 W* g: \& B. }: x& J2 H
- #include "SG90.h"
: F6 G/ A$ A! X5 F4 N
3 [. @/ B! Y; {/ h1 i- extern TIM_HandleTypeDef htim1;
$ f5 \& h" z+ E+ X - - B8 O# s, y: d# r( {5 T1 ]2 {
- /*
& S9 V. q( g* F( w7 t' n - 函数功能:舵机初始化
* }7 I8 m+ M r7 p% S. r! P: _ - */- k8 D( t& J# |; V4 ^; X
- void SG90_Iint(void)/ k" ]$ y9 V5 q h( O. W
- {
$ W/ u( e0 N! }/ T ?7 P3 z& H' P - HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
V' {5 s: h5 E1 I. a& q8 p0 S - __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,50);0 B8 R1 I- j$ |5 _
- }- W# Z) I9 l9 t0 W5 l
- SG90.h! e6 }9 n8 S w* _* I x
- /*/ w' g7 ~$ I/ {* e2 U* m: f
- 函数功能:舵机角度设置
! p. Z: ?% w8 g& v, \! \$ m - angle:角度值 范围(0°~180°)
4 C/ g4 @9 ^# b( y, ]1 l# w. X - */4 F: |5 p8 @( i+ \) F2 {: l
- void SG90_Set(int angle)
, c7 _( o% c& m( G7 l( L' w - {, X/ y3 q. w( x' n$ ^: ], t8 U+ \5 _
- int PWM=10*angle/9+50;
4 e! k, d8 |* ` - __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,PWM);
% S: N7 T, [" _ - }
复制代码- #ifndef _SG90_H_
+ t F1 Q+ Y! a0 k: v6 h - #define _SG90_H_1 n+ S- q: ~* K0 V: R0 F
- : D3 S, }- e4 r* c' H
- #include "main.h"+ n! n* Y( T3 X
! S. R d0 @& k& B$ n6 ]& N- #define u8 unsigned char
) c# n, D* r' }2 G1 `% U - #define u16 unsigned short1 ^; A$ B) j$ l, d
- #define u32 unsigned int
0 F h+ l) `! }0 Q' H4 l
1 |0 |; {2 A$ {4 ]8 m/ {- void SG90_Iint(void);
2 H1 g7 T- L" a% Y9 t7 t Y; N - void SG90_Set(int angle);
0 t. Y W3 H5 R4 O' ?$ d! `5 A4 I - 1 o4 I7 W5 `7 U
$ B8 v- ^" h0 j# I$ c- #endif
复制代码
/ C9 j. u: g6 B9 K总结
2 Q* ]; |. r; Y本文简单介绍了舵机的使用方法,希望大家下去好好理解消化。4 f4 Q6 ~/ Q O2 |# y
% r' z$ P) N1 K/ J' ~! |; |# T' ^
3 ^* D. m! s# m8 F& t
|