树莓派硬件pwm(控制舵机)

本文介绍了如何使用树莓派的GPIO接口和PWM功能来精确控制舵机,包括舵机的工作原理、控制信号的周期和占空比,以及通过编程实现的基本控制流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用树莓派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部分函数:
  1. int wiringPiSetup():

    • 用于初始化 WiringPi 库,必须在使用其他 WiringPi 函数之前首先调用。它会返回一个整数(-1),通常用于检查初始化是否成功。
  2. void pinMode(int pin, int mode):

    • 用于设置指定 GPIO 引脚的工作模式。pin 参数是 GPIO 引脚的编号,mode 参数可以是 INPUTOUTPUTPWM_OUTPUT (硬件pwm才可以用PWM_OUTPUT 初始化)。
  3. void pwmSetMode(int mode):

    • 设置 PWM 的工作模式。可以选择两种模式,PWM_MODE_BAL 和 PWM_MODE_MS(传统模式,通常用这个)。通常,PWM_MODE_BAL 用于标准 PWM 操作。
  4. void pwmSetRange(unsigned int range):

    • 设置 PWM 范围,这定义了 PWM 周期的长度。range 参数是一个无符号整数,通常设置为 1024,表示 PWM 周期的长度为 1024 个单位。
  5. void pwmSetClock(int divisor):

    • 设置 PWM 时钟频率的分频因子。通常情况下,这个值可以设置为 2 或 3,以获得合适的 PWM 频率。
  6. int pwmWrite(int pin, int value):

    • 用于设置指定 GPIO 引脚上的 PWM 值。pin 参数指定 GPIO 引脚,value 参数是 PWM 值,通常在范围 0 到 1023 之间,其中 0 表示完全关(0% 占空比),1023 表示完全开(100% 占空比)。

这些函数允许您配置和控制树莓派上的硬件 PWM 输出。硬件 PWM 通常提供更精确和可靠的 PWM 控制,因为它是由专用硬件电路生成的。

总结一下,树莓派的pwm配置分这么几步:

1、设置对应的gpio为pwm复用功能;

2、设置pwm的时钟;

3、设置pwm的模式并使能;

4、设置pwm的range;

5、设置pwm的dat;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值