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

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

[复制链接]
mmuuss586 发布时间:2020-3-6 15:47
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享
资料下载见附件,电脑登入
微信公众号:游名开源
硬件说明:
    2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源   
特性:  
极简的设计;
- w) Y7 a! W/ N9 L) b: r 极轻的重量;$ R4 q+ K' z7 s  y" s9 H
极高的测量灵敏度;2 J, ~" q4 r& S9 `1 w. ?
极低的消耗电流;
' N7 A- m: m5 U& o 接口ESD保护;
  L, S, t9 z6 r, C 偏捷的安装及使用方式;
3 D6 o, f. ]- d0 \# t 有效测量距离3cm-1.5m(其它距离范围可定制);
8 w6 P& }9 {8 i9 ^! I
支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信;

8 J& @3 ]! z( \3 k7 ^$ _

+ v3 K+ I, x4 Y3 \' z9 T4 e, B
微信图片_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中会被调用
# k3 f# z% E' v6 l/ Mvoid HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim); F* H; M: t/ }4 z8 l
{
5 y- r  @/ `) j7 M& g4 e/ w    if((TIM3CH2_CAPTURE_STA&0X80)==0)/ t' \$ D- `8 i- u6 u  R4 ]! t7 {! f) n
    {% C6 Q2 N3 ]9 g/ V* Y) I; h, O
        if(TIM3CH2_CAPTURE_STA&0X40)           
4 i3 T, d+ l. y1 C/ J            {               / M7 r- B- O8 i3 T$ T
                TIM3CH2_CAPTURE_STA|=0X80;     + K3 v9 p( s, ]1 a! g& V$ l7 c
                TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);- a  ~8 Z, l- Q* k7 A& ^
                long long temp=0;5 B+ g  ^4 @% j' F1 ~* G5 `# S! M
                                                                float distance=0.0;) }$ f; J2 Q1 O% o8 w; R
                temp=TIM3CH2_CAPTURE_STA&0X3F; " v+ B- B( z; C& n5 ?: Y: W( h, o  W, ^
                temp*=0XFFFF;              
& ]) e3 ?' @, r* g  O7 U                temp+=TIM3CH2_CAPTURE_VAL;    ( d: z' m# r! \
                temp=(temp*100)/58;3 R; j) L& H+ I/ m. ?1 |
                                                                distance=(float)temp/100;2 n, a) O9 b, x$ d- s1 t8 ?
                printf("Goal distence:%.2lf cm\r\n",distance);
9 \9 w+ C+ |) e/ e7 N- c9 v! T                __HAL_TIM_DISABLE(&htim3);       0 H& @9 o9 o9 `
            }7 L! K$ z5 G- @3 u6 y
        else                              
& y) @" D( \7 n5 d9 G: G6 @            {1 \- t( P% S. l; k: K6 U5 T
                TIM3CH2_CAPTURE_STA=0;         
! M$ K) A) s2 Y5 i                TIM3CH2_CAPTURE_VAL=0;
; i0 C! @1 B2 c                TIM3CH2_CAPTURE_STA|=0X40;    2 z" @) v: \* U1 {! m3 T
                __HAL_TIM_DISABLE(&htim3);       / a7 T. Q+ }( g9 Z
                __HAL_TIM_SET_COUNTER(&htim3,0);
2 {7 q6 v- [( R9 q                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);  
1 {; h$ E( \0 \: Z$ K                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);         
7 Y5 L/ a: R! q: t& J                                                }      
, \. l# i; l, Z( M( n' f                        }1 u1 E/ x7 ?; A6 l% l, ?& g8 }2 b: m
}
  ]" H1 Z" k9 {  m+ k( p% E
mmuuss586 回答时间:2020-3-6 16:04:03
然后在main函数中添加定时器中断使能和捕获使能函数,及测试需要的功能代码,main函数如下/ ^6 t; p! Q+ u5 ]2 u+ r! R
int main(void)
& }( d# v& @4 A+ p! k{
9 U; G: i1 m9 S
. ^2 T2 T0 p* n9 J/ s* T6 t2 z* a  HAL_Init();2 [1 O( r+ t* r3 K4 S8 H) U
  SystemClock_Config();
' ^6 |6 k( J5 ^: ~" z8 G. I( I* @  MX_GPIO_Init();
0 e7 |: I; G; W- m  MX_DMA_Init();
- r# e, q' {4 ^- B% H9 P9 P. v  MX_USART2_UART_Init();9 q" Y, R0 {9 V) {, y6 |
  MX_TIM3_Init();) Z9 B' d1 J: ]- f- x2 z, u& O
  /* USER CODE BEGIN 2 */! ?" t" `0 C/ `! ?
        __HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);
+ }, i+ [' a7 z' A# l3 L        HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);! Q* ^/ f% L7 \3 w8 Y
  while (1): M. Y: y" _/ j/ @, j
  {
+ n0 X* ?5 J# a: Y5 B                Measure_Start();
0 g/ h2 h0 z! L! M. D4 Y                 if(TIM3CH2_CAPTURE_STA&0X80)        
" ?* h1 g+ C8 x/ r( S  f* _                {
9 w# l1 P2 s+ X& m                                __HAL_TIM_SET_COUNTER(&htim3,0);  z3 a$ V/ Q9 O/ W
                                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); 8 w% g* w0 g; h8 B2 I4 {$ b; [
                                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
1 i" u6 a4 R9 t                                __HAL_TIM_ENABLE(&htim3);
3 D! |$ F! `1 s  x3 B* v; n' O                                TIM3CH2_CAPTURE_STA=0; 7 C( f1 r; c, g  t6 c8 E7 j7 @
                }
