[应用方案] 【NuMaker-M471测评】频率与脉冲的检测

[复制链接]
2324|7
 楼主| jinglixixi 发表于 2021-8-3 12:43 | 显示全部楼层 |阅读模式
M471开发板提供了丰富的例程,为实际应用提供了极大的方便,其中的频率与脉冲检测功能就很有使用价值。
1.频率测量:
该功能是使用引脚PC5的EPWM1通道 0来输出检测信号,以引脚PC3的EPWM1通道2来检测信号。故在检测过程中,需按图1所示来短接PC3与PC5。
                              
1.jpg
图1 引脚连接
其检测主程序如下:
  1. int32_t main(void)
  2. {
  3. SYS_UnlockReg();
  4. SYS_Init();
  5. SYS_LockReg();
  6. UART0_Init();
  7. printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz(PLL@ %dHz)\n", SystemCoreClock, PllClock);
  8. printf("+------------------------------------------------------------------------+\n");
  9. printf("|         EPWM Driver Sample Code             |\n");
  10. printf("|                                            |\n");
  11. printf("+------------------------------------------------------------------------+\n");
  12. printf("  This sample code will use EPWM1 channel 2 to capture\n  the signal from EPWM1 channel 0.\n");
  13. printf("  I/O configuration:\n");
  14. printf("    EPWM1 channel 2(PC.3) <--> EPWM1 channel 0(PC.5)\n\n");
  15. printf("Use EPWM1 Channel 2(PC.3) to capture the EPWM1 Channel 0(PC.5) Waveform\n");
  16. while(1)
  17. {
  18. printf("\n\nPress any key to start EPWM Capture Test\n");
  19. getchar();
  20. EPWM_ConfigOutputChannel(EPWM1, 0, 250, 30);
  21. EPWM_EnableOutput(EPWM1, EPWM_CH_0_MASK);
  22. EPWM_Start(EPWM1, EPWM_CH_0_MASK);
  23. EPWM_ConfigCaptureChannel(EPWM1, 2, 83, 0);
  24. EPWM_Start(EPWM1, EPWM_CH_2_MASK);
  25. EPWM_EnableCapture(EPWM1, EPWM_CH_2_MASK);
  26. EPWM1->CAPCTL |= EPWM_CAPCTL_FCRLDEN2_Msk;
  27. while((EPWM1->CNT[2]) == 0);
  28. CalPeriodTime(EPWM1, 2);
  29. EPWM_Stop(EPWM1, EPWM_CH_0_MASK);
  30. while((EPWM1->CNT[0] & EPWM_CNT0_CNT_Msk) != 0);
  31. EPWM_ForceStop(EPWM1, EPWM_CH_0_MASK);
  32. EPWM_DisableOutput(EPWM1, EPWM_CH_0_MASK);
  33. EPWM_Stop(EPWM1, EPWM_CH_2_MASK);
  34. while((EPWM1->CNT[2] & EPWM_CNT2_CNT_Msk) != 0);
  35. EPWM_ForceStop(EPWM1, EPWM_CH_2_MASK);
  36. EPWM_DisableCapture(EPWM1, EPWM_CH_2_MASK);
  37. EPWM_ClearCaptureIntFlag(EPWM1, 2, EPWM_CAPTURE_INT_FALLING_LATCH);
  38. }
  39. }

经程序的编译下载,其运行结果如图2所示。
2.jpg
图2 运行结果
其中,高电平的周期是:14399 ~14401,低电平的周期是:33599 ~ 33601, 整体周期是:47999 ~ 48001。
检测结果为:
高电平周期为: 14400,低电平周期为:33601, 整体周期为:48001,上升时间为:31935,下降时间为:17535。
2.脉冲计数:
该功能是使用引脚PB15来输入外部检测信号,并以Timer 0来捕捉计数,故在检测过程中,是按图3所示来连接外部的脉冲发生器。该脉冲发生器具有调节功能,通过电位器的调整即可改变脉冲信号的频率。
3a.jpg
3.jpg
图3 线路连接
其检测主程序如下:
  1. int main(void)
  2. {
  3. int volatile i;
  4. SYS_Init();
  5. UART0_Init();
  6. printf("\nThis sample code demonstrate timer free counting mode.\n");
  7. printf("Please connect input source with Timer 0 capture pin PB.15, press any key to continue\n");
  8. getchar();
  9. TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000000);
  10. TIMER_SET_PRESCALE_VALUE(TIMER0, 0);
  11. TIMER_SET_CMP_VALUE(TIMER0, TIMER_CMP_MAX_VALUE);
  12. TIMER_EnableCapture(TIMER0, TIMER_CAPTURE_FREE_COUNTING_MODE, TIMER_CAPTURE_EVENT_RISING);
  13. TIMER_Start(TIMER0);
  14. TIMER_EnableCaptureInt(TIMER0);
  15. NVIC_EnableIRQ(TMR0_IRQn);
  16. while(1);
  17. }

经程序的编译下载,其运行结果如图4至图6所示。
4.jpg
图4 运行提示
5.jpg
图5 驱动检测
6.jpg
图6 调节脉冲信号
weifeng90 发表于 2021-8-4 07:51 来自手机 | 显示全部楼层
新唐最近评测活动也挺给力的
 楼主| jinglixixi 发表于 2021-8-4 09:19 | 显示全部楼层
weifeng90 发表于 2021-8-4 07:51
新唐最近评测活动也挺给力的

哈哈,没错!
asmine 发表于 2021-8-10 15:11 | 显示全部楼层
nice
学习了,哪天有空了,玩玩
幸福小强 发表于 2021-8-10 22:07 | 显示全部楼层
如果有示波器作证就更好了。
huahuagg 发表于 2023-9-27 19:56 | 显示全部楼层
PWM捕获也常用来测频率。
heisexingqisi 发表于 2023-9-30 11:16 来自手机 | 显示全部楼层
是不是也可以测血压心跳,手册测血压的原理是什么
 楼主| jinglixixi 发表于 2023-9-30 16:52 | 显示全部楼层
heisexingqisi 发表于 2023-9-30 11:16
是不是也可以测血压心跳,手册测血压的原理是什么

有相应的功能模块可用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部