首页 > 其他分享 >基于h616的SG90舵机开发

基于h616的SG90舵机开发

时间:2024-06-09 17:57:38浏览次数:25  
标签:__ 定时器 struct 舵机 h616 计时器 include SG90 PWM

一.舵机介绍

如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制用处:垃圾桶项目开盖 用、智能小车的全比例转向、摄像头云台、机械臂等 常见的有0-90°、0-180°、0-360°

怎么控制转角

向黄色信号线“灌入”PWM信号。

PWM波的频率不能太高,50hz,即周期=1/频率=1/50=0.02s,20ms左右数据: 不同的PWM波形对应不同的旋转角度,以20ms为周期,50hz为频率的PWM波

高电平持续 时间低电平持续 时间波形图角 度
0.5ms19.5ms0
1ms19ms45
1.5ms18.5ms90
2ms18ms据上图推理145

定时器需要定时20ms,关心的单位0.5ms, 20ms = 0.5ms * 40:

二.Linux定时器

分析:实现定时器,通过itimerval结构体以及函数setitimer产生的信号,系统随之使用signal信号处理 函数来处理产生的定时信号。从而实现定时器。

struct itimerval {  

 /* Value to put into `it_value' when the timer expires. */    

        struct timeval it_interval;  

 /* Time to the next timer expiration. */    

        struct timeval it_value;

};

it_interval:计时器的初始值,一般基于这个初始值来加或者来减,看控制函数的参数配置 it_value:程序跑到这之后,多久启动定时器

struct timeval

{          __time_t tv_sec; /* Seconds. */

           __suseconds_t tv_usec; /* Microseconds. */

};

int setitimer (        __itimer_which_t __which,      

                            const struct itimerval *__restrict __new,    

                            struct itimerval *__restrict __old)

setitimer()将value指向的结构体设为计时器的当前值,如果ovalue不是NULL,将返回计时器原有值。

which:三种类型 ITIMER_REAL

  • //数值为0,计时器的值实时递减,发送的信号是SIGALRM。 ITIMER_VIRTUAL
  • //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。 ITIMER_PROF
  • //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF

很明显,这边需要捕获对应的信号进行逻辑相关处理 signal(SIGALRM,signal_handler)

返回说明: 成功执行时,返回0。失败返回-1

三.代码实现

需要注意的是,一个进程只能创建一个定时器

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>
#include <wiringPi.h>
#define SG90Pin 5
int jd;
static int i = 0;
void signal_handler(int signum)
{
    if(i <= jd){
        digitalWrite(SG90Pin, HIGH);
   }else{
        digitalWrite(SG90Pin, LOW);
   }
    if(i == 40){
        i = 0;
   }
    i++;
}
int main()
{
    struct itimerval itv;
    jd = 0;
    wiringPiSetup();
    pinMode(SG90Pin, OUTPUT);
    //设定定时时间
    itv.it_interval.tv_sec = 0;
    itv.it_interval.tv_usec = 500;
    //设定开始生效,启动定时器的时间
    itv.it_value.tv_sec = 1;
    itv.it_value.tv_usec = 0;
    //设定定时方式
    if( -1 == setitimer(ITIMER_REAL, &itv, NULL)){
        perror("error");
        exit(-1);
   }
    //信号处理
    signal(SIGALRM,signal_handler);
    while(1){
        printf("input jd: 1-0 2-45 3-90 4-135 \n");
        scanf("%d",&jd);
   }
    return 0;
}

标签:__,定时器,struct,舵机,h616,计时器,include,SG90,PWM
From: https://blog.csdn.net/2303_77402228/article/details/139564219

相关文章

  • 学习舵机
    一、舵机的“自白”我(舵机)是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。那么问题来了?我们用舵机来干嘛呢,当然是控制方向了,如今,基本上飞机或者智能车又或是机器人等等都会用到舵机这个东西,所以说,认识舵机,并且运用舵机就成为我们必不可少的知识学......
  • STM32控制两电机一舵机小车的PWM开环控制
    基于StmcubeMx和Clion的stm32f4单片机的嵌入式开发一:硬件基础本小车主要采用轮趣科技阿克曼小车以及f407VET6单片机以及拓展板相关淘宝链接:【淘宝】https://m.tb.cn/h.gWoFBmqRHmh52o5?tk=lsuzWEfMeUDZH4920 部分相关资料如下:(部分没有的资料可以询问淘宝客服)二:任务要......
  • 1 - 香橙派硬件PWM控制sg90舵机
    本人机械电子专业的大一学生一枚,这是我在博客园的第一篇随笔  2024年4月份我在二手平台花费300大洋入手了香橙派zero3和3B,买回来后一开始是装上ubuntu跑QQ机器人和minecraft服务器的,所以虽然看到了板子上的40pin引脚,但当时并未立即探索其硬件扩展功能。几天后,好奇心驱使我深入......
  • mBlock & Arduino(9)舵机(Servo motor)控制
    舵机(Servomotor)英文常简称Servo,中文也有人称伺服机,由控制电路、齿轮、直流马达等组成,可使用〈mBlock&Arduino(4)利用PWM模拟类比讯号〉中谈过的PWM技术来控制舵机转动角度,像Plotclock就应用了三个舵机,以手臂在白板上绘制出目前的时间。舵机控制原理舵机的基本原理是接受......
  • 基于arduino+as608+360舵机的宿舍指纹锁
    需要的制作材料Arduinonano开发板AS608指纹模块MG995360舵机(360舵机的控制与180舵机控制不相同,360舵机只可以控制旋转的速度,180舵机可以控制旋转的角度)面包板,电线若干准备部分参考了大佬的代码http://t.csdnimg.cn/GB29Qarduino模块可以看b站视频,,零基础(c语言零基础......
  • stm32实现舵机速度控制
    一、舵机介绍舵机是一种常用的器件,可以用于机械臂,云台等项目中,通过pwm的占空比来调节实现舵机的旋转角度,所以首先你得会stm32输出pwm波。常用的舵机有90度舵机,180度舵机,270度舵机和360度舵机,根据你的需求来选择舵机的种类,注意一点就是360度舵机控制不了旋转角度。同时如果想要......
  • 基于 DYNAMIXEL XL330 舵机的5自由度机械臂
    完整视频链接:https://www.bilibili.com/video/BV1Yz421f7AK/?spm_id_from=333.999.0.0&vd_source=9456951d706e2acc026e424d8a228909 ProjectDescription:A5DOFrobotarmusingtheDynamixelXL-330andArduinoMKR.Allpartsoftherobotarmare3Dprintedusing......
  • 舵机烧录
    舵机烧录一、硬件连接1、准备物资2、连接(1)舵机线一侧连接舵机控制板,另一侧连接舵机(2)老安卓线一侧连接舵机控制板,一侧连接电脑(3)接上低压电池二、软件使用1、打开舵机烧录软件(BusServoTerminal)2、设置ID号(1)选择参数设置(2)设置舵机的ID号(3)调整电压(4)设置3、设置舵机位置(1......
  • 通用定时器功能案例 RGB 直流电机 舵机 超声波
    复盘局:RGB彩灯:(定时器输出比较功能)        功能效果:按下按键1亮红灯 按下按键2亮绿灯 按下按键3亮蓝灯 按下按键4随机变色RGB彩灯原理:通过改变三个灯不同的亮度混合在一起形成不同的颜色总体配置思路:    1.初始化配置        {     ......
  • arduino esp8266 舵机控制
    舵机的控制:舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:0.5ms--------------0度;1.0ms------------45度;1.5ms------------90度;2.0ms-----------135度;2.5ms-----------1......