本帖最后由 南来之风 于 2022-8-7 13:48 编辑
之前的测评提及了Timer0超级方便的使用方法,这次把手头的超声波传感器模块拿来与PIC18F57Q43搭配一下。看看能否获取距离?此次使用的超声波传感器型号是:HC-SR04,其内部模块原理图如下:
与PIC单片机相连供电Vcc与单片机的VTG相连,Trig与RD0,Echo与RD1相连接。
测距的原理是:
体现在程序中:
void DistanceMeasure(void){
myCounterViaTimer = 0;
int i = 0;
for(i = 0; i < 10; i++){
IO_RD0_Trigger_SetLow(); DELAY_microseconds(2);
IO_RD0_Trigger_SetHigh(); DELAY_microseconds(15);
IO_RD0_Trigger_SetLow();
/***/
TMR0_StartTimer();
TMR0_Reload();
while(IO_RD1_Echo_GetValue() == 0);
StartCounter = TMR0_ReadTimer();
while(IO_RD1_Echo_GetValue() == 1);
EndCounter = TMR0_ReadTimer();
myCounterViaTimer += (uint16_t)(EndCounter - StartCounter);
TMR0_StopTimer();
}
myCounterViaTimer /= 10;
}
其中定时器Timer0在MCC中进行配置,如下:
其中计数器选择的是16bit,TMR0H-TMR0L组合起来可以计数65535us。如果这个时间对应Echo接收到的高电平宽度,那么实际声波传输时间为65535/2 = 32ms,
340*100cm*32 /1000 = 1088cm,接近10m。所以我们做个小实验用这个计数器还是绰绰有余的。
附上项目,希望有时间有兴趣的朋友,可以给出优化建议:
CHAOSHENGBO.X.zip
(1.59 MB)
|
感谢