• 已解决 33895 个问题
  • 已帮助 5814 位优秀工程师

acd采集和超声波采集整合不到一起怎么办

724649614@qq.com 2017-09-05 浏览量:2499
stc12的最小系统板,用adc采集东西和超声波采集距离发现adc可以用超声波的反应变的非常迟钝,有什么办法可以调试的吗
单片机 51单片机
1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1. 超聲波單I/O口可以用外部中斷方式來寫

    2. ADC也可用中斷方式來讀值

    中斷方式將不會有Busy waiting的方式,更具彈性不會卡住


    • 发布于 2017-09-05
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:7
  • 楼主,1.检查下两个有没有复用的IO;2.检查下ADC采集中有无较长时间的等待阻塞,造成超声波MCU执行时间很短且执行的频率过低。
    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 2
    • 0

  • ADC采用中断的方式来读取,在中断中读取出ADC值即可(中断不推荐做太多耗时处理),在main函数while中处理ADC的值。

    超声波使用Timer中断来翻转IO口发送。

    按照楼主的说法,应该是在处理时使用了延时或者等待等处理方式,实际应用中最好将模块分时处理,保证每个模块都有相应的处理时间,如果一直在等待其中一个模块,那另一个模块的功能会收到影响。尽量使用单片机的外设去实现。

    • 发布于2017-09-07
    • 举报
    • 评论 0
    • 2
    • 0

  • 看看你的程序,你是不是用的等待adc转换成功读取 啊?在超声波程序里关掉ADC的中断相应,用查询的方式。我估计你是ADC打断了超声波的程序。
    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 1
    • 0

  • 虽然具体的细节我不太清楚,但是adc采集与超生波测距,两个模块的函数都要用到while语句等待,用while语句可能程序会死在这里。。之前我就遇到过。建议:把其中一个模块先注释掉。一个个调通,再整合起来。调调看。如果还不行。超生波计时可以用输入捕获来实现,这样就不会用到while语句。可能能解决问题。
    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 1
    • 0

  • 把代码贴出来看看吧,调试的话,肯定先弄好一部分,再把另一部分加进去啊,看看效果怎么样,再慢慢调或者改代码
    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 1
    • 0

  • 超声波对于时间上的要求比较严格,时间精度要高,如果你的ADC部分占用中断线或是占用CPU时间比较长,或是ADC的计算时间比较长(由于是51单片机,计算可能更费时)就会使超声波受到影响。
    不过你可以减少ADC的采样间隔或是简化计算来优化一下。

    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 1
    • 0

  • 超声波可采用输入捕获来完成采样工作,ADC采样也可通过中断来完成。还有一个重要的就是中断里不要搞太多耗时的任务。


    • 发布于2018-09-03
    • 举报
    • 评论 0
    • 0
    • 0

acd采集和超声波采集整合不到一起怎么办