关于PWM的知识在之前的学习笔记已经提及
1.控制舵机的原理
1.舵机有三条线:
黄色-S pwm信号;红色-V VCC;棕色-G GND;
2.通过占空比的大小调节舵机转过的角度,一般来说,周期为20ms,高电平宽度为0.5ms-2.5ms
3.舵机接线
2.新建工程
1.复制上一篇的呼吸灯文件
2.找清楚舵机的gpio口,修改PWM.c文件的gpio口参数,我这里用的是TIm2_CH2,端口为PA1
3.舵机要求周期为20ms,即频率为50Hz,高电平时间为0.5ms~2.5ms,这里我设置PSC+1为72,ARR+1为20k,刚好算出来频率为50Hz(我所用的开发板系统时钟频率为72MHz),20k对应为20ms,那么CCR设置为500,就是0.5ms,CCR设置为2500,就是2.5ms
4.在Hardware新建servo.c和servo.h文件
5.下面是servo.c的全部代码
#include "stm32f10x.h" // Device header
#include "PWM.h"
//舵机初始化函数
void servo_Init(void)
{
PWM_Init();
}
void servo_Setangle(float Angle)
{
PWM_SetCompare2(Angle / 180 * 2000 + 500);
}
下面是servo.h的全部代码
#ifndef _SERVO_H
#define _SERVO_H
void servo_Init(void);
void servo_Setangle(float Angle);
#endif
下面是main.c的全部代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "Servo.h"
uint8_t pwm;
int main()
{
servo_Init();
servo_Setangle(0); //对应舵机角度为0°
while(1)
{
}
}
注意,这里的代码只是完成了控制舵机转到指定角度