当前位置:   article > 正文

SG90舵机驱动程序_sg90舵机程序

sg90舵机程序

模块:GM90舵机
平台:正点原子精英版 橙线接PC6,其余接VCC,GND
功能:实现舵机0~180度旋转

#include"timer.h"
//timer3 PC6   重装载值200,分频系数7199
//T=20ms,0.5~2.5ms对应0°~180(0,45,90,135,180)
//转动方式,例:TIM_SetCompare1(TIM3, 195);//0度
//              TIM_SetCompare1(TIM3, 190);//45度
// 也可以用190到195中间的数表示0~45度内的角度
void TIM3_PWM_Init(u16 arr,u16 psc)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);//使能 PC端口 时钟和 AFIO复用功能 时钟

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;				 //PC6
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
	GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIOC.6
	GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);  //开启定时器3的部分重映射  改变定时器3的 输出通道 引脚 。比如:通道1的输出引脚为PC6

	//初始化定时器3
	TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载
	TIM_TimeBaseStructure.TIM_Prescaler=psc; //预分频系数
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //没多大关系
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
	//初始化 输出比较 参数         输出比较:通过比较来进行输出       
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //pwm模式1:小于有效
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;     //通道输出极性   TIM3_CCER寄存器的CC2E位   0:低电平有效  1:高电平有效
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;  //通道1输出使能
	TIM_OC1Init(TIM3,&TIM_OCInitStructure);//定时器3通道2输出的初始化       CNT小于比较值CCR   通道1输出低电平

	//使能通道1 输出比较 预装载值
	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

	//使能定时器3
	TIM_Cmd(TIM3,ENABLE);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
#ifndef __TIMER_H
#define __timer_h
#include"sys.h"

void TIM3_PWM_Init(u16 arr,u16 psc);

#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
#include "sys.h"
#include "delay.h"
#include "timer.h" 

int main(void)
{
	delay_init();
	TIM3_PWM_Init(199,7199);
	while(1)
	{
		delay_ms(1000);
		TIM_SetCompare1(TIM3, 195);//0度
		delay_ms(1000);
		TIM_SetCompare1(TIM3, 192);//28度
		delay_ms(1000);
		TIM_SetCompare1(TIM3, 190);//45度
		delay_ms(1000);
		TIM_SetCompare1(TIM3, 187);//72度
		delay_ms(1000);
		TIM_SetCompare1(TIM3, 185);//90度
		delay_ms(1000);
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/302108
推荐阅读
相关标签
  

闽ICP备14008679号