• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

如何使用STM32普通IO检测38US的脉冲宽度?

PG_CPZ 2021-01-09 浏览量:1256

最近买了一块共享充电桩的电路板,主控芯片是STM32F030C8T6后面我换成了STM32F103C8T6 上面的计量芯片是BL0937,BL0937引脚输出固定为38US的脉宽,频率与功率成正比,过流时,输出6.378KHz的脉冲。其中有一些IO没得复用或重映射成定时器通道IO例如PA0PA1PA5等,那如何用普通IO检测这么短的脉冲宽度呢?2、因为有10路输出,就是要10路都得做脉冲检测,还得做通讯,如何实现才会不影响通讯?  PS:没有外部高速和低速晶振,只能用内部的。别人的产品也是用这块板可以实现,所以请问是在不外挂其他模块的情况下如何实现?


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 既然别人可以实现,肯定是有办法的,我认为可以从以下几个方面考虑

    1.定时器中读取IO的输入电平,然后进行判断,这样可以算出高低电平的时间

    2.定时器配合外部中断来做,IO配置为外外部中断,进去中断后读定时器的计数值

    因为你这个是固定脉宽输出,不是频率测量,只要判断出脉冲不一样就好了,这样可操作的余地就稍微大一点。不需要每个脉冲都读取,当然用pwm是最快的做法了。

    • 发布于 2021-01-09
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:5
  • 我觉得38us时间不算短,关键是你有10路。不够我觉得应该也可以做成出来,关键是代码优化问题。

    我给的思路检测方法跟楼下一样,通过定时器和外部中断来实现,但是代码中的,关于中断和定时器的操作最好用寄存器方式实现。

    先不管通讯问题,即先调试1路,再调试10路。都OK话,最后再添加通讯。

    这其中的中断优先级问题也要考虑

    • 发布于2021-01-11
    • 举报
    • 评论 0
    • 1
    • 0

  • 建议STM32外挂一个小规模的FPGA来做多通道脉冲检测,时间精度能有好的保障!
    • 发布于2021-01-09
    • 举报
    • 评论 1
    • 0
    • 0
PG_CPZ 回复了 SunnyPlus :别人的产品用的也是这块板,没有外挂模块也能实现,忘了说芯片没有外部高、低速晶振,只能用内部晶振 回复

  • 可以用cpld检测脉冲,然后和mcu通讯,实现异步检测法
    • 发布于2021-01-09
    • 举报
    • 评论 1
    • 0
    • 0
PG_CPZ 回复了 yhj416606438 :别人的产品用的也是这块板,没有外挂模块也能实。忘了说芯片没有外部高、低速晶振,只能用内部晶振 回复

  • PWM是最简单的,如果没有定时器,单靠IO中断,很难实现,因为中断的进出本身就需要时间
    • 发布于2021-01-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 回路有点多,一个芯片检测可能会有时序误差,看你的精度要求,要求高就只能用CPLD的
    • 发布于2021-01-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

如何使用STM32普通IO检测38US的脉冲宽度?