+ |% J9 a6 k- _# A) ~8 U                HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);0 k% e0 I# O, ]5 h5 P
                HAL_Delay(1000);0 J' q1 \3 z( e8 ]# Z7 b, x

' f+ Z; p9 k, E7 _  }
3 ?0 p( _! l2 _5 l7 ^) X5 }. f5 N" E}. B: U% ]& s. T: V9 U: t7 ?0 f7 R* Q. j
mmuuss586 回答时间:2020-3-6 16:03:07
中断服务函数:! C) H+ C) g5 K1 a) {3 \
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)+ m; F; Y# L4 [$ b2 I
{8 T, u% H6 w/ N8 f$ r& m
4 e8 |5 N7 j: O8 b* n7 U
    if((TIM3CH2_CAPTURE_STA&0X80)==0)
* W& ~( E& T( x6 R- Z/ f    {2 Q5 M: Y& R, R8 R: K* v8 `9 T- U+ e
            if(TIM3CH2_CAPTURE_STA&0X40). U! A% F* j! Y  x# a3 K9 Y* u
            {
- O6 p: \5 u5 K6 a                if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)& \. t: W4 P$ C9 T/ B- O" e
                {
% z7 S. m/ X, R; g                    TIM3CH2_CAPTURE_STA|=0X80;     
8 `( G. B3 \* d6 A                    TIM3CH2_CAPTURE_VAL=0XFFFF;
+ G8 t9 q3 ]4 @3 q& L: v9 ?8 p                }
/ \8 b- m! K: |+ e/ V( m                else TIM3CH2_CAPTURE_STA++;, h8 M0 J; E0 Y- O4 A" p) d8 Z' l
            }    1 j  A9 @& t3 W4 ?% S
    }       1 O2 b. L2 w0 b) t) ^
}0 Y/ f  \( c( O) |
mmuuss586 回答时间:2020-3-6 15:57:03
1.png
- Z! h% `9 |/ D# e/ @! B7 m; e 2.png ; ?! |  a% x' W
3.png
0 a% l: i0 H8 s% S+ a1 _' O$ t8 V6 b 4.png 8 e/ u( W0 B8 _" a
5.png
6 ~2 m/ X/ p* R6 p1 p  G
2 d8 ^- ~- O$ ?( E+ H0 y
mmuuss586 回答时间:2020-3-6 15:59:37

8 ]( s" f% U; k! B
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程
. v+ a1 {- M0 e+ F+ x
      学习板卡需求:官方NUCLEO-F030R8或自制NUCLEO-DG板卡和FT1610FF1超声波,杜邦线4根;板卡连接如图:
1.png
, P& |& N2 V$ J2 q  q4 E

% h! |0 N% t4 ~1 e3 U
mmuuss586 回答时间:2020-3-6 15:59:59
配置和连接方式1 e7 [: `: h5 B$ u3 |
                NUC_LEO-DG-------------- FT1610FF17 {5 j8 i; Q8 w$ R
                        PB3------------------------------T/SDA/TX
! u$ G2 s! i- f' s5 x# D: ]) b                        PB5------------------------------E/SCL/RX# L7 A, ^$ a+ x8 D
                        5V/3V----------------------------VCC$ Y" X2 o, W( b5 j# t9 v
                        GND-----------------------------GND, {0 l8 B5 U4 ]- E; n
mmuuss586 回答时间:2020-3-6 16:00:42
USART2串口通信引脚PA2、PA3和LED2的指示灯引脚PA5,基本的Cube配置不做介绍,主要为我们需要通过PB5读取IO的高电平持续时间,这里用到的是定时器的输入捕获功能,具体的Cube配置如下图所示:. I+ K: L& U$ @$ I2 o5 k8 u2 M+ k/ u" Y
1.png ; A- N: T/ `$ z2 v, e: V& n* h' V

3 `1 D3 q$ ^4 R4 Q, R, _( }0 ^
" n( m& L6 I4 }- N7 o: c
mmuuss586 回答时间:2020-3-6 16:02:14

) G* S3 P* Z2 J, F9 v4 ?然后再NVICSetings中选上TIM3 global interrupt,入下图:
; p) W3 J1 ?5 t2 ]% Y5 a7 ] 1.png
0 P. ]- e! C$ Z. F) I1 L) D
! \3 P1 m4 x9 r2 l6 x! i! Y0 [
( f, e! [# G* Q8 L
mmuuss586 回答时间:2020-3-6 16:02:41
然后把串口和LED输出配置好后生成MDK代码,编译无错误后添加需要的相关代码,主要缺少的代码为TIM3输入捕获的中断服务函数和串口通信的重定向函数,这里需要添加两个对应的全局变量,代码如下:
3 d' u) [6 _: P) X' D全局变量:6 Q& m' m5 j7 n
uint8_t  TIM3CH2_CAPTURE_STA=0;                                - E' C  g& @6 M: R: x1 ~3 n
uint32_t        TIM3CH2_CAPTURE_VAL;2 E* Q, ^* }, p  A7 @
mmuuss586 回答时间:2020-3-6 16:03:42
串口重定向函数为(需要包含对应的stdio.h头文件)
1 O  u3 S* a5 I, b2 Q$ W% mint fputc(int ch,FILE *f)) F+ _# |) A- f$ x+ t3 c3 X
{# u( R1 [6 d5 S/ b" q( i3 x) O
        while(0==(USART2->ISR&0x40));3 ^& j- L8 t! ^2 P- F
        USART2->TDR=ch;
2 S. O+ b% W% B, t0 S$ {        return ch;. o* O% }" E7 \0 k2 x9 w
       
, Z! {2 w6 @* }+ e$ x' G5 `}- z; i% s5 T3 q6 \0 Y8 D, L
mmuuss586 回答时间:2020-3-6 16:04:21
其中Measur_Start()函数为触发超声波模块测量开始的TTL信号,代码如下
9 d# j/ K( v+ y9 O' ~void Measure_Start(void)
; u# t& X6 f! R6 w1 a6 r1 D( Y{9 j! M% M% F/ T8 \7 H
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);# p: K8 w" h6 }
                HAL_Delay(1);, b  ?/ M& c" j1 r! C0 R, F: i
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
, n8 m, r& v9 }4 @% p% r" z}
& X; I9 g" X8 D4 y/ E2 h1 K
mmuuss586 回答时间:2020-3-6 16:04:57
这一部分参照模块IO通信模式的时序图可知,模块通信模式设置如下图:
1.png % G9 f& k% k6 n9 Z8 m0 r4 m; \
* v+ Z3 n! L2 _# S7 ^; w+ Z' F
mmuuss586 回答时间:2020-3-6 16:06:25
代码添加后,烧录到板卡,然后打开串口通信助手,打开串口后就可以看到模块测试的数据如下图$ W1 O9 `' q: B& k
1.png * H/ x; _  Q( ]: [3 s0 F: V

2 }  h" P1 z: U" [# w* C6 S3 n/ P" y/ W4 E$ H
mmuuss586 回答时间:2020-3-6 16:06:48
:P:P:P:P:P:P:P

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版