stm32控制舵机

发布者:幸福自由最新更新时间:2024-10-14 来源: cnblogs关键字:stm32  控制舵机  PWM波 手机看文章 扫描二维码
随时随地手机看文章

#include 'stm32f10x.h'

void GPIO_TimPWM(void)

{

 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  , ENABLE);//

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;         //TIM_CH2  GPIOA_Pin_7输出

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

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_Init(GPIOA, &GPIO_InitStructure);        //不解释
}

void TIM3_Configuration(void)

{

 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

 TIM_OCInitTypeDef  TIM_OCInitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  //使能TIM3

 

//假如我要产生50Hz占空比为50%的PWM波,方便控制舵机

//设置方法:

//系统默认时钟为72MHz,预分频71+1次,得到TIM3计数时钟为1MHz
//计数长度为19999+1=20000,可得PWM频率为1M/20000=50Hz

//具体设置可参考上面的设置方法,简单明了!

 

 TIM_TimeBaseStructure.TIM_Prescaler = 72-1;//网上多数设置有误

 TIM_TimeBaseStructure.TIM_Period = 20000-1;    

 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

                      //设置时钟分割:  TIM_CKD_DIV1 = 0,PWM波不延时(延时破坏占空比?待考证)

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

 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

 TIM_ARRPreloadConfig(TIM3, DISABLE);  //禁止ARR预装载缓冲器,也可以不用设置

 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

 

 //占空比设置方法:

 //占空比=(TIM_Pulse+1)/(TIM_Pulse+1)-(TIM_Period+1)=10000/20000=0.5=50%

 

 TIM_OCInitStructure.TIM_Pulse = 10000-1;     

 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

 TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器

 //上面两句中的OC2确定了是channle几,要是OC3则是channel 3  

 TIM_CtrlPWMOutputs(TIM3,ENABLE);   //设置TIM2的PWM输出为使能

 TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器 

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

}

int main(void)

{

        GPIO_TimPWM(); 

        TIM3_Configuration();

  while(1)

  {   

  } ;

}

利用Keil逻辑分析仪分分析PWM波形图:经过测试可以看出输出波形精度可靠!


关键字:stm32  控制舵机  PWM波 引用地址:stm32控制舵机

上一篇:关于STM32的SPI的问题
下一篇:stm32 DMA 多通道数据采集

推荐阅读最新更新时间:2026-03-20 14:01

stm32控制舵机
#include stm32f10x.h void GPIO_TimPWM(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2 GPIOA_Pin_7输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50M
[单片机]
<font color='red'>stm32</font><font color='red'>控制</font><font color='red'>舵机</font>
stm32pwm
[单片机]
<font color='red'>stm32</font>的<font color='red'>pwm</font><font color='red'>波</font>
STM32之使用PWM控制多路舵机
前言 最近在玩一个6自由度的机械臂,我手上这台机械臂的核心控制器件就是那六个能够180度旋转的舵机了。想想之前在学校还没有系统性的把舵机给玩明白,所以就索性拿手上的STM32来自己写驱动代码,将6个舵机给驱动起来。 舵机控制原理 舵机的控制原理还是比较简单的,而且控制的角度和精度能够比较好的按照开发者的意愿来进行,因此经常被应用与一些控制类器械中,如机械手、云台、2自由度摄像头等产品中。 舵机的外接线一般分为3根线,电源线、地线和信号线,而控制舵机转动,就是通过信号线给舵机发送一系列的周期信号(一般的舵机的能接收的信号周期为20ms),然后通过控制周期信号的高电平的持续时间来达到控制舵机转动的目的。我手上的
[单片机]
<font color='red'>STM32</font>之使用<font color='red'>PWM</font><font color='red'>控制</font>多路<font color='red'>舵机</font>
STM32控制两个舵机
原理:一个定时器的两路PWM输出 参考:正点原子代码 timer.c代码 void TIM5_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);//使能定时器5时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2P
[单片机]
STM32PWM产生的问题总结
使用的是STM32F103RC 问题:PWM占空比的计算结果是对的但是输出出现错误,对于新西达的电机没法解锁,原因是没理解寄存器的作用。 #include tim2_pwm.h #include stm32f10x_tim.h void Init_GPIO(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE); //OC1_PBA0 OC2_PBA1 OC3_PBA2 OC4_PBA3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_
[单片机]
STM32 Cotex-M3处理器系列编程】定时器输出PWM
//使用定时器TIM4的3通道CH3输出占空比为25%的PWM波 #include stm32f10x.h int main(void) { // SystemInit(); //配置IO口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE,ENABLE);//IO口使能设置 GPIO_InitTypeDef GPIO_InitStructure; //定义结构体 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM3的C
[单片机]
基于51单片机T2的高精度PWM控制舵机
摘 要 虽然舵机的控制原理比较简单统一,但是PWM控制舵机的程序实现方式多种多样,有的使用延时(delay(ms)),有的使用定时器(time),而网上搜到的大部分控制代码却质量一般,控制精度都需要提高,就要对单片机定时器有详细的了解,否则延时将出现偏差。 本文使用单片机T2定时器,这个定时器大多数人很少使用它,而却不知道它有一个非常优秀的功能就是定时自动重载功能。利用这个功能能够更为精确的对定时器进行设定,可控制精度在1个机器周期(12M晶振下就是1us),T0、T1都需要手动重载,其精度无法很好的控制。 本程序硬件需求 /*------------------------------硬件需求: 12T系列单片机(80
[单片机]
基于51单片机T2的高精度<font color='red'>PWM</font><font color='red'>控制</font><font color='red'>舵机</font>
一文解析51单片机PWM舵机控制
  PWM简介   脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。   脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。   什么是舵机   舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机是船舶上的一种大甲板机械。   本文主要介绍的是51单片机PWM双舵机控制,具体的跟随小
[单片机]
一文解析51单片机<font color='red'>PWM</font>双<font color='red'>舵机</font><font color='red'>控制</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved