...超声波头产生超声波,但是产生的超声波居然能够听到声音
发布网友
发布时间:2024-10-19 07:13
我来回答
共3个回答
热心网友
时间:2024-12-01 02:39
因为不知道你的单片机的指令周期为多少,对于时间的问题就不计算了。说说你可能出现的问题。不过究竟有没有问题,最好还是用示波器来确定。
1、没有看汇编代码,对于程序真正需要几条指令,究竟用了多少时间并不了解,所以产生了问题。因为你只需要发射有限的几次,建议不要用循环,不要调用子函数。直接用赋值语句给端口赋值,延时用NOP(可能是nop()或者_nop()什么的,不记得了)。这样能够准确的执行。不然,那些条件判断,跳转等的指令会烦死你。
2、声音的频率是人耳能听到的声音的2倍频率,但是如果听到的是极其尖锐的声音,可能是没有问题的,探头发射的声音不可能一个准确的频率。中心频率是你期望的,你的程序就没有问题。
3、1楼给出的方式可以参考,但最好不要用那样的赋值语句。自动重装载是不错的选择。只不过,你的程序的思路要被打乱。而且会占用一个定时器。
热心网友
时间:2024-12-01 02:36
嗯,看了2楼的回答让我领悟了蛮多的,对于40K的频率的确可以用自动重装实现,至于直接给端口赋值是建立在你只发送有限的几次的基础上的,但是根据我的判断,你并不是只需要发射有限的几次,而是用40KHZ来驱动超声波发射头发送声波,然后用来测距或其他,所以只发送有限几次的并不适合你的系统。又根据2楼的不要使用循环,但是如果不占用一个定时器的话,在无限次的发送过程中就必须用循环了,但是我也不建议使用循环,使用循环会使发送的频率不稳定。所以根据你的需求,使用定时器是必须的了,如何自动重装呢?只要使定时器工作于方式2就可以了,具体的程序我就不给出了,相信你自己可以完成的。
能听到尖锐的声音我就不同意2楼的说法了,我觉得应该是你超声波发射头发出的声波频率还在人耳的听觉范围,离40K很远。如果中心频率是40K的话,人耳能听到的话,那么频率的下限应该是在20K以内,下限到40K的差值的最小值是20K,这个差值太大,系统非常不稳定,而且一个超声波系统老是发出尖锐声音,谁会愿意用这种东西呢?产生这样的结果的因素不仅仅有程序的影响,还应该包含有7404的影响,7404是不是使频率平移至低值了呢?当然这些只是假设,楼主可以自己验证,我个人认为7404可信度不是很高,如果楼主的程序正确了(用示波器测量是40K),而经过7404输出后频率的平移比较大,那么就可以认为7404不适合这样的电路,可以使用4049试试看。
以上只是个人的推测,可靠性看楼主啊。。。
修改完毕,睡觉咯。
热心网友
时间:2024-12-01 02:37
要用示波器看波形的