你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

游名:STM32F030+FT1610FF1高精度超声波测距模块测距教程及参...  

[复制链接]
mmuuss586 发布时间:2020-3-6 15:47
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享
资料下载见附件,电脑登入
微信公众号:游名开源
硬件说明:
    2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源   
特性:  
极简的设计;
  c0 Q( m; Q) x6 ? 极轻的重量;
0 b# \3 Q# V3 q; a 极高的测量灵敏度;" C: Q& i( z1 ^* P
极低的消耗电流;, x. G" l! n# V/ ]
接口ESD保护;6 o! j/ Z2 z2 x4 z/ {/ u
偏捷的安装及使用方式;" l) i$ \8 q) x2 v
有效测量距离3cm-1.5m(其它距离范围可定制);
2 m4 d' x) y8 g& ]
支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信;

) e% Y. E. s+ r. _* U& c% d) `

. n4 W; q; C2 E- x; W) ^0 A
微信图片_20200306155141.jpg

FT1610FF1超声波测距模块产品规格书V2.0.pdf

下载

1.09 MB, 下载次数: 31

基于STM32F030+FT1610FF1高精度超声波测距模块测距教程.pdf

下载

416.85 KB, 下载次数: 34

游名科技产品目录(2020-7-21).pdf

下载

1.05 MB, 下载次数: 1

收藏 4 评论83 发布时间:2020-3-6 15:47

举报

83个回答
mmuuss586 回答时间:2020-3-6 16:03:25
//定时器输入捕获中断处理回调函数,该函数在HAL_TIM_IRQHandler中会被调用
/ `0 w# y% h8 O: b7 Svoid HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
* ?' m$ X5 h6 o2 ^8 X{! z* A7 F; }) h) M$ l5 g
    if((TIM3CH2_CAPTURE_STA&0X80)==0)# v5 |% p% }. b; j1 _1 u7 r
    {
6 Z5 ]/ Y! G1 V  v8 c1 W2 J        if(TIM3CH2_CAPTURE_STA&0X40)           
) T) L& M) C( v, E2 ]- Y( I            {               
9 P5 V8 x2 H3 b7 X1 Z2 \% M5 A                TIM3CH2_CAPTURE_STA|=0X80;     5 o! u7 |  `# {9 l, q1 D( v
                TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);( Z7 M. y4 Z+ ]3 M( e8 f  y
                long long temp=0;
  b3 q' i& i3 r% K  Y* e) Q                                                                float distance=0.0;
8 V7 f1 k: v( h8 v) g3 p                temp=TIM3CH2_CAPTURE_STA&0X3F;
; L7 t' U, |3 q                temp*=0XFFFF;              3 w6 C" a6 @8 ?- w8 I6 s: d4 M
                temp+=TIM3CH2_CAPTURE_VAL;   
2 j, L. w! H9 ^' N- L0 Q                temp=(temp*100)/58;
3 U$ J5 F0 L2 V9 x0 B5 L                                                                distance=(float)temp/100;
4 J8 a& i! `( S9 b" D                printf("Goal distence:%.2lf cm\r\n",distance);
# d3 _7 Z% ]- Q, ~  H                __HAL_TIM_DISABLE(&htim3);       / J6 Y: ^: ?8 C5 f5 L
            }4 s* N9 F) W6 r. w
        else                               : ~6 A. e* x; |8 N; ^
            {. t0 \! g9 l# U8 q4 N
                TIM3CH2_CAPTURE_STA=0;         
4 S" n5 R+ u3 }: [3 k: T1 \+ u                TIM3CH2_CAPTURE_VAL=0;) r9 \7 w0 T6 s! B( T& F
                TIM3CH2_CAPTURE_STA|=0X40;    / b: `* R* `3 Q  ~8 c/ o# H) j
                __HAL_TIM_DISABLE(&htim3);       5 x, L0 K8 x/ K% k* D- T6 [2 s
                __HAL_TIM_SET_COUNTER(&htim3,0);! {6 U5 k, ]" O. Z! b; k9 I
                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);  * k& H2 \" y8 c9 p9 h! H
                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);         
: y& B2 w9 M9 V6 i3 T9 ?! W( W, |                                                }       ! r$ Z0 U4 N; {, x
                        }
5 ^3 y* v% J2 z( F7 P& k' C}7 P- I: L3 N# u; ]* V$ l
mmuuss586 回答时间:2020-3-6 16:04:03
然后在main函数中添加定时器中断使能和捕获使能函数,及测试需要的功能代码,main函数如下; H6 q+ D. B6 g9 o# w4 Y+ I3 a  a
int main(void)
- E, {( M3 M$ B4 u  U/ j0 U{
2 _% i! H: K: ^  `; Q; H
( S; q7 O5 y/ q; P" ^5 N0 v2 L  HAL_Init();4 i! A4 z3 j+ D# a" d$ ~  p
  SystemClock_Config();
) ]' d* o/ z8 J7 s  v  MX_GPIO_Init();) \% }- C" t0 o" J
  MX_DMA_Init();
3 v$ r9 i. l  p4 p% o- Z& x4 u  MX_USART2_UART_Init();
  [- u, @' i, Y+ A' H6 j  MX_TIM3_Init();4 R/ n) [4 r) s+ F- m- i
  /* USER CODE BEGIN 2 */
: @6 g/ J' V8 n        __HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);) F) b1 T) ~2 g, Q4 S" R- z3 m
        HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
# @7 H4 @( l# O# a$ }  while (1)% a- s, X. I3 Z# M4 O
  {3 N1 T$ c" l$ [8 c$ C5 I! C1 q0 M' ~9 x
                Measure_Start();- G. N/ i% a. C6 j
                 if(TIM3CH2_CAPTURE_STA&0X80)        9 r. {: b, [% r5 n* z
                {
, {( i! Z3 z' r* P: m                                __HAL_TIM_SET_COUNTER(&htim3,0);
9 y2 e% {, @1 s2 u) ]+ c* o                                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); , b7 q9 O) U- A& F+ a9 Z
                                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);9 ^: N! T6 d) p: i3 y2 H) L, s! A
                                __HAL_TIM_ENABLE(&htim3);3 p: l( k  s0 e6 ?" ?7 r7 J! d
                                TIM3CH2_CAPTURE_STA=0; - Z& S" c3 G/ L
                }0 M& e7 y7 ^" ^! L+ k4 C% g  A
                HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
2 ~+ n& _) m: x8 N% p' w9 d                HAL_Delay(1000);
4 [6 _7 ?1 ?  U" k: |8 o9 C5 j- ~6 r( C7 F+ M1 x
  }
  o6 ?# A$ N/ x- L) S9 Y3 r: E}
/ r# ^! L6 M  g+ o: G: i, U9 a
mmuuss586 回答时间:2020-3-6 16:03:07
中断服务函数:
0 n2 z2 n! t. K+ cvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)) l4 q% l3 |/ A: B
{4 U9 A! s) l4 J/ {9 O
, s' c! Y- h; b& r
    if((TIM3CH2_CAPTURE_STA&0X80)==0)- }3 K( T8 G1 B+ x# K
    {% T1 j( p1 J/ J' K" p5 \; v
            if(TIM3CH2_CAPTURE_STA&0X40). R% F  P8 s& o5 R$ S6 g* ~3 f1 z( x+ V
            {' {: n- n0 m& V  m/ d1 t: s3 z" T
                if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)  S4 B7 d% G7 l* P8 i
                {$ d* h- d7 d8 j
                    TIM3CH2_CAPTURE_STA|=0X80;     # T  }: J2 I8 T$ t4 Z3 ^. @
                    TIM3CH2_CAPTURE_VAL=0XFFFF;' e' B. t, r: w2 Z+ K
                }
6 l( N+ H5 Q3 l! Y                else TIM3CH2_CAPTURE_STA++;9 W5 Y7 \) i8 l
            }    " k( O' \- T7 X5 F$ U
    }       7 Y& {0 p+ |$ E. {
}( B8 s5 N$ e$ S' S
mmuuss586 回答时间:2020-3-6 15:57:03
1.png , N* ?8 A" i* |. m# P
2.png
" ~* Q/ U; z" d3 v& ~ 3.png
# f9 O( K" y5 M8 s 4.png
3 B8 ^8 y$ s& J- ]# N 5.png ' U3 @. l& w# g% o8 l! z* o9 e2 o
) @. s, V9 H; ^. {; A2 T
mmuuss586 回答时间:2020-3-6 15:59:37

7 o6 b( U: e/ ]# l* I3 b3 H/ M
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程
# S  L) x5 [1 }) w9 Z, x/ @
      学习板卡需求:官方NUCLEO-F030R8或自制NUCLEO-DG板卡和FT1610FF1超声波,杜邦线4根;板卡连接如图:
1.png
  ]# N3 }  v. V% x% r$ Y
' [3 C# `  J: y, \& T
mmuuss586 回答时间:2020-3-6 15:59:59
配置和连接方式: [# S" f6 @5 v3 ]8 \. H
                NUC_LEO-DG-------------- FT1610FF1* ^$ i9 T! }* D+ K0 k6 y% U/ \
                        PB3------------------------------T/SDA/TX
- y, k  ]3 j- X, s                        PB5------------------------------E/SCL/RX, O$ ~) \) T( l0 a. `
                        5V/3V----------------------------VCC
- c/ M4 V8 |, p4 L/ x$ A5 h                        GND-----------------------------GND- f5 U" U7 A8 m0 W- P( K8 {
mmuuss586 回答时间:2020-3-6 16:00:42
USART2串口通信引脚PA2、PA3和LED2的指示灯引脚PA5,基本的Cube配置不做介绍,主要为我们需要通过PB5读取IO的高电平持续时间,这里用到的是定时器的输入捕获功能,具体的Cube配置如下图所示:: X( A7 m* r4 c: L! {, ^
1.png ! |2 B/ P7 q) v  K& a9 Z( x
. m) {* O1 `" D' r) d# z* n$ @
' \( u2 y* x+ m
mmuuss586 回答时间:2020-3-6 16:02:14

) z& @. }1 p0 d/ i然后再NVICSetings中选上TIM3 global interrupt,入下图:  J0 m  e5 u$ e& ^1 D
1.png " k) i+ m: {1 H1 D. g8 C
/ _3 }, n( M* p2 [/ [$ |4 e+ p* n

% C$ R1 l: R5 ~. ~, W+ _1 ]
mmuuss586 回答时间:2020-3-6 16:02:41
然后把串口和LED输出配置好后生成MDK代码,编译无错误后添加需要的相关代码,主要缺少的代码为TIM3输入捕获的中断服务函数和串口通信的重定向函数,这里需要添加两个对应的全局变量,代码如下:0 D! e$ q, j! t  u2 ]9 e+ \
全局变量:
: l/ W0 k( H# P3 Z0 y5 E4 Nuint8_t  TIM3CH2_CAPTURE_STA=0;                               
9 E/ t' m. Q- r& }4 a5 ^9 {2 ]uint32_t        TIM3CH2_CAPTURE_VAL;1 w  v8 s0 s* f( i9 q! L9 @
mmuuss586 回答时间:2020-3-6 16:03:42
串口重定向函数为(需要包含对应的stdio.h头文件)
/ @& O  J  J3 o$ Y, L/ \2 vint fputc(int ch,FILE *f)
3 \  V' s; F$ T{7 P) d  [; {( p* y/ X
        while(0==(USART2->ISR&0x40));
0 ^' f+ @- {7 H        USART2->TDR=ch;* z& K& N+ |8 a% j# p
        return ch;
# ?, {- Q* e5 \/ o1 n: {        ) e' ]% I! Z4 r$ I, N+ n
}
0 _. D" o. Y# {3 x
mmuuss586 回答时间:2020-3-6 16:04:21
其中Measur_Start()函数为触发超声波模块测量开始的TTL信号,代码如下
* x8 h6 d- n7 K3 M; \4 B# @- i* hvoid Measure_Start(void)2 d& `0 n$ E. w: U) m
{
2 I( y& |9 z& d# ~" \" |8 g        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
: }8 o) V8 [6 i0 _                HAL_Delay(1);; `" g# l# q1 U" j2 i7 }( w2 F
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);8 K; }# f7 t; N; Y, }% |
}
% ]0 u. e* i8 }" [1 ]* |! E  V
mmuuss586 回答时间:2020-3-6 16:04:57
这一部分参照模块IO通信模式的时序图可知,模块通信模式设置如下图:
1.png 6 {) o1 Z* y) M; G( Q
5 T/ [: K) G; k* O
mmuuss586 回答时间:2020-3-6 16:06:25
代码添加后,烧录到板卡,然后打开串口通信助手,打开串口后就可以看到模块测试的数据如下图
5 R3 L/ l- ~% }5 `6 i% i- r! e 1.png 3 q" {0 \& Z" P& H' A

3 ~! ~7 g- ^9 u/ `# Q% V, ~0 L$ I. W, A  a# Y. ?/ \/ c
mmuuss586 回答时间:2020-3-6 16:06:48
:P:P:P:P:P:P:P

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版