码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SG90舵机的pwm信号-使用linux定时器实现控制


    舵机工作原理

    在这里插入图片描述

    舵机的控制信号为PWM信号(PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,周期为20ms)
    在这里插入图片描述

    如何得到这周周期信号呢?这里就可以使用linux定时器

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

    setitimer函数为设置定时器(闹钟),可以实现周期定时。(settimer工作机制是,先对it_value倒计时,当it_value为零时触发信号,然后把it_value从零重置为it_interval,继续对it_value倒计时,一直这样循环下去)

    函数原型为 int setitimer(int which,const struct itimerval *new_value,struct itimerval *old_value);

    参数

    which 指定定时方式:
    ITIMER_REAL //以系统真实的时间来计算,发送的信号是SIGALRM。
    ITIMER_VIRTUAL //以该进程在用户态下花费的时间来计算,它发送出SIGVTALRM信号
    ITIMER_PROF /以该进程在用户态下和内核态下所费的时间来计算,发送的信号是SIGPROF

    new_value为传入参数:
    表示定时的时长

    old_value为传出参数:
    通常用不上,设置为NULL。。

    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;
      };
    
    struct timeval
    {
      __time_t tv_sec;		/* Seconds.  */
      __suseconds_t tv_usec;	/* Microseconds.  */
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    it_interval:代表定时器重新启动后赋给it_value的值。
    it_value:计时器安装后首先启动的初始值。

    PS:假如it_value为0是不会触发信号的,所以要能触发信号,it_value得大于0;如果it_interval为零,只会延时,不会定时(也就是说只会触发一次信号)。

    //该函数实现,程序运行3秒后,每隔一秒打印一个hello
    include<stdio.h>
    #include
    #include
    #include
    static int i;
    void signalHandler(int signum)
    {
            i++;
            if(i==2000){
                    printf("hello\n");
                    i=0;
            }
    
    
    }
    
    int main()
    {
            i=0;
            //setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
            struct itimerval itv;
            
            //首次把it_value的初值倒计时到零之后,
            //之后每次都会把it_value重置为it_interval
            itv.it_interval.tv_sec=0;
            itv.it_interval.tv_usec=500;//设置为500us
            
            //it_value初值的设置,提供程序第一次运行时的倒计时
            itv.it_value.tv_sec=3;//一开始设置为3s
            itv.it_value.tv_usec=0;
            if(setitimer(ITIMER_REAL, &itv, NULL)==-1){
    
                    perror("error");
                    exit(-1);
            }
            signal(SIGALRM,signalHandler);
    
    
            while(1);
    
            return 0;
    
    }
                                
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
  • 相关阅读:
    windows ubuntu 子系统:肿瘤全外篇,2. fq 数据质控,比对。
    如何利用好信息化工具搭建完善高效的药品研发体系
    大名鼎鼎的OceanBase居然在买Star了?
    2023全国大学生电子设计竞赛H题全解 [原创www.cnblogs.com/helesheng]
    【Ubuntu 终端终结者Ctrl shift e无法垂直分页解决办法】
    浅谈菊风实时音视频 (RTC)与实时操作系统 (RTOS) 在智能硬件领域应用
    医护上门系统—为老人和患者提供更舒适和现代化体验
    HTML大学班级活动网页设计 、大学校园HTML实例网页代码 、本实例适合于初学HTML的同学
    测试大老都是怎么理解cookie&session的?
    jmeter-函数助手,关联数据,CSV文件读取
  • 原文地址:https://blog.csdn.net/cyh20001027/article/details/125716580
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号