佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2240|回复: 9

从一个Input计算waveform period

[复制链接]
发表于 9-4-2012 12:54 PM | 显示全部楼层 |阅读模式
i. 你要想做什么? 你的应用是什么?
用mcu读取外来input然后计算time period.
计算一个dc motor的RPM. 读dc motor rpm 的是类似Encoder With Plate

http://www.cytron.com.my/viewProduct.php?pcode=RE08A&name=Encoder%20With%20Plate

当有pulse进入时读取waveform.

ii. 你想要拿到什么效果
利用waveform period 算出 RPM。

iii. 你做了什么
读完所有佳礼关于ADC的贴,也成功写出.
读关于timer0,timer1,timer2 data 成功模仿PWM

iv. 你遇到了什么问题。
不知如何从ADC读取waveform,因为要计算当input时开始计时trigger多久. 当没有input时egde down.
timer1 里有个capture mode 不懂如何program.

v. 你用什么MCU?
PIC16F877A
MPLAB IDE v8.83

vi. 你用什么语言? ASM /C/PICBasic/Keil?Compiler 版本?
c language
HI-tech c compiler pro

vii. 有源码吗? 如是抄来的请注明出处, 请放链接。
没有相关的Sample.

ix. 你google 了吗? 你的搜索关键字是什么?
ADC waveform
PIC RPM hitech
pic capture mode

表达能力不好...看不明白在补充...
回复

使用道具 举报


ADVERTISEMENT

发表于 10-4-2012 10:35 AM | 显示全部楼层
i. 你要想做什么? 你的应用是什么?
用mcu读取外来input然后计算time period.
计算一个dc motor的RPM. 读dc motor rpm 的是类似Encoder With Plate

~J~1 发表于 9-4-2012 12:54 PM


你的输入是TTL Pulse  脉冲 是吗?
为什么你要要用ADC 来读取? 有什么特别原因吗?
回复

使用道具 举报

 楼主| 发表于 10-4-2012 01:29 PM | 显示全部楼层
对...输入是TTL Pulse  脉冲
因为在RC2试不到 capture mode(不会用),想从ADC着手。
现在确定是用capture mode, 在理解
http://www.microchip.com.tw/Taiw ... e2009S/Elite_IC.pdf
而16f877a是属于pdf里说的第一代 对吗?
回复

使用道具 举报

发表于 11-4-2012 07:41 AM | 显示全部楼层
对...输入是TTL Pulse  脉冲
因为在RC2试不到 capture mode(不会用),想从ADC着手。
~J~1 发表于 10-4-2012 01:29 PM

不要用ADC, ADC 的应该不是这样的。
CCP是正确的。


现在确定是用capture mode, 在理解
http://www.microchip.com.tw/Taiw ... e2009S/Elite_IC.pdf

你要试试去理解。。
还有另一种方法, 就是Timer0 external Clock input,  RA4 , TOCKI
调零 Timer0, 你的脉冲输入去RA4, 然后启动另一个timer 计时。 timer 0 在16F877A 是8bit,255 次后,timer 0 overflow 满溢, 你看用了多少时间, 就可以计算出RPM。

RPM, 其实可以很容易, 也可以很难。。。
太快的测试不到, 太慢的如1~2 RPM 也测试不到, 程序方面要下功夫、。。先决定你要测的范围。。

而16f877a是属于pdf里说的第一代 对吗?

PIC16F877A 是当时很红的一款MCU, 差不多是第一款Flash memory的, 在它之前的都是OTP (One Time Programming)., 要不就是Eprom (要用UV 光去檫除的) 的。。
PIC16F877A 后来被PIC16F887取代, 但是目前会鼓励大家多使用PIC16F1937/9
回复

使用道具 举报

 楼主| 发表于 11-4-2012 02:13 PM | 显示全部楼层
TRISC=0b00000010;
    OPTION_REG=0b10010000;
    CCP2CON=0b00000101;
    T1CON=0b01000011;

while(1)
{      
        CCP2IF=0;    //clear Interrupt flag
        while (CCP2IF!=1) continue;    //wait for an interrupt
        start = CCPR2H << 8;    // save start time        
        start = start|CCPR2L;

        CCP2IF=0;    //clear interrupt flag
        while (CCP2IF!=1) continue;    //wait again for next interrupt
        finish = CCPR2H << 8;    // save start time        
        finish = finish|CCPR2L;

        period=finish-start;    //calculate period
        
        rpm = 60*(1/period);
       }

用sample capture方式写了一个, 可是CCPR2H没save到value。是用lcd来查start, finish, period 的value, 都等于0. 有没有别的方法可以知道start, finish, period 的value?
回复

使用道具 举报

 楼主| 发表于 11-4-2012 02:16 PM | 显示全部楼层
补充: 用max:170rpm 的 dc motor...
rpm搜索范围大概在30rpm至130rpm 左右
这样的范围会难吗?和需要高resolution吗?
回复

使用道具 举报

Follow Us
发表于 12-4-2012 01:58 PM | 显示全部楼层
补充: 用max:170rpm 的 dc motor...
rpm搜索范围大概在30rpm至130rpm 左右
这样的范围会难吗?和需要高r ...
~J~1 发表于 11-4-2012 02:16 PM

首先, 你确定是30~130RPM?
30RPM/ 60= 0.5hz
130RPM/ 60= 2.166hz

如是这种速度, 你用I/O + Timer 直接量吧。。
估计CCP 量不到这种慢速。。。或者我不会。。

我做过的用CCP只是能量150 ~999 rpm , 还是规定要用4Mhz 的clock 呢。
回复

使用道具 举报

 楼主| 发表于 14-4-2012 02:09 AM | 显示全部楼层
是这个范围~~
谢谢pic指导....

想知道我写的code是可以用的吗?因为不懂reading 和 save 的方法。。对RC1 input 还是没有value...
回复

使用道具 举报


ADVERTISEMENT

发表于 14-4-2012 09:37 AM | 显示全部楼层
是这个范围~~
谢谢pic指导....

想知道我写的code是可以用的吗?因为不懂reading 和 save 的方法。。对 ...
~J~1 发表于 14-4-2012 02:09 AM


CCP 我估计是不行了。。时间太长了。。。
(高手可能会想:可以用累积的方法, 但是也没有必要了。。)

先理解,
30 RPM =
30RPM/ 60
= 0.5hz
= 2sec

130RPM/ 60
= 2.166hz
=0.462sec

你直接用timer 测量两个 pulse 之间的时间算了。。。
起始时先等pulse 从Low to High
当pulse 变high 时, reset timer。
然后等pulse 从high 去low。
当pulse 再度从Low 变high 时, 记录 timer, 取timer 的值。

然后换算去 RPM, 然后显示。
问题是, timer, 你要写一个长时间的timer routine,
可能是1000ms, 精确到1ms 的,
每过1000ms, 你的sec counter + 1
那么你就可以实现一个长时间的timer。

因为这个RPM 很慢。。你的刷新显示也不会太频密的。。
上面是一个概念, 给你参考。

如果你能够使用 CCS C, 或许我可能有空时写一段示范程序给你看。。
回复

使用道具 举报

发表于 8-6-2012 05:35 PM | 显示全部楼层
回复 8# ~J~1


    这样慢速, interrupt可能会比较好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 19-4-2024 07:24 PM , Processed in 0.063855 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表