CX20106A原理图
芯片说明
CX20106A,红外线/超声波接收专用芯片
1. CX20106A红外线遥控接收前置放大电路,多适用于电视机。
2. CX20106A也同样适用于超声波测试,主要频率在38KHZ~41KHZ,在超声波应用中通常选取40KHZ。
部分引脚功能和使用
当CX20106A 接收到40KHz(发射频率和解制必须一致)信号时,会在OUT引脚上产生一个低电平下降脉冲,这个信号可以接到单片机的引脚,进而进行监测。
在实际调试的时候只关心芯片OUT脚在收到信号是否有一个下降沿产生。如果探头一直接收到超声波(也就是40KHZ波),在OUT脚将会有周期的低电平产生。不会像通常认为的那样,OUT脚一直为低电平。这是刚用CX20106A时的一个常见错误。
最后只要通过单片机来来计算发射信号时到收到信号(也就是用单片机检测下降沿)时这段时间的长度,再通过数学计算,转化为距离,即可。
超声波测距应用
总体思路:发波->开启定时器1开始计时->检测超声波返回探头(下降沿)->停止计时->计算距离->清除定时器1计数值以方便下次测量
如何发8个40KHZ的波
大家要和 HC-SR04 超声波模块区分,因为 HC-SR04 模块内置硬件发送超声波的模块(只要给一个发送波的信号,就会自动的发送8个40khz的超声波)而 我们现在是用:CX20106A 配合 超声波T/R发射/接收管 使用的,也就是下图:
void SendSave()
{u8 i;for(i=0;i<8;i++){P10 = 1;Delay13us();//持续13usP10 = 0;Delay13us();//持续13us}
}
如何判断接收了返回波
由高电平跳转回低电平,表示波回来了
while(P11==1);//下降沿就跳出了
如何计算距离
公式:距离=速度(340m/s)*时间/2
方法一(Timer1):
其中开启定时器1注意用12T模式因为一个计数值刚好是12/12MHZ = 1us
1T的话 一个计数值是1/12MHZ,时间不是整数不好算(这里借助isp生成)
void Timer1Init(void) //@12.000MHz
{AUXR &= 0xBF; //定时器时钟12T模式TMOD &= 0x0F; //设置定时器模式TL1 = 0x00; //设置定时初始值TH1 = 0x00; //设置定时初始值TF1 = 0; //清除TF1标志TR1 = 0; //定时器1暂时不开始计时
}
u16 GetDistance()
{u16 dis = 0;SendSave();TR1 = 1;while((TF1==0)&&(P11==1));TR1=0;if(TF1==1){dis = 999;TF1 = 0;}else{dis = ((TH1<<8)|TL1)*0.017;}TH1=TL1=0;return dis;
}
为什么乘以0.017,这里换算关系计数值乘以10的-6次方换算成秒,在乘以340m/s再除以2得到单位是m,再换算成cm即可;
方法二(PCA):
类比Timer1学习
PCA做计数器用,并且配置成12T模式(12分频)
如何配置呢?查手册可知
复位数值:
怎么配置(模式寄存器,控制寄存器):
综上看见复位值就是我们要设置的模式,其实不用动就可以了,只需要记住CR是计数器运行控制位,CH,CL存储计数值,CF是计时器溢出标志位,并且只可以通过软件清零(手动清零)
为了安全起见:
void PcaInit()
{CMOD = 0x00;//12TCCON = 0x00;//技术开关关闭 清除CH,CL
}
u16 SonicDistance()
{u16 dis = 0;SendSave();CR = 1;while((CF==0)&&(P11==1));CR=0;if(CF==1){dis = 999;CF = 0;}else{dis = ((CH<<8)|CL)*0.017;}CH=CL=0;return dis;
}
现象演示
(十五)CX20106A 中超声波测量的应用
----- 如有错误欢迎大家批评指正!!!