查看: 1461|回复: 8

[原创] 【MCX-A153分享】+利用定时器驱动超声波测距模块(续)

[复制链接]
  • TA的每日心情
    开心
    昨天 10:58
  • 签到天数: 1102 天

    连续签到: 20 天

    [LV.10]以坛为家III

    28

    主题

    4271

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5786
    最后登录
    2025-7-28
    发表于 2024-7-25 22:34:36 | 显示全部楼层 |阅读模式
    本帖最后由 suncat0504 于 2024-7-25 22:36 编辑

    昨天的测试没有成功,用示波器观察,估计是A153的驱动能力不足。在这个基础上,对驱动部分使用SN75451来增强驱动,使用面包板临时搭建的。驱动部分的电路,简单绘制如下:

    图片1.png

    输出端1Y和2Y接了8.2K的上拉电阻,因为SN75451的输出是悬空的。

    图片2.png

    虽然设置了A153的P3_30和P_31为上拉电阻的方式,但是作用,示波器没有测到触发信号个回应信号。

    在调整好程序,连接好电路后,

    图片3.png

    测试有了结果,但是很奇怪,数值保持不变。哪怕用手在超声波模块的前面前后移动,测量的结果也没有变化。坐下来,看着电路,想了想,觉得很可能是超声波模块插在面包板上,离面包板太近。于是适当拔出一些,并让超声波的探头斜向上抬高点角度,测量数据就开始正常变化了。感觉测得的结果也算正常。用手前后移动测试,能体现出距离的变化了。

    图片4.png

    示波器上的测量结果,如图所示:

    图片5.png

    黄色信号是测量的触发信号,粉色的是测量超声波的回应信号。

    主程序如下:

    1. int main(void) {
    2.     uint32_t currentCounter = 0U;    // 当前计数值
    3.     lptmr_config_t lptmrConfig;      // 定时器设置
    4.     double juli = 0;
    5.     uint32_t inp = 0;
    6.     uint32_t tmcnt = 0;

    7.     // 使能GPIO3口时钟
    8.     CLOCK_EnableClock(kCLOCK_GateGPIO3);

    9.     /* attach FRO 12M to LPUART0 (debug console) */
    10.     CLOCK_SetClockDiv(kCLOCK_DivLPTMR0, 1u);
    11.     CLOCK_AttachClk(kFRO12M_to_LPTMR0);

    12.     CLOCK_SetupFRO16KClocking(kCLKE_16K_SYSTEM | kCLKE_16K_COREMAIN);

    13.     // 初始化GPIO口
    14.     BOARD_InitPins();
    15.     BOARD_InitBootClocks();
    16.     BOARD_InitDebugConsole();

    17.     // 设置LED使用的GPIO口为输出方式,关闭LED
    18.     LED_INIT();
    19.     GPIO_PinWrite(GPIO3, 30U, 0);        // 设置P3_30输出为0,只有需要测距时,才能触发为高电平
    20.     GPIO3->PDDR |= (1U << 30U);         // 使P3_30为输出模式(不设置,则默认为输入模式)


    21.     // 设置定时器
    22.     /* Configure LPTMR */
    23.     /*
    24.      * lptmrConfig.timerMode = kLPTMR_TimerModeTimeCounter;         // 默认值:脉冲计数
    25.      * lptmrConfig.pinSelect = kLPTMR_PinSelectInput_0;                // 脉冲来源:输入0
    26.      * lptmrConfig.pinPolarity = kLPTMR_PinPolarityActiveHigh;      // 脉冲极性:上升沿,高电平
    27.      * lptmrConfig.enableFreeRunning = false;                       //
    28.      * lptmrConfig.bypassPrescaler = true;
    29.      * lptmrConfig.prescalerClockSource = kLPTMR_PrescalerClock_1;
    30.      * lptmrConfig.value = kLPTMR_Prescale_Glitch_0;
    31.      */
    32.     LPTMR_GetDefaultConfig(&lptmrConfig);

    33.     /* Initialize the LPTMR */
    34.     LPTMR_Init(DEMO_LPTMR_BASE, &lptmrConfig);

    35.     /*
    36.      * Set timer period. 设置优先级
    37.      * Note : the parameter "ticks" of LPTMR_SetTimerPeriod should be equal or greater than 1.
    38.      */
    39.     LPTMR_SetTimerPeriod(DEMO_LPTMR_BASE, USEC_TO_COUNT(LPTMR_USEC_COUNT, LPTMR_SOURCE_CLOCK));

    40.     // 允许LPTMR中断
    41.     LPTMR_EnableInterrupts(DEMO_LPTMR_BASE, kLPTMR_TimerInterruptEnable);

    42.     /* Enable at the NVIC : 开中断? */
    43.     EnableIRQ(DEMO_LPTMR_IRQn);

    44.     PRINTF("Low Power Timer Example\r\n");

    45.     // 开始计数
    46.     LPTMR_StartTimer(DEMO_LPTMR_BASE);
    47.     while (1) {
    48.         // 是否可以测试了?
    49.         if (trigFlag == 0) {
    50.             // 是,可以测试了
    51.             PRINTF("Start Test ! ");
    52.             trigCounter = 0;
    53.             // 发出触发脉冲
    54.             GPIO_PinWrite(GPIO3, 30U, 1);
    55.             while (1) {
    56.                 // 保证脉冲超过10微秒(定时器周期为60微秒,所以计数一次就够用了)
    57.                 if (trigCounter>0) {
    58.                     // 停止触发
    59.                     GPIO_PinWrite(GPIO3, 30U, 0);
    60.                     // 退出
    61.                     break;
    62.                 }
    63.             }
    64.             // 检查P3_31是否变成高电平
    65.             while (1) {
    66.                 inp = GPIO_PinRead(GPIO3, 31U);
    67.                 // 超声波模块的回应端是否变成高电平了?
    68.                 if (inp==1 && trigFlag==0) {
    69.                     // 是,建立阶段标志
    70.                     trigFlag = 1;
    71.                     // 清除测量时间用的变量值
    72.                     trigCounter = 0;
    73.                     LED_TOGGLE();
    74.                 }

    75.                 if ((inp==0 && trigFlag==1)) {
    76.                     LED_TOGGLE();
    77.                     // 缓存测量及时值
    78.                     tmcnt = trigCounter;

    79.                     // 清除延迟计数
    80.                     waitNextCounter = 0;
    81.                     
    82.                     // 计算距离数据(单位:毫米) = (0.34 * 时间(微秒)/2 )
    83.                     juli = 0.17 * 61 * tmcnt;
    84.                     PRINTF("tm=%d distance = %d \r\n", tmcnt, (long)juli);
    85.                     break;
    86.                 }

    87.                 // 超时了,重新开始测量
    88.                 if (trigCounter == 10000) {
    89.                     PRINTF("Timerover ! \r\n");
    90.                     waitNextCounter = 0;
    91.                     break;
    92.                 }
    93.             }

    94.             // 延迟一段时间,保证下次测量可以正常执行(要大于60模式)
    95.             // 这里定时器为61微秒,所以等待累计1000次,达到60毫秒
    96.             while (1) {
    97.                 if (waitNextCounter > 5000) {
    98.                     trigFlag=0;
    99.                     break;
    100.                 }
    101.             }
    102.         }
    103.     }
    104. }
    复制代码

    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3895

    主题

    7503

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39531
    最后登录
    2025-7-29
    发表于 2024-7-26 09:38:30 | 显示全部楼层
    这是一个很好的分析
    qiandao qiandao
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    7 天前
  • 签到天数: 292 天

    连续签到: 1 天

    [LV.8]以坛为家I

    82

    主题

    1161

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3028
    最后登录
    2025-7-22
    发表于 2024-7-26 11:18:24 | 显示全部楼层
    ...一看就知道不是普通玩家,示波器都出来了,让人眼红
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:58
  • 签到天数: 1102 天

    连续签到: 20 天

    [LV.10]以坛为家III

    28

    主题

    4271

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5786
    最后登录
    2025-7-28
     楼主| 发表于 2024-7-26 12:07:17 | 显示全部楼层
    NXP管管 发表于 2024-7-26 09:38
    这是一个很好的分析

    谢谢夸奖
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:58
  • 签到天数: 1102 天

    连续签到: 20 天

    [LV.10]以坛为家III

    28

    主题

    4271

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5786
    最后登录
    2025-7-28
     楼主| 发表于 2024-7-26 12:08:59 | 显示全部楼层
    ltbo4b8d6e 发表于 2024-7-26 11:18
    ...一看就知道不是普通玩家,示波器都出来了,让人眼红

    唉,喜欢玩,便宜的装备必须得整上啊。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 530 天

    连续签到: 25 天

    [LV.9]以坛为家II

    21

    主题

    856

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2323
    最后登录
    2025-7-29
    发表于 2024-7-27 08:27:43 | 显示全部楼层
    这个教程做得非常好呀!
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:58
  • 签到天数: 1102 天

    连续签到: 20 天

    [LV.10]以坛为家III

    28

    主题

    4271

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5786
    最后登录
    2025-7-28
     楼主| 发表于 2024-7-27 11:18:44 | 显示全部楼层
    岂敢岂敢。只是记录自己调试的过程,可不敢作为教程,能帮到别人就好。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3895

    主题

    7503

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39531
    最后登录
    2025-7-29
    发表于 2024-7-30 14:15:10 | 显示全部楼层
    A153驱动不足可以看看N947给不给力
    qiandao qiandao
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:58
  • 签到天数: 1102 天

    连续签到: 20 天

    [LV.10]以坛为家III

    28

    主题

    4271

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5786
    最后登录
    2025-7-28
     楼主| 发表于 2024-7-31 10:52:46 | 显示全部楼层
    NXP管管 发表于 2024-7-30 14:15
    A153驱动不足可以看看N947给不给力

    可以试试,嘿嘿
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-29 09:48 , Processed in 0.104159 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表