一个GPIO接了一个方波输入,如何计算方波周期

Mr. Code 2018-09-27 02:07:36
以前用MCU做这样的事情,就是gpio中断+定时器计时,但是linux下怎么做比较合理?
linux下的一个gpio口接了一个方波,怎么计算这个方波的周期比较好。比如:
GPIO驱动中使用中断,但是不确定是否会频繁中断造成占用CPU过高;而且中断之后,如何精确计算两次中断之间的时间?

精通linux驱动的,是否有更好或者说更标准的方法?
...全文
1624 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜗牛哦 2019-03-01
  • 打赏
  • 举报
回复
linux不是一个硬实时os,这样计算的精度肯定不准的,建议用单片机裸跑做就准
freedom0009 2019-02-26
  • 打赏
  • 举报
回复
用中断可以实现,主要看你的方波的速率和你想要的计算的精度了, 如果只是简单的计算周期,直接在中断下半部函数里处理就好了。
john_liqinghan 2018-12-04
  • 打赏
  • 举报
回复
中断采样,采样越多,计算就越准确,只要你中断不要干太多业务,不会造成高CPU耗费的。
john_liqinghan 2018-09-29
  • 打赏
  • 举报
回复
linux并非实时操作系统
基于DSP2812的PWM方案设计 摘 要:本文研究了基于dsp2812的pwm方案,实现了由dsp控制的pwm波形输出,并通过软件 编程得到占空比不同的pwm脉冲序列,完成了pwm信号到模拟信号的数模转换(d/a)功能 。实验结果表明,应用dsp的pwm输出,具有极强的可控性,并且pwm经过简单的变换电路 就可以实现dac,这不仅能提高dac调制信号的精度,还将大大降低数模转换设备成本。 关键词:tms320f2812;脉宽调制(pwm);数模转换 中图分类号:tm461 脉宽调制(pwm:pulse width modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术 ,广泛应用于测量、通信和功率控制与变换的许多领域。目前,虽然pwm控制技术的实现 方法的研究已经取得了一系列成果,但这些方法仍存在缺陷,如产生pwm波形的速率和精 度不高、可控性不强等等。此外,在电子和自动化技术的应用中,单片机和dac是经常需 要同时使用的,然而许多单片机内部并没有集成dac,即使有些单片机内部集成了dac精 度也往往不高,在高精度的应用中还需外dac,这样增加了成本。正是由于dac芯片价 格相对昂贵,使得其广泛应用受到限制。基于此,本文研究采用具有高运算精度(32位 )和强大系统处理能力的tms320f2812芯片,对pwm输出波形进行深入的研究,并将pwm波 形通过低通滤波器实现dac的功能。 1 pwm调制算法的研究 对于任意波形的实现,可以在一个周期内,对信号进行等间距采样,只要采样频率足够 高,就可以根据采样点对信号重新进行刻画的。所以当采样频率取得足够高的时候,可 以将任意相邻两个采样点之间用直线连起来,通过与三角载波的比较,输出pwm波,从 而生成所需要的信号。下面将具体介绍实现的过程,采用规则采样法使每个脉冲的中点 与三角波的中心重合,使得计算大为简化。 图1 图2 如图1所示,a,b为相邻的两采样点。tc为采样周期。若取载波周期 ,n为整数,g为三角载波的幅值,k为直流电压幅值,则相邻采样点间有n个三角载波。 取第n个三角波作分析(1 n n),设等腰三角形的中心线与信号线的交点为d点,过d点 做一条跟横轴平行的直线与等腰三角载波相交于e点和f点,由图2可知,取te,tf作为控 制时刻,根据等腰三角形的比例计算得到脉冲的宽度δ为: (1) 根据面积相等原则,a,b点与横坐标轴组成的面积应该等于响应的脉冲部分的面积,可 以推导出: ,即三角载波的幅值是等于直流电压的幅值。从公式(1)中各个变量均可确定,即可以 根据各个变量求得pwm脉冲的宽度。 1.1 系统pwm软件实现 利用tms320lf2812来生成任意波形脉冲的基本思想是利用dsp的事件管理器中的全比较单 元、通用定时器、死区发生单元以及输出逻辑来生成pwm波,经复用的i/o引脚输出。ds p设置在连续增/减计数方式工作时,产生对称的pwm脉冲输出。在这种计数方式下,计数 器的值由初始值开始增加,当达到txpr值时,开始递减,直到变成0后又重新增加。在计 数器跳变的过程中,计数器的值与比较寄存器cmprx的值作比较,当计数器的值与比较寄 存器的值相等时对应的方波输出发生电平转换。在一个定时器周期内,输出方波将发生 2次翻转,从而形成一个脉冲。根据公式(1),写入dsp cmpr的值应该为: 系统软件部分分为初始化模块和运行模块,包括主程序、系统初始化子程序、定时器中 断服务程序、gpio端口配置子程序。具体程序流程如下: 1.2 硬件电路 图6 定时器功能框图 本研究中,由通用定时器t1产生pwm输出,定时器功能框图如图6所示。tms320f2812作为 控制器,用于处理采集到的数据和发送控制命令。由ccs环境下的c程序设置相关寄存器 ,产生不同占空比的pwm输出。用仿真器将pc机与系统硬件电路建立通信。tms320f2812 控制器首先采集t1pwm波形,然后将产生的pwm信号送入示波器,观察并分析。改变通用 定时器比较寄存器的值,可以以改变pwm信号的占空比。在本设计中,选取正弦波形的等 间距抽样值作为比较寄存器值,不仅可以得到随机的pwm输出,而且pwm调制信号通过低 通滤波器后仍可恢复正弦波。在系统运行中,驱动保护电路检测当前系统的运行状态, 如果系统中出现过流或欠压状况,pwm信号驱动器(ir2131)启动内部保护电路,锁存后 继pwm信号输出,同时通过fault引脚拉低tms320f2812控制器的pdpinta引脚电压,启动 dsp控制器的电源驱动保护。这时所有ev模块的输出引脚将被硬件置为高阻态,从而保护 控制系统。 1.3 pwm输出实验结果及分析 在硬件电路的基础上,示波器到pwm输出引脚,通过软件编程得到图7
可能感兴趣的项目设计:https://www.cirmall.com/circuit/5729/detail?3(备战2017电赛,开源8路舵机控制器驱动板) 应用场景: 该控制器主要应用于以模拟、数字舵机为关节的电子机械结构电气控制。例如:双足、六足、机器狗、搏击机器人、竞步机器人等。 24路舵机控制器驱动板实物展示: 主要特性: 24路周期20ms、500-2500us高精度宽度可调方波输出,强制高低电平输出,可以设置的上电初始位置 32位高性能MCU主控器 动力电源电压检测、低压报警功能 3个通用GPIO口,可读可写,支持Servo bus协议 USB转串及TTL串行口 可固件升级,不定期发布更新固件 原理框图开源,基本驱动开源,满足用户个人开发需求 支持蓝牙透传模块HC-05/HC-06连至电脑 高达4M bits FLASH存储多达17500条指令 图形化程序开发界面WAY STUDIO,仿真模型实时位置显示,时间线组织方式,简单易用,动作设计更加灵活 安卓系统控制台软件Way Pocket,通过蓝牙透传模块HC-05/HC-06实现无线控制。 实时控制、本地控制可选,控制信号端口强制高、低电平输出 该版本为“无极” 舵机控制器系列成员,性能稳定可靠,扩展能力强 丰富的视频指导教程,入门快捷简单 该集成环境抢先版使用教程:https://www.56.com/u41/v_MTQwNjM4NjM4.html 实力用事实说话,驱动六足视频演示:https://www.56.com/u19/v_MTQwODA3NTc2.html 实物购买链:https://item.taobao.com/item.htm?spm=a1z10.5-c.w40... 《舵机机器人开发环境》仿真界面:

1,319

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