STM32F407スタディノート-MG90Sステアリングギアモジュール(基本制御)
1.基本原理:
PWMデューティサイクルを変更することにより、ステアリングギアをさまざまな角度で回転させることができます。回転角度とパルス時間および対応するデューティサイクルの関係を以下に示します(タイムベースパルス= 20ms)。
回転角度 | パルス時間 | レジスターの比較 | デューティサイクル |
---|---|---|---|
0° | 0.5ms | 195 | 2.5% |
45° | 1ms | 190 | 5% |
90° | 1.5ms | 185 | 7.5% |
135° | 2ms | 180 | 10% |
180° | 2.5ms | 175 | 12.5% |
デューティサイクル計算式:パルス時間/ 20ms
比較レジスタ:200-200 *デューティサイクル
記事の最後に記載されているコードは、サーボの回転角を制御するために比較レジスタを変更するだけで済みます。
2.コード機能:
比較レジスタを変更して、ステアリングギアの回転角を制御します。
3.配線:
PA0——PWM信号線(黄色の線)、+ 5v—— + 5v(赤の線)、GND——GND(茶色の線)
4.コード部分:
SG90.h
#ifndef __SG90_H
#define __SG90_H
#include <stm32f4xx.h>
#include <delay.h>
#include "math.h"
void TIM2_PWM_Init(u32 arr,u32 psc);
#endif //__SG90_H
SG90.h
#include "sys.h"
#include "SG90.h"
void TIM2_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM2);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Prescaler=psc;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period=arr;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2,ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
main.c
#include "sys.h"
#include "HC-SR04.h"
#include "SG90.h"
#include "delay.h"
int main()
{
delay_init(168);
TIM2_PWM_Init(200-1,8400-1);
while(1)
{
delay_ms(1000);
TIM_SetCompare1(TIM2,175);
delay_ms(1000);
TIM_SetCompare1(TIM2,180);
delay_ms(1000);
TIM_SetCompare1(TIM2,185);
delay_ms(1000);
TIM_SetCompare1(TIM2,190);
delay_ms(1000);
TIM_SetCompare1(TIM2,195);
}
}
PS:このモジュールとコードは、ジャイロスコープモジュールと超音波モジュールで使用できます。
この記事のリファレンス:STM32コントロールステアリングギアの原理とコード
初心者が学び、使用するためだけに