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_APB1PeriphClockCmd
和RCC_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。