SG90舵机驱动程序

4 篇文章 0 订阅
3 篇文章 0 订阅

模块: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);
}

#ifndef __TIMER_H
#define __timer_h
#include"sys.h"

void TIM3_PWM_Init(u16 arr,u16 psc);

#endif

#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);
	}
}

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月牙 ,呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值