历史上的今天
返回首页

历史上的今天

今天是:2024年08月23日(星期五)

正在发生

2019年08月23日 | STM32控制SG90舵机

2019-08-23 来源:eefocus

简介

通过使用STM32控制SG90舵机进行转动

PWM输出:PC6

定时器:TM3,通道1

接线如下:


在这里插入图片描述

控制原理及PWM配置

舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分


PWM周期为20ms = (7200*200)/72000000=0.02

所以TIM_Period = 199,TIM_Prescaler = 7199


占空比 = t / T 相关参数如下:

t = 0.5ms——————-舵机会转动 0 °

t = 1.0ms——————-舵机会转动 45°

t = 1.5ms——————-舵机会转动 90°

t = 2.0ms——————-舵机会转动 135°

t = 2.5ms——————-舵机会转动180°


PWM占空比是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,由于PWM周期为20ms,所以(以舵机会转动 45°为例),占空比就应该为1ms/20ms = 5%,所以TIM_SetCompare1的 TIMx 捕获比较 1 寄存器值就为200-200*5% = 190


参考代码

#include "pwm.h"


/*******************************************************************************

* 函 数 名         : pwm_init

* 函数功能    : IO端口及TIM3初始化函数    

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void pwm_init()

{

GPIO_InitTypeDef GPIO_InitStructure;   //声明一个结构体变量,用来初始化GPIO


TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明一个结构体变量,用来初始化定时器


TIM_OCInitTypeDef TIM_OCInitStructure;//根据TIM_OCInitStruct中指定的参数初始化外设TIMx


/* 开启时钟 */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


/*  配置GPIO的模式和IO口 */

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;// PC6

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出

GPIO_Init(GPIOC,&GPIO_InitStructure);

//TIM3定时器初始化

TIM_TimeBaseInitStructure.TIM_Period = 199; //PWM 频率=72000/(199+1)=36Khz//设置自动重装载寄存器周期的值

TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//设置用来作为TIMx时钟频率预分频值

TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);


GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射 //pC6


//PWM初始化   //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;


TIM_OC1Init(TIM3,&TIM_OCInitStructure);

//注意此处初始化时TIM_OC1Init而不是TIM_OCInit,否则会出错。因为固件库的版本不一样。

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的预装载寄存器

TIM_Cmd(TIM3,ENABLE);//使能或者失能TIMx外设

}


#include "public.h"

#include "pwm.h"


int main()

{   

pwm_init(); //PWM初始化

while(1)

{

delay_ms(100);

TIM_SetCompare1(TIM3, 195);//0度

delay_ms(100);

TIM_SetCompare1(TIM3, 190);//45度

delay_ms(100);

TIM_SetCompare1(TIM3, 185);//90度

delay_ms(100);

TIM_SetCompare1(TIM3, 180);//135度

delay_ms(100);

TIM_SetCompare1(TIM3, 175);//180度

delay_ms(100);

}

}

推荐阅读

史海拾趣

Aptiv公司的发展小趣事

作为一家具有社会责任感的企业,Aptiv始终关注社会公益事业。公司积极参与各项社会活动和慈善捐赠,为改善社会环境和提升公众生活质量做出了积极贡献。同时,Aptiv还注重在运营所在城市推动社区发展,通过创造就业岗位、支持教育事业等方式,为当地社会经济的繁荣做出了贡献。

Fairchild Imaging公司的发展小趣事

Fairchild Imaging一直致力于成像技术的创新。在XXXX年,公司成功研发出一款具有划时代意义的图像传感器,该传感器以其高清晰度、低噪声和宽动态范围等特性,赢得了市场的广泛认可。这一技术的突破不仅为Fairchild Imaging赢得了众多客户的青睐,还为公司后续的发展奠定了坚实的基础。

DELTA公司的发展小趣事

Delta公司始终将技术创新作为推动企业发展的核心动力。公司不断投入巨资进行技术研发和创新,积极引进先进技术和设备,培养高素质的研发人才。这些努力使Delta在电源管理、能源管理、智能绿生活等领域取得了多项技术突破和专利成果,不仅提升了公司的核心竞争力,还引领了整个行业的发展方向。

DACHANG公司的发展小趣事

在追求经济效益的同时,DACHANG公司始终不忘承担社会责任。公司积极参与公益事业,关注环境保护和社会发展。无论是在捐款助学、扶贫济困还是在环保减排方面,DACHANG公司都积极履行自己的社会责任,为社会做出了积极贡献。这种对社会责任的担当和履行,不仅提升了DACHANG公司的品牌形象,也赢得了社会各界的广泛赞誉。

AnalogicTech公司的发展小趣事

AnalogicTech深知品质是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重客户反馈和需求,不断优化产品和服务,以满足客户的期望和需求。这种对品质的执着追求和对客户的深度关注,使得AnalogicTech赢得了众多客户的信任和忠诚。

High Energy Corp公司的发展小趣事

为了进一步扩大市场份额,AnalogicTech积极寻求与全球范围内的合作伙伴建立战略合作关系。公司通过参加国际电子展会、建立海外销售网络等方式,成功将产品推向全球市场。同时,AnalogicTech还加大了对亚洲市场的投入,在香港等地设立了分支机构,进一步提升了公司在全球市场的竞争力。

问答坊 | AI 解惑

关于音频驱动 求问

音频配置文件有alsa.conf 和 asound.conf  看了alsa.conf,里面有 @hooks [         {                 func load               ...…

查看全部问答>

CE5.0下串口丢失字符现象

我用串口2自收发,串口先发送54个字符,然后在接收,并且会比较发送是否与接收的字符相同。用PING 命令不停地发送40960大小的包,打开5个以上的命令行,执行ping命令,同时从网上下载文件,或者renew一下重新获取IP地址(IP为动态分配)串口会出现 ...…

查看全部问答>

MMC/SD/CE-ATA区别

我需要做SD卡升级系统这功能,很多地方不清楚.MMC/SD/CE-ATA,在驱动这个层次上的区别是什么??…

查看全部问答>

嵌入式待遇并不高,为什么大家还要去学他呢?

据我所知,还不如java开发管理软件工资高。…

查看全部问答>

求助ccs

附件 Image00000.bmp (447.12 KB) 2008-2-25 12:30 附件 ...…

查看全部问答>

dsp课件讲义

这是我们上课用的课件,比较好。所以上传与大家分享…

查看全部问答>

RTP/RTCP/RTSP协议初探 [转载]

RTP/RTCP/RTSP协议初探 [转载]一.产生的背景随着互连网的发展,人们已经不满足于传统的HTTP,FTP和电子邮件等文本信息和服务,而对内容丰富多彩的多媒体信息,服务以及多媒体通信方式提出了需求,包括声音,图象,图形,视频信息等等,而这些不 ...…

查看全部问答>

華為公司電路板(PCB)設計規範

華為公司電路板(PCB)設計規範…

查看全部问答>