[MCU] 【HC32F460开发板测评】(第三篇)LCR电桥设计—测评外部中断与定时器

梦溪开物   2021-5-1 23:46 楼主

一、引言

       是否可以说中断是单片机的灵魂呢?无论是低端单片机还是高端单片机,几乎都含有中断功能,当让能跑系统的还有线程。这次对HC32F460单片机的定时器外设和中断进行测评,顺便带一个小项目的设计-LCR电桥设计。LCR电桥还是改成LCR测试仪吧,毕竟没有用到桥式结构,只是叫惯了这个名字。LCR硬件测试仪的硬件部分主要包括:谐振模块、分频模块、电源模块、显示模块(OLED模块)、控制模块(HC32F460单片机最小系统);软件部分主要包括:显示单元、测量单元(频率测量和元件值转换)。技术路线为:将待测元件接入振荡电路后,产生高频的振荡信号,该信号经过分频后传入单片机,触发外部中断,此时定时器计时一个周期得到频率值,并将频率值转换成L、C、R值,并将其在显示屏显示。

 

 

二、测评内容

2.1 项目框架

       项目框架如图2.1所示。待测元件从左侧的端子处接入到谐振模块电路中,原电路中的电感、电容或者电阻谐振,产生高频的类似于正弦波的信号,经过分频电路得到低频的方波信号,方便单片机处理。低频的方波信号传入单片机的外部中断引脚,触发外部中断,此时定时器开始计数,下一个触发信号到来后,储存计数值,并将计数器清零。储存的计数器就是分频后的频率值,经过公式转换,得到电感、电阻或者电容值。频率测量原理如图2-2所示:

 

image.png                                                                 图2.1 项目框架

 

image.png

                                                           图2.2 频率测量原理图

 

2.2  外部中断

        HC32F460单片机的中断控制器( INTC)配备了16个外部引脚中断和一个不可屏蔽的外部中断NMI【1】,每个 I/O口都具备外部中断输入功能,I/O端口作为外部中断 EIRQ使用时,需要结合中断控制器使用时,需要结合中断控制器 INTC,设置滤波、中断出发沿、中断号等【2】。外部中断资源如图2.3所示。打开样例程序hc32f46x_ddl_Rev1.3.0,进入example文件夹,打开里面的lpm文件夹,使用IAR打开exint_nmi_swi工程,并进行相关地修改,首先基本实现HC32F460外部中断的使用。修改的函数为一个按键触发外部中断的中断函数:

void ExtInt04_Callback(void)
{
    if (Set == EXINT_IrqFlgGet(ExtiCh04))
    {
        unsigned char j=10,k=14;
        u32ExtInt04Count++;
        LED1_TOGGLE();//LED点亮
        OLED_ShowNum(10, 1, u32ExtInt04Count, j, k);
        //10为OLED的x轴位置,1为LED的y轴位置,u32ExtInt04Count为
        //要显示的数字,j为数值位数,k为数值字体大小
#ifdef  __PRINT_TO_TERMINAL
        printf("External interrupt 04(SW4) interrupt occurrence: %d\n", u32ExtInt04Count);//串口打印字符串
#endif
        /* clear int request flag */
        EXINT_IrqFlgClr(ExtiCh04);
    }
}

          该函数调用了一个与HC32F460单片机匹配的OLED库【3】和一个串口打印函数函数。OLED_ShowNum为数值变量显示函数,printf为串口打印函数,配置好中断控制寄存器和初始化OLED以后,基本实现功能为:按下按键SW2,OLED显示按下的次数;打开串口助手,接收界面显示”External interrupt 04(SW4) interrupt occurrence:“,其中OLED显示如附件1所示,串口助手显示如图2.4显示

 

image.png

                                                  图2.3 频率测量原理图

 

 

image.png

                                                 图2.4 中断触发串口显示界面

 

2.3  外部中断与定时器测评

       要测量频率就得联合使用外部中断和定时器了,这里就来浅显的聊一聊HC32F460的定时器。HC32F460单片机的定时器资源还是比较丰富的,包含3个通用定时器 (Timer0和Timer4和TimerA),和一个高级控制定时器Timer6【4】,其中通用定时器可用于电机的控制、频率的测量等,高级定时器可以产生不同形式的时钟波形,可以根据需求进行选择。本次选用外部中断(HC32F460单片机的84号引脚)和定时器Timer0结合项目进行测评。Timer0的系统框图包含两个单元,每个单元由CH_A、CH_B 两个通道定时器组成【5】。如图2.5所示:

 

image.png                                                           图2.5 定时器Timer0系统框图

 

       核心函数如下所示,主要功能是计数信号的一个周期。先利用函数发生器模拟谐振信号,OLED显示一个脉冲的从低电平到另一个低电平的定时器的计数值,可根据公式转换成频率值。测试图如图2.6所示,结果见附件2。

void Timer0_TriggerCallBack(void)
{
    uint16_t tmp;

    unsigned char j=10,k=14;

    tmp = TIMER0_GetCmpReg(TMR_UNIT,Tim0_ChannelB);  //获得定时器1的计数值

    u16Campture = tmp - u16CmpLast;
    u16CmpLast = tmp;
    OLED_ShowNum(10, 1, tmp, j, k);  //显示信号的一个周期的计数值
    LED0_TOGGLE();  //LED灯指示
}

             

image.png                                                       图2.6 频率测量模拟图

 

 

三、测评心得

       关于频率的测量是用其它单片机做过的,想借LCR测量仪的小项目来对HC32F460单片机的外部中断和定时器进行测评,毕竟外部中断和定时器在单片机中的频率使用得最高得几个功能之一吧,LCR测量仪小项目的实物做出来可能得花点时间,测评总要先写的,以后若是有机会直接拿MCU芯片画板完善这个小项目。HC32F460单片机的例程程序看起来像是自动生成的一样,不过外部中断和定时器上手还是挺容易的。在此,非常感谢同期测评HC32F460单片机的坛友的帖子指导。

 

 

四、参考文献

【1】【4】华大半导体有限公司.HC32F460系列数据手册Rev1.21.pdf[DB/OL].(2020)[2021-5-2].https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/65/id/47/key/0.

【2】华大半导体有限公司.HC32F460系列用户手册Rev1.21.pdf[DB/OL].(2020)[2021-5-2].https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/65/id/47/key/0.

【3】EEWORD,yang377156216.[HC32F460开发板测评]NO.3 用OLED显示benchmark指标[DB/OL].(2020)[2021-5-2].https://bbs.eeworld.com.cn/thread-1163107-1-1.html.

【5】华大半导体有限公司.HC32F460系列的通用定时器TIMER0 Rev1.1.pdf[DB/OL].(2020)[2021-5-2].https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/65/id/48/key/7.

本帖最后由 梦溪开物 于 2021-5-10 12:54 编辑
  • 附件1 按键触发外部中断计数图
  • 附件二 频率测量模拟图

回复评论 (2)

LCR测量仪硬件部分项目挺多的,HC32F460单片机的控制部分只是一个小模块部分,

这个项目其实不小了,感觉供电部分的电源模块,谐振模块难度也不小

谢谢楼主分享

点赞  2021-5-4 21:27

有点意思,弄个完整的系列包括所涉及的硬件软件就好啦。

默认摸鱼,再摸鱼。2022、9、28
点赞  2021-5-6 16:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复