查看: 2480|回复: 6

求助给位大神~~~~~

[复制链接]
  • TA的每日心情
    奋斗
    2013-8-26 08:36
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-9-20 11:33:41 | 显示全部楼层 |阅读模式
    分享到:
    请问计数器的计数输入端输入信号,然后我用readcounter()读取,显示出来的数是什么意思啊?是上升沿个数,下降沿个数还是上升和下降沿个数之和还是其他的?我用PWM输入信号,1s周期,然后占空比50%,想显示出1S内的脉冲个数,为什么显示出来的1S时间内的readcounter为47呢?如图显示。
    QQ截图20130920113126.png
    回复

    使用道具 举报

    该用户从未签到

    发表于 2013-9-21 13:41:12 | 显示全部楼层
    本帖最后由 leonard 于 2013-9-21 13:47 编辑

    47是没错的。
    首先是PWM和counter的时钟不是同步时钟,会有一定的误差,理论上来说readcounter=500(ms),也就是PWM输出的高电平时间。
    楼主把PWM接Counter的使能,就是让counter计数PWM高电平时间。楼主说用PWM输入信号,1s周期,然后占空比50%,那么高电平时间也就是0.5s了。
    counter的时钟是100hz,就是0.01s的周期,0.5/0.01=50,也就是readcounter的读书。

    是上升沿个数,下降沿个数还是上升和下降沿的问题要自己在设置面板内设置,或者API实现,具体是:
    双击打开counter的configure选项,configure标签下有分辨率(resolution),PSoC4貌似只有UDB实现,掠过,周期(period),最后是ClockMode,就是计数方向了,请自行阅读英文选项选择上升计数,下降技术,或其他。顺便的,counter不是按沿计数的。

    要显示出1S内的脉冲个数,要技术周期大于脉冲周期,在相同时钟下计数值除以脉冲宽度就是脉冲数了,比如楼主的就是:(0.01s*47)/(1s*50%)=0.94,近似为一个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-8-26 08:36
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2013-9-22 09:02:53 | 显示全部楼层
    leonard 发表于 2013-9-21 13:41
    47是没错的。
    首先是PWM和counter的时钟不是同步时钟,会有一定的误差,理论上来说readcounter=500(ms),也 ...

    其实图中的PWM是我用来控制时间的,PWM的周期为2S,占空比50%,就是1S高电平使counter使能,1s低电平使它停止,方便记录LCD上的数。我其实在做一个霍尔传感器,用来测转速,我肯定不知道它的脉宽啊,怎么办呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-9-22 10:56:48 来自手机 | 显示全部楼层
    楼主是要测单位时间的脉冲数来计算转速吗?如果是就可以简化一下。
    分为两部分:计时和计数。
    楼主的方案是用pwm高电平计时,但是问题在于counter在不使能时寄存器是清零的,所以要在pwm进入低电平前对counter读数。
    如果脉冲高度在3.3v系统里能当作高电平,那么可以用脉冲信号作为counter时钟,让counter计数。counter响应时钟上升沿,参考文档PSoC4架构技术参考手册 文档编号001-86886。
    如果psoc4提供2个counter(好像有二个),那么就一个用来计时,一个用来计数。
    counter1时钟接Pin接脉冲信号,用作计数,设置分辨率大于脉冲数的估算值,或者利用计数溢出OV产生高电平来测量用时。
    counter2开启compare模式,comp值设置为1s对应的值,当计时达到1s(counter=comp)时,comp引脚输出d高电平,标志计时结束。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-8-26 08:36
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2013-9-22 11:22:10 | 显示全部楼层
    leonard 发表于 2013-9-22 10:56
    楼主是要测单位时间的脉冲数来计算转速吗?如果是就可以简化一下。
    分为两部分:计时和计数。
    楼主的方案是 ...

    恩,是的,你又QQ吗?咱们单独聊聊,我是新手,所以不太熟悉
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-9-22 11:42:28 来自手机 | 显示全部楼层
    流程:
    Counter1-start,计数器初始化
    Counter2-start,计时器初始化并开始计时
    while(!comp),在1s中内计数
    Counter2-readcount,读取脉冲数
    counter1-stop,
    counter2-stop,

    如果不用counter计时的话就用CyDelay(1000)来延时1s,但可能不准。

    当单位脉冲数很高时,利用counter满量程后计时来计算。流程如下:
    设置counter1为8位分辨率,用counter2测量255个脉冲所用时间,
    counter1-start,计数器计数
    counter2-start,计时器计时
    while((counter1-readstatusregister()&counter-status-overflow)!=counter-status-overflow),等待counter1上溢
    counter2-readcounter,读取计时时间
    单位脉冲数就是255/read counter

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-9-22 11:43:47 来自手机 | 显示全部楼层
    wasd890228 发表于 2013-9-22 11:22
    恩,是的,你又QQ吗?咱们单独聊聊,我是新手,所以不太熟悉

    2284685392,验证写psoc4
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 17:27 , Processed in 0.178416 second(s), 28 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.