Funpack第二季第二期——电位计控制呼吸灯
使用TC275的三个核心,轮流休眠待机,分别控制板卡上的LED灯。core0检测按键按下,唤醒core1翻转LED1,一秒后,唤醒core2翻转LED2,系统休眠。
标签
嵌入式系统
Funpack
TC275
MDYi
更新2022-10-09
北京交通大学
465

0.目录

  1. 项目要求

  2. 板卡介绍

  3. 开发环境

  4. 功能实现

  5. 成果展示

  6. 心得体会

  7. 附件

 

1.项目要求

设计一个呼吸灯,通过旋转板卡上的电位计,改变呼吸灯闪烁速率,同时将ADC采集的数据通过串口/CAN,发送到另一台设备上显示。

 

2.板卡介绍

AURIX TM TC275 lite 套件配备了基于 32 位单芯片 AURIX TM TriCore TM的微控制器 Aurix TM TC275。它可以与一系列开发工具一起使用,包括 AURIX TM Development Studio、英飞凌免费的基于 Eclipse 的 IDE,或来自 Hightec/PLS/Infineon 的基于 Eclipse 的“FreeEntryToolchain”。

FtHjwGPHCwZAVOiUmXm1j6y3e0zg

 

3.开发环境

本次任务使用英飞凌AURIX Development Studio,AURIX™ Development Studio是专为TriCore MCU系列设计的集成开发环境,在eclipse环境下支持使用C语言和英飞凌底层驱动库(iLLD)开发,对多核心进行在线调试。

 

4.功能实现

根据项目要求,将任务分为ADC信号采集、串口通信与呼吸灯三部分。

4.1 ADC信号采集

ADC信号采集参考ADC_Single_Channel_1_KIT_TC275_LK例程,电位计位于ADC0的0通道,与例程中相同。

Flh7ubgcG-w6_nrvnQqDPGoyZC99

在例程中调整电位计值可以控制LED灯的闪烁,由于我们不需要该功能,可将LED闪烁部分删去,增加返回值conversionResult.B.RESULT便于在主函数中处理ADC的采样值。

/* This function retrieves the conversion value and indicates it by LEDs */
unsigned int indicateConversionValue(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.B.RESULT;
}
 

4.2 串口发送

串口发送参考例程UART_VCOM_1_KIT_TC275_LK,使用虚拟串口功能。串口配置无需修改,使用115200波特率。

使用sprintf()函数对输出字符串进行整合,并修改例程中的send_UART_message()函数,达到实现传入特定字符串的功能。

void send_UART_message(char *txData)
{
    Ifx_SizeT count = (strlen(txData) - 1);                                             /* Size of the message                      */
    IfxAsclin_Asc_write(&g_asc, txData, &count, TIME_INFINITE);         /* Transfer of data                         */
}

4.3 呼吸灯

呼吸灯参考例程GTM_TOM_PWM_1_KIT_TC275_LK。在fadeLED()函数中FADE_STEP变量负责控制PWM的步进值,修改fadeLED()函数,将ADC的采样值来控制PWM的呼吸速率。

void fadeLED(unsigned int FADE_STEP)
{
    if((g_fadeValue + FADE_STEP) >= PWM_PERIOD)
    {
        g_fadeDir = -1;                                             /* Set the direction of the fade                */
    }
    else if((g_fadeValue - FADE_STEP) <= 0)
    {
        g_fadeDir = 1;                                              /* Set the direction of the fade                */
    }
    g_fadeValue += g_fadeDir * FADE_STEP;                           /* Calculation of the new duty cycle            */
    setDutyCycle(g_fadeValue);                                      /* Set the duty cycle of the PWM                */
}

4.4 代码整合

将上述代码统一放入到主函数中进行处理,主函数代码如下:

char TxBuf[50];
uint16 count;
unsigned int adc_value;
​
int core0_main(void)
{
    IfxCpu_enableInterrupts();
    
    /* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
     * Enable the watchdogs and service them periodically if it is required
     */
    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
    
    /* Wait for CPU sync event */
    IfxCpu_emitEvent(&g_cpuSyncEvent);
    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);
​
    /* Initialize GTM TOM module */
    initGtmTomPwm();
​
    /* Initialize the LED port pin      */
    //initLED();
​
    while(1)
    {
        if(count>=30){
            count = 0;
            adc_value = indicateConversionValue();
            sprintf(TxBuf, "ADC_Value = %.4fV\r\n", adc_value*3.3/4095);
            send_UART_message(TxBuf);
        }
        else{
            count++;
        }
        fadeLED(adc_value);
        waitTime(IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, 10));
    }
    return (1);
}

 

5.成果展示

视频见B站演示。

 

6.心得体会

  • AURIX Development Studio基于eclipse,上手简单,调试功能强大。

  • 导入工程时容易出现网络问题失败,需要前往github先下载例程后手动导入。

 

7.附件

百度网盘

链接:https://pan.baidu.com/s/1ijLcKTiecCU4tAcsSD6GqQ?pwd=owrl

提取码:owrl

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