使用树莓派pwm来控制舵机:
舵机的工作原理:
舵机的控制信号为周期是
20ms
的脉宽调制(
PWM)
信号,其中脉冲宽度从
0.5ms-2.5ms
,相对应舵盘的位置
为
0—180
度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,
无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置
上。舵机内部有一个基准电路,产生周期
20ms
,宽度
1.5ms
的基准信号,有一个比较器,将外加信号与基准
信号相比较
,
判断出方向和大小,从而产生电机的转动信号。
控制电路板接受来自信号线相应的
PWM
控制信号,进而控制电机转动,电机带动一系列齿轮组,减速后传动
至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将
输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。
舵机的控制需要
MCU
产生一个周期为
20ms
的脉冲信号,以
0.5ms
到
2.5ms
的高电平来控制舵机转动的角度。

对应的pwm硬件引脚是GPIO12、GPIO13、GPIO18、GPIO19、GPIO40

#include<stdio.h>
#include<wiringPi.h>
int main()
{
wiringPiSetupGpio();
pinMode(18,PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);//设置pwm的输出模式
pwmSetRange(2000);//2000設置步長 就是一個周期2000步
pwmSetClock(192);//设置分频
//19.2M/192/2000=50hz=f
//时钟输入默认19.2M
//占空比就是占了整个周期的多少
//设置分频就是设置转速
while(1)
{
pwmWrite(18,50);
delay(5000);
pwmWrite(18,150);
delay(500);
pwmWrite(18,200);
delay(10000);
}
return 0;
}
****19.2M/时钟(192)/步长(2000)=0.05
****1/0.05=20(就是舵机的周期)
****占空比是一个高电平与一个周期的比例
****digitawrite(int pin,int num) num是步长 来设置占空比(50为舵机旋转角度为零,100为45度,可能50不会是0,舵机有一定的误差)
树莓派pwm部分函数:
-
int wiringPiSetup()
:- 用于初始化 WiringPi 库,必须在使用其他 WiringPi 函数之前首先调用。它会返回一个整数(-1),通常用于检查初始化是否成功。
-
void pinMode(int pin, int mode)
:- 用于设置指定 GPIO 引脚的工作模式。
pin
参数是 GPIO 引脚的编号,mode
参数可以是INPUT
、OUTPUT
、PWM_OUTPUT
(硬件pwm才可以用PWM_OUTPUT
初始化)。
- 用于设置指定 GPIO 引脚的工作模式。
-
void pwmSetMode(int mode)
:- 设置 PWM 的工作模式。可以选择两种模式,
PWM_MODE_BAL
和PWM_MODE_MS(传统模式,通常用这个)
。通常,PWM_MODE_BAL
用于标准 PWM 操作。
- 设置 PWM 的工作模式。可以选择两种模式,
-
void pwmSetRange(unsigned int range)
:- 设置 PWM 范围,这定义了 PWM 周期的长度。
range
参数是一个无符号整数,通常设置为 1024,表示 PWM 周期的长度为 1024 个单位。
- 设置 PWM 范围,这定义了 PWM 周期的长度。
-
void pwmSetClock(int divisor)
:- 设置 PWM 时钟频率的分频因子。通常情况下,这个值可以设置为 2 或 3,以获得合适的 PWM 频率。
-
int pwmWrite(int pin, int value)
:- 用于设置指定 GPIO 引脚上的 PWM 值。
pin
参数指定 GPIO 引脚,value
参数是 PWM 值,通常在范围 0 到 1023 之间,其中 0 表示完全关(0% 占空比),1023 表示完全开(100% 占空比)。
- 用于设置指定 GPIO 引脚上的 PWM 值。
这些函数允许您配置和控制树莓派上的硬件 PWM 输出。硬件 PWM 通常提供更精确和可靠的 PWM 控制,因为它是由专用硬件电路生成的。
总结一下,树莓派的pwm配置分这么几步:
1、设置对应的gpio为pwm复用功能;
2、设置pwm的时钟;
3、设置pwm的模式并使能;
4、设置pwm的range;
5、设置pwm的dat;