第十二课:树莓驱动SG90派舵机

目录

一、PWM简介

二、树莓派如何输出PWM(主要介绍软件模拟PWM的方法)

第一种:硬件PWM---------->(精确的PWM控制)

第二种:软件模拟PWM

(1)查看开发手册  树莓派wiringPi库详释(借鉴)

(2)树莓派呼吸灯代码(软件模拟PWM)

  (3)编译(注意:链接库-lpthread -lwiringPi)

三、树莓派控制舵机旋转角度

(一)舵机SG90介绍

 (二)占空比与舵机旋转角度关系示意图

四、树莓派与SG90舵机连接示意图

五、软件代码 


一、PWM简介

脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法

PWM(Pulse Width Modulation):脉冲宽度调制

脉冲:方波,频率(freq)

宽度:高电平的宽度,占空比(duty)

周期:CYCLE

占空比:高电平的占比(100&中占百分几)

占空比静态示意图:

占空比动态示意图:

  

二、树莓派如何输出PWM(主要介绍软件模拟PWM的方法

wiringPi两种方式产生PWM

第一种:硬件PWM---------->(精确的PWM控制)

第二种:软件模拟PWM

(1)查看开发手册  树莓派wiringPi库详释(借鉴)

头文件:#include<softPwm.h>
int softPwmCreate (int pin, int initialValue, int pwmRange)

pin:设置为软件PWM输出引脚

initalValue:引脚输出的初始值

pwmRange:PWM值的范围上限

建议使用100.

返回:0表示成功。

创建一个模拟的PWM输出引脚
void softPwmWrite (int pin, int value)

pin:PWM输出引脚

value:PWM引脚输出的值

输出的PWM值

(2)树莓派呼吸灯代码(软件模拟PWM

 #include <stdio.h>
 #include <wiringPi.h>
 #include <softPwm.h>

 #define LED 29

 int main(void)
 {
     int i = 0;
     if(wiringPiSetup() == -1)
     {
          printf("gpio error!\n");
          return -1;
     }
     softPwmCreate(LED, 0, 100); //创建一个模拟的PWM输出引脚
     while (1)
     {
           for (i=0; i<100; i++)
           {
                softPwmWrite(LED, i);//输出的PWM值
                delay(20);
           }
           for(i=100;i>0;i--)
           {
                softPwmWrite(LED,i);//输出的PWM值
                delay(20);
           }
     }
     return 0;
 }

(3)编译(注意:链接库-lpthread -lwiringPi)

pi@raspberrypi:~/raspberry/SG90 $ ls
a.out  LED.c
pi@raspberrypi:~/raspberry/SG90 $ gcc LED.c -lpthread -lwiringPi
pi@raspberrypi:~/raspberry/SG90 $ 

三、树莓派控制舵机旋转角度

(一)舵机SG90介绍

                

 (二)占空比与舵机旋转角度关系示意图

20ms脉冲周期高电平时间舵机旋转角度
 0.5ms0度
1.0ms45度
1.5ms90度
2.0ms135度
2.5ms180度

                     动态示意图

 四、树莓派与SG90舵机连接示意图

              

五、软件代码 

根据公式:PWMfreq = 1 x 10^6 / (100 x range) ,要得到PWM频率为50Hz,则range为200,即周期分为200步。

#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>
#define PWM_PIN     29

int main(void)
{
     if(wiringPiSetup() == -1)
     {
          printf("gpio error!\n");
          return -1;
     }
    pinMode(PWM_PIN, OUTPUT);
    softPwmCreate(PWM_PIN, 0, 200);     
    
    int num ;
    while(1) 
    {
        scanf("%d",&num);
        switch(num)
        {
            case 45:
                softPwmWrite(PWM_PIN, 20);
            break;
            case 90:
                softPwmWrite(PWM_PIN, 25);
            break;

            defualt:
            break;
        }
    }
    return 0 ;
}

编译(注意:链接库-lpthread -lwiringPi) 

pi@raspberrypi:~/raspberry/SG90 $ ls
a.out  
pi@raspberrypi:~/raspberry/SG90 $ gcc LED.c -lpthread -lwiringPi
pi@raspberrypi:~/raspberry/SG90 $ 

  • 4
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值