打印
[应用方案]

【NuMaker-M471测评】频率与脉冲的检测

[复制链接]
2015|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
M471开发板提供了丰富的例程,为实际应用提供了极大的方便,其中的频率与脉冲检测功能就很有使用价值。
1.频率测量:
该功能是使用引脚PC5的EPWM1通道 0来输出检测信号,以引脚PC3的EPWM1通道2来检测信号。故在检测过程中,需按图1所示来短接PC3与PC5。
                              
图1 引脚连接
其检测主程序如下:
int32_t main(void)
{
SYS_UnlockReg();
SYS_Init();
SYS_LockReg();
UART0_Init();
printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz(PLL@ %dHz)\n", SystemCoreClock, PllClock);
printf("+------------------------------------------------------------------------+\n");
printf("|         EPWM Driver Sample Code             |\n");
printf("|                                            |\n");
printf("+------------------------------------------------------------------------+\n");
printf("  This sample code will use EPWM1 channel 2 to capture\n  the signal from EPWM1 channel 0.\n");
printf("  I/O configuration:\n");
printf("    EPWM1 channel 2(PC.3) <--> EPWM1 channel 0(PC.5)\n\n");
printf("Use EPWM1 Channel 2(PC.3) to capture the EPWM1 Channel 0(PC.5) Waveform\n");
while(1)
{
printf("\n\nPress any key to start EPWM Capture Test\n");
getchar();
EPWM_ConfigOutputChannel(EPWM1, 0, 250, 30);
EPWM_EnableOutput(EPWM1, EPWM_CH_0_MASK);
EPWM_Start(EPWM1, EPWM_CH_0_MASK);
EPWM_ConfigCaptureChannel(EPWM1, 2, 83, 0);
EPWM_Start(EPWM1, EPWM_CH_2_MASK);
EPWM_EnableCapture(EPWM1, EPWM_CH_2_MASK);
EPWM1->CAPCTL |= EPWM_CAPCTL_FCRLDEN2_Msk;
while((EPWM1->CNT[2]) == 0);
CalPeriodTime(EPWM1, 2);
EPWM_Stop(EPWM1, EPWM_CH_0_MASK);
while((EPWM1->CNT[0] & EPWM_CNT0_CNT_Msk) != 0);
EPWM_ForceStop(EPWM1, EPWM_CH_0_MASK);
EPWM_DisableOutput(EPWM1, EPWM_CH_0_MASK);
EPWM_Stop(EPWM1, EPWM_CH_2_MASK);
while((EPWM1->CNT[2] & EPWM_CNT2_CNT_Msk) != 0);
EPWM_ForceStop(EPWM1, EPWM_CH_2_MASK);
EPWM_DisableCapture(EPWM1, EPWM_CH_2_MASK);
EPWM_ClearCaptureIntFlag(EPWM1, 2, EPWM_CAPTURE_INT_FALLING_LATCH);
}
}

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

经程序的编译下载,其运行结果如图4至图6所示。
图4 运行提示
图5 驱动检测

图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
学习了,哪天有空了,玩玩

使用特权

评论回复
5
幸福小强| | 2021-8-10 22:07 | 只看该作者
如果有示波器作证就更好了。

使用特权

评论回复
6
huahuagg| | 2023-9-27 19:56 | 只看该作者
PWM捕获也常用来测频率。

使用特权

评论回复
7
heisexingqisi| | 2023-9-30 11:16 | 只看该作者
是不是也可以测血压心跳,手册测血压的原理是什么

使用特权

评论回复
8
jinglixixi|  楼主 | 2023-9-30 16:52 | 只看该作者
heisexingqisi 发表于 2023-9-30 11:16
是不是也可以测血压心跳,手册测血压的原理是什么

有相应的功能模块可用!

使用特权

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

本版积分规则

460

主题

2761

帖子

38

粉丝