有哪个大神会用单片机脉冲测速原理图编程,做脉冲宽度测量

【已解决,fuck,脑残了】请教下各位大神关于51单片机读取占空比的问题|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
[attachment=4443872]&&&&------------------是我自己脑残了最近又在做些小玩意,需要检测接收机PWM信号的占空比,周期是20ms,高电平时长是1ms到2ms之间,1ms左右时打开某个开关,2ms左右时关闭某个开关,我想了一种检测方法,但是这种方法为什么在单片机上就行不通呢?理论上来说是可以行得通的。。。从逻辑上来讲。。。sbit input=P1^7;sbit LED=P1^6;char CS,ZT;//定时器初始化函数略void Time0_Int() interrupt 1&&&&&&{ && TH0&&= 0&& TL0&&= 0&&&&&&&&&&&&&&&&&& //33MHZ 0.1ms&& && if(input==1)&& {&& CS++;&& }&& if(input==0&&CS&0)&& {&&&& if(CS&15)&&&&&&&&//大于15个0.1ms即大于1.5ms&&&& {&&&&&&ZT=1;&&//主循环中有(if ZT=1,开关关闭,else,开关开启)&&&&&&LED=1;&&&& }&&&& if(CS&15)&&&& {&&&&&&ZT=0;&&&&&&LED=0;&&&& }&&&& CS=0;&& }} 这段程序烧进去后input接接收机信号输出端,用示波器看信号的确是在1ms至2ms高电平之间变动,但是灯就是一直亮,不熄灭。请问下各位我这种计时方式有错吗?
赞助商链接
用T2EX的捕获模式吧,测得宽度的还准确
赞助商链接
:用T2EX的捕获模式吧,测得宽度的还准确( 09:13)嬀/color]哥,我想知道我这样计时错在哪里,知其错才能不再错。
还有,在us级的中断时要考虑到调用中断程序时的出入堆栈的时间了,试试把15改成13看看
:还有,在us级的中断时要考虑到调用中断程序时的出入堆栈的时间了,试试把15改成13看看( 09:19)嬀/color]谢谢你了,我等下去实验室测试一下,其他大神如果有什么高见麻烦别藏着掖着,不管对错都说一下吧,取别人之长,补自己之短不对啊,那个占空比是在1ms-2ms之间变动,理论上来说临界值是10和20啊,取13和15不是一回事吗?
还有一个问题,这里用2个if,分别做&15,&15判断,如果恰好是15呢?写程序要严谨些,不如用if()   else,除非你准备将15忽略
水平有限,中断程序没有发现什么问题,会不会是主程序中的问题?
代码我贴出来吧:#include &STC15F2K60S2.H&sbit input1=P3^7;sbit input2=P3^6;sbit input3=P3^5;sbit input4=P3^4;sbit output1=P1^0;sbit output2=P1^1;sbit output3=P4^7;sbit output4=P1^2;sbit input=P1^6;sbit YM=P1^3;sbit LED=P4^0;char CS,ZT,i;void Time0_Init();void Delay(unsigned int s);void Delay(unsigned int s){&&&&&&&&for(i=0; i&s; i++);&&&&for(i=0; i&s; i++);} void Time0_Init()&&&&&&&&&&&&{TMOD = 0x01;&&&&&&&&&&&&&&&&&&&&IE&& = 0x82;TH0&&= 0TL0&&= 0&&&&&&&&&&&&&&&&TR0=1;&&&&&&&&&&&&&&&&&&&&}void main(){P4SW=0x70;LED=0;Time0_Init(); while(1) {&& if(ZT=0)&& {&&&&output1=input1;&&&&output2=input2;&&&&output3=input3;&&&&output4=input4;&& }&& if(ZT=1)&& {&&&&output1=YM;&&&&output2=YM;&&&&output3=YM;&&&&output4=YM;&& } }}void Time0_Int() interrupt 1&&&&&&{ && TH0&&= 0&& TL0&&= 0&&&&&&&&&&&&&&&&&& //0.1us&& && if(input==1)&& {&& CS++;&& }&& if(input==0&&CS&0)&& {&&&& if(CS&15)&&&& {&&&&&&ZT=1;&&&&&&LED=1;&&&& }&&&& if(CS&15)&&&& {&&&&&&ZT=0;&&&&&&LED=0;&&&& }&&&& CS=0;&& }} 以上是程序的代码,我主要是根据灯的变化来看是否正常工作的。我确定那个定时的时间是0.1ms以及中断程序是工作的,输入信号用示波器看的确是1ms到2ms变动
[attachment=4443120]这个是用软件算出来的定时器时间
是不是信号频率太高造成频繁动作,造成灯一直亮的假象?如果实在没法解决,不妨将CS送显示看看
LZ,你确定你的眼睛足够快吗??要知道1秒=1000ms你的灯是20ms刷新一次状态吗??内容比较长,我没看的很仔细
这可是至少50Hz的闪烁频率~~~~~
哥,我用示波器看过的,分析了下就是我这种计时方式有错,导致单片机不正常工作。
我给大家说下航模接收机输出的信号吧,航模接收机输出的是20ms为周期的PWM信号,其中占空比在1ms到2ms之间变动,我设置成要么占空比1ms,要么2ms,分别代表两种状态,我需要检测信号到底是哪种状态,以此来控制关闭打开LED
思路没有问题,估计是信号变化太快眼睛响应不过来
哥,不是眼睛反应不过来,麻烦仔细看下程序,如果占空比是1ms,或者2ms,LED状态就是亮和灭,不会闪烁的,LED要么一直是亮,要么一直是灭,不会闪烁
:哥,不是眼睛反应不过来,麻烦仔细看下程序,如果占空比是1ms,或者2ms,LED状态就是亮和灭,不会闪烁的,LED要么一直是亮,要么一直是灭,不会闪烁 ( 09:58) 信号用示波看稳定不??是一直1ms或一直是2ms吗??
用示波器不如用逻辑分析仪采集一定时间的信号
占空比绝对稳定,只在1ms和2ms这两个值切换,输出的都是方波,几乎没有波纹。航模接收机输出的信号绝对靠谱,连这都不靠谱航模还咋玩?
1.你用什么办法验证过你的定时器中断是100us。2.编程出现漏洞,等于15时怎么办?3.你的执行部份是否需要ms级的速度,如果不是,为何不采用累计方式来消除采集误差或抖动?比如只有连续收到100次大于1.7ms的信号时才会执行2ms的控制,只有再次收到100次小于1.3ms的信号时才会执行1ms的控制,中间值做无效信号处理。
关键是1ms与2ms信号转变的速度,太快的话眼睛是看不出来灯的变化的,要分辨起码要间隔200ms以上
哥,谢谢你一直在回答,但是能先仔细读一遍程序吗?灯的变化太快?程序中好像没有这么写吧?灯的变化是程序根据信号宽度进行的,不需要人为控制,我不清楚航模输出信号的变化频率,因此只是猜测。建议用示波器看下
你没有停止计数器计时吧
真没注意到这点,在C语法中,if(A=b)的形式是允许的,先将b赋值给A再判断真假,结果就是前一个if语句永远不成立,后一个永远成立。为了省事,我经常这样写if(A)&&&&elseif(!A)&& else
查看完整版本: [--
Powered by
Time 0.065882 second(s),query:5 Gzip enabled有没有使用过应广pms150c单片机的大神···_百度知道
有没有使用过应广pms150c单片机的大神···
我有更好的答案
不是pmc150吗?
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。请问大神单片机中的地址是什么意思 什么叫位寻址和字寻址_百度知道
请问大神单片机中的地址是什么意思 什么叫位寻址和字寻址
我有更好的答案
好久没玩单片机了位寻址类似位操作~比如 sbit sw = P0^0; sw=1;字寻址在单片机没接触过~在PLC上玩过1个字=16位 ;就拿S7-200来说操作VW就是操作一个字可以理解为字寻址如果你玩的是51单片机那么 操作一个INT型变量~应该就是在字寻址
采纳率:37%
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。(哦( o?_o? ))
(生如夏日太阳花)
(Ms. Darcy)
第三方登录:想要做“基于物联网的智能家居设计与开发”,使用那种类型的单片机比较好,可以通过 APP 进行通信并获取传感器的信息,开发学习阶段,请各位大神给予指点。谢谢
· 18 天前 · 209 次点击
9 回复 &| &直到
16:19:48 +08:00
& &18 天前 via Android
你要连网 必有 wifi 最便宜的 wifi 设备 路由器
& &18 天前 via Android
所以用路由器刷 openwrt 就可以开发了
& &17 天前 via Android
路由器最便宜…树莓派最方便,arm cortex-m 的芯片大概更实用,类似 stm32 带网络接口的板子(蓝牙 wifi 什么的)
& &17 天前 via Android
其实 ESP8266 在大多数场景下都够了,自带 MCU 的 WiFi 芯片,还便宜,C++或者 RTOS 不熟还有 ESP8266 For Arduino 加成
& &16 天前
@ 这样后面的传感器的添加就必须通过与 WIFI 来焊接,获取对应的数据吗?
@ 直接使用 stm32,后续焊接对应的烟雾传感,温湿传感等模块,用 stm32 的话,需要怎样实现通信呢?
@ 这种模式是否类似 zigbee 实现模块间的通信类似,换成 WIFI 模块
& &16 天前 via Android
@ 没啥相似性,直接由 ESP8266 连接到 AP,自己既是连接模块又是中控,简单清晰,配合服务器或者局域网玩耍
& &16 天前 via Android
@ 自己焊?你这个是毕设吧?买开发板,和配套模块,插上就可以。一般是 stm32 通过 spi i2c 等连接到这些外设 ic,来控制外设芯片工作。还是树莓派最简单
& &15 天前
@ 是的,打算自己焊,一开始打算用 stm32+配件,自己焊,上来问问各位大神的意见,再确定一下自己的入手的开发板,避免入坑
& &15 天前 via Android
那顺序是先买开发板,然后软件开发,然后把需要的电路提出来,修改下画电路板,做出来整块板。要是毕设还是推树莓派,买点模块一插,pcb 也不用画,程序大概都有现成的…
& · & 937 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.0 · 61ms · UTC 23:26 · PVG 07:26 · LAX 16:26 · JFK 19:26? Do have faith in what you're doing.

我要回帖

更多关于 单片机脉冲计数c程序 的文章

 

随机推荐