[PIC®/AVR® MCU]

【CuriosityNano测评报告】基于AC0 + TCB的超声波测距仪设计

[复制链接]
52|0
手机看帖
扫描二维码
随时随地手机跟帖
南来之风|  楼主 | 2022-11-7 20:31 | 显示全部楼层 |阅读模式
本帖最后由 南来之风 于 2022-11-8 09:38 编辑

笔者之前在测评PIC18F单片机的时候,首次尝试用定时器来测量超声波的传播时间,参考:【CuriosityNano测评报告】定时器用于超声波传感器 https://bbs.21ic.com/icview-3244674-1-1.html。之前的测距结果感觉不是特别准确,有可能是定时器用法不正确。
此次有幸能够测评AVR64DD32单片机,这款好奇开发板功能丰富,尤其是模拟功能强大,易用。特别留意到这个片子带了Analog Comparator以及TCB ( 16-bit Timer/Counter Type B),我后面会利用这两个特性来设计超声波测距仪。
  • AVR64DD32微控制器
  • 一个黄色用户LED
  • 一个机械式用户开关
  • 一个32.768kHz晶体
  • 一个24MHz晶体
  • 板载调试器:
    • Microchip MPLAB® X IDE和Microchip Studio中板标识
    • 一个绿色电源及状态指示LED
    • 编程和调试
    • 虚拟串行端口 (CDC)
    • 两个调试GPIO通道 (DGI GPIO)
  • USB供电
  • 可调目标电压:
    • MIC5353 LDO稳压器,由板载调试器控制
    • 输出电压范围:1.8V至5.1V(受USB输入电压限制)
    • 最大输出电流:500mA(受环境温度和输出电压限制)



此次使用的超声波传感器型号是:HC-SR04,其内部模块原理图如下:
967356368fadd4f48d.png

VTG -- 传感器VCC
GND -- 传感器GND
PORTD1 -- 传感器Trigger引脚
PORTD2 -- 传感器Echo模拟输入引脚
935056368f76eb64d4.png 476056368f7e74468a.png


主程序代码:
#include "mcc_generated_files/system/system.h"
#include <util/delay.h>

/*
    Main application
*/

volatile uint16_t signal_pulse = 0, signal_period = 0;

int main(void)
{
   SYSTEM_Initialize();   
   

    PORTD.DIRSET = PIN4_bm;
    PORTMUX.USARTROUTEA = PORTMUX_USART0_ALT3_gc;

   
   printf("Hello Microchip\r\n");
   while(1)
    {
       IO_PD1_TriggerSig_SetLow();
       _delay_ms(2);
       IO_PD1_TriggerSig_SetHigh();
       _delay_ms(10);
       IO_PD1_TriggerSig_SetLow();
      
        if (TCB0.INTFLAGS & TCB_CAPT_bm)
        {
            /**
            * First read the CNT register
            * The interrupt flag is cleared by writing 1 to it, or when the Capture register
            * is read in Capture mode
            */
            //signal_period = TCB0.CNT;
            signal_pulse  = TCB0.CCMP;
            asm("NOP");
            printf("Calculate Dist...");
            printf("  %f cm\r\n", signal_pulse/2.0/2*34300.0/1000000);
        }
     }   
}

模拟比较器AC0的MCC配置:
94286368f9285a2e3.png
TCB的模式配置,要注意设置未pulse width模式:
938246368f95aeacf0.png
UART这里要使能 Redirct Printf to UART:
636086368f9843f297.png
效果展示:
超声波.gif


总结:本次基于AVR单片机的AC0和tcb硬件模块实现的超声波测距仪,极少的需要单片机运算,计算结果非常精确可靠,硬件设计非常简单。



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则