Funpack2-2-基于TC275的ADC可调呼吸灯
本文基于KIT_AURIX_TC275_LITE板卡,设计完成了可调速度的呼吸灯。
标签
嵌入式系统
TC275
launcher
更新2022-10-12
328

概述

本文基于infineon KIT_AURIX_TC275_LITE板卡,基于板载的ADC/LED/UART外设资源,设计完成了可调速度的呼吸灯。通过旋转板卡的电位计,即可改变呼吸灯的呼吸速率,同时ADC的采样值通过仿真器的UART传输到PC端,PC端通过SerialChart软件将采样值进行可视化输出。

硬件介绍

KIT_AURIX_TC275_LITE板卡特性:

  • 搭载了基于AURIX™ TriCore™ 单片三核微控制器TC275

  • 板载Micro USB接口的miniWiggler调试器

  • 两个Infineon Shield2Go扩展接口

  • 兼容MikroBUS 和Arduino扩展连接

  • 带有Infineon新一代CAN 收发器TLE9251VSJ ,可用于汽车和工业应用的HS CAN网络开发

  • 已焊接可调旋转电位计,用于评估模拟电压的采集

  • 一个用户输入按键

  • 预留三个LED可作为工作指示灯

FjEkN4Z-CJ6fDs8yBZI0urSi3YTt

软件环境

本项目使用infineon官方提供的免费开放环境AURIX Development Studio,该软件除了可以用于基本的开发编译之外,还可以很方便的直接导入官方在线提供的example,以加速我们的开发。

FrOnwcknsPKOalmTAfFuPhszsBjn

设计思路

呼吸灯通常使用PWM进行驱动,通过调整PWM的占空比,实现灯的明暗逐级连续变化,以实现类似”呼吸“效果。要想通过旋钮电位器控制呼吸速率,则需要使用ADC对接入电位计的管脚进行电压采集,以获得电位计的变化量。然后通过不同的ADC采样值,对应改变呼吸灯PWM占空比的变化速度。最后,通过串口定时将ADC采样值发出,PC端对接收的值进行图形化显示,既可完成题目要求。

代码说明

本项目各模块的独立功能,实际上infineon都已经各自提供了example,项目主要参考如下三个example:

  • ADC_Single_Channel_1_KIT_TC275_LK:The Versatile Analog-to-Digital Converter (VADC) is configured to measure an analog signal using background scan request.

  • GTM_TOM_PWM_1_KIT_TC275_LK:GTM TOM is used to generate a PWM signal, which is driving the intensity of an LED.

  • UART_VCOM_1_KIT_TC275_LK:UART communication via ASCLIN is used to send "Hello World!" from the device to the computer.

将三个样例封装的代码,整合到一个工程中进行调用,然后进行修改开发。

Fvh8QMbXYkfNNFbyyljSjmEOUpzH

封装需要的获取ADC采样值、以及串口发送指定长度buf的函数

Ifx_VADC_RES GetAdConvertValue(void)
{
    Ifx_VADC_RES conversionResult;
​
    /* Retrieve the conversion value until valid flag of the result register is true */
    do
    {
        conversionResult = IfxVadc_Adc_getResult(&g_vadcBackgroundScan.adcChannel);
    }
    while (!conversionResult.B.VF);
​
    return conversionResult;
}
void Uart_Send_buf(const void *txdata, Ifx_SizeT count)
{
    IfxAsclin_Asc_write(&g_asc, txdata, &count, TIME_INFINITE);
}

然后在主循环中代码如下:

    while(1)
    {
        /* Update the LEDs depending on the measured value */
        AdcResult = GetAdConvertValue();
        if((IfxStm_getLower(BSP_DEFAULT_TIMER) - begintime) > ticksFor100ms)
        {
            sprintf(sendStr, "%d\n", AdcResult.B.RESULT);
            /* Transfer of data                         */
            Uart_Send_buf(sendStr, strlen(sendStr));
            begintime = IfxStm_getLower(BSP_DEFAULT_TIMER);
        }
        timeNms = AdcResult.B.RESULT/100;
        timeNms = (timeNms == 0) ? 1: timeNms;
        ticksForNms = IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, timeNms);
​
        fadeLED();                  /* Change the intensity of the LED  */
        wait(ticksForNms);
    }
  • 获得接入电位计管脚的ADC采样值

  • 定时100ms将ADC采样值通过串口发出

  • 用ADC采样值计算得到呼吸灯的变化时间

  • 更新呼吸灯的PWM值

  • 延时(时间由前面计算得出),延时的变化实现呼吸灯速率的变化。

效果展示

FiCmtabLmYa4rksCsS-XHimjQPGh

心得体会

感谢电子森林此次选择了一款优秀的板卡,活动终于不需要再使用Arduino进行开发了,可调式性大大提升。第一次使用3核MCU,虽然本项目只使用了单核,但该KIT_AURIX_TC275_LITE板卡板卡资源丰富,在未来可以有机会继续对其进行开发探索。

附件下载
ADC_Single_Channel_1_KIT_TC275_LK.zip
团队介绍
www.etrd.org
团队成员
launcher
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号