基于STM8单片机的一体化超声波测距模块JSN-SR04T内部程序源代码

9 篇文章 4 订阅
4 篇文章 5 订阅
本文介绍了基于STM8S003F3P6单片机的一体化超声波测距模块JSN-SR04T的设计与程序实现。模块采用40kHz超声波信号进行测距,通过STM8S003单片机计算发射与接收信号的时间差来计算距离。代码中涉及STM8的定时器、串口通信及中断处理。作者分享了部分源代码,并提醒STM8S003的烧写限制和内存大小。此外,还提到了放大电路中使用的LMV324运放。
摘要由CSDN通过智能技术生成

基于STM8单片机的一体化超声波测距模块JSN-SR04T程序源代码

相信很多朋友都用过一款JSN-SR04T一体化超声波测距模块或者ASN-SR04T超声波测距模块,这个模块售价很平民,某宝上大约十几RMB到几十RMB左右,能测20-400cm,能满足譬如倒车雷达啊、停车场之类的场合,但是精度和远度啥的不太敢恭维,超过4米,基本就是个废物。我也买了几个,要了一些资料,但是资料大多数都是讲怎么使用JSN-SR04T模块的,而我很想知道是如何制作JSN-SR04T这个模块(楼主就是爱折腾,矮尔基曾说:折腾使人进步),关键是模块中ST单片机的程序。
还好模块上的几个芯片上的字母都清晰可见,哎呦喂,这点小字啊,为了看清,我的眼差点废了,带上老花镜、放大镜(开玩笑)终于看清了,模块主要是用st的8位芯片STM8S003F3P6,性能比STM32差很多,但是好在低功耗加持,但是不得不说使用起来是各种坑,貌似STM8S003只能烧写100次,内存大小只有8K,一个printf重定向程序就编译通过不了,中断也是只能一组P口,只能使用一组中断,也就是用PC1口和PC2口接收外部中断,那么中断来了,你根本无法判别这是那个口接收的,只知道是PC所有的接口其中一个或者多个有中断,但是做这个超声波传感器还是够用的。放大电路芯片用的是LMV324运放。

基本原理:

单片机发出40Khz信号驱动升压中周,中周将驱动信号传送给一体式超声波探头,一体式超声波探头发出超声波信号,同时一体式超声波探头接收返回的超声波信号,该信号经过滤波、整形放大电路回单片机STM8S003,MCU根据发送40Khz信号与接收到返回信号之间的时间差 t 来计算物体距离超声波探头的距离 d,则 d 的计算公式如下:d = (t/2)*340。

具体实现:

本设计主要是用st的8位芯片STM8S003F3P6,性能比STM32差很多,但是好在低功耗加持,使用起来是各种坑,貌似STM8S003只能烧写100次,内存大小只有8K,一个printf重定向程序就编译通过不了,但是做这个超声波传感器还是够用的。放大电路芯片用的是LMV324运放,使用了芯片的4个接口,PC7给LMV324供电,也就是控制运放的使能,pc4发送PWM后,就把PC7置于低电平,然后等待PB5发送来的信号,我看到PB5发送来高电平后,PC7再置于高电平,可能为了不让Lmv324接收其他无用的信号。
下边是几个原理图,只截取几个重要部分,全部的可以去以下连接下载。
链接: STM8超声波测距 原理图.
这里只放处理器和串口的电路图:
在这里插入图片描述

以下是我的STM8代码,这里限于篇幅就贴出来部分,完整的可以去连接下载:
链接: 超声波程序上传0619.

// A code block
void main( void )
{
  clock_init();
  Time_1ms_Start();
  io_init();
  TIM2_Init();
  Uart1_Init();
 // ADC_Init();
  
   Distance[0] =160;
   Distance[1] =160;
   Distance[2] =160;
 //  IDnumber =0;

  while(1)
  {
    // IDdetect() ; 
     
           delay_ms(9500);
    
            Transmit();
            
       // Uart1_SendData(Distance[2]);
         //这是汇报距离的语句
            if((RXready ==1)&&(InputCaptureEN ==0)) 
            {          
              
                    RXready = 0;
                    InputCaptureEN=0; 
              
                    ReceiveData =  ReceiveMiddle2-ReceiveMiddle1;
                 
                    CM[3] = (ReceiveData/212);

                              Distance[0] =(ReceiveData*6);
                              
                              Uart1_SendData(CM[3]);
                                
                              Uart1_SendData(Distance[0]);
 
            }
  }   
}

烧写程序貌似这个stm8只能通过STlink下载,串口不支持,所以还是老实的买个STLINK吧,原装的100多,肯定是最稳定的,但是吧如果囊中羞涩,也可以买个原子哥(哈哈,给原子做了个广告)的,50到60软妹币吧。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Robot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值