基于stm32制作小狗过程记录

11/17驱动方向切入:

先进行简单的介绍基础设备

1. 舵机简介

舵机是一种位置伺服驱动器器,并且是一种根据输入PWM信号占空比来控制输出角度的装置。通过PWM向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只在控制信号持续不变,伺服机构就会保持相对的角度位置不变。如果控制信号发生变化,输出轴的位置也会相应发生变化。

例舵机型号为SG90,具有三根输入线:电源线,地线和信号线,PWM就是输入到信号线来控制舵机。控制信号进入内部驱动电路以后,获得直流偏置电压,从而产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。电压差的正负输出到电机驱动芯片决定电机的正反转,并且内部有一个电位器,用来检测当前舵机的角度。
2:占空比

总结——输入PWM信号要求为:周期为20ms,高电平宽度为0.5ms - 2.5ms,也就是说周期是20ms,如果高电平时0.5ms,那么舵机输出轴转角为 -90°。

硬件支持

本文是以STM32F103C8T6作为主控芯片,通过PA0端口输出PWM,实现控制180°舵机

GND 接地
5V 接5V口
PWM PA0

ps:问题除了PA0以外芯片哪几个接口还可以接PWM

代码

1. 引入头文件

#include "stm32f10x.h"

这行代码引入了STM32F10x系列微控制器的库文件,提供了对外设的访问和控制函数。

2. PWM初始化函数
void PWM_Init(void)

这是一个函数定义,用于初始化PWM。

3. 开启时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 开启TIM2的时钟  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 开启GPIOA的时钟
  • RCC_APB1PeriphClockCmdRCC_APB2PeriphClockCmd函数用于开启TIM2和GPIOA的时钟。没有开启时钟,相关的外设无法工作。
 4. GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // 使用PA1引脚  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置引脚速度为50MHz  
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA的PA1引脚
  • GPIO_InitTypeDef结构体用于配置GPIO。
  • GPIO_Mode_AF_PP表示将引脚设置为复用推挽输出模式,适合用于PWM输出。
  • GPIO_Pin_1指定要使用的引脚为PA1。
  • GPIO_Speed_50MHz设置引脚的最大速度为50MHz。
  • GPIO_Init函数将上述配置应用到GPIOA。
为什么复用推挽输出模式适合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值