概述
本文基于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可作为工作指示灯
软件环境
本项目使用infineon官方提供的免费开放环境AURIX Development Studio,该软件除了可以用于基本的开发编译之外,还可以很方便的直接导入官方在线提供的example,以加速我们的开发。
设计思路
呼吸灯通常使用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.
将三个样例封装的代码,整合到一个工程中进行调用,然后进行修改开发。
封装需要的获取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值
-
延时(时间由前面计算得出),延时的变化实现呼吸灯速率的变化。
效果展示
心得体会
感谢电子森林此次选择了一款优秀的板卡,活动终于不需要再使用Arduino进行开发了,可调式性大大提升。第一次使用3核MCU,虽然本项目只使用了单核,但该KIT_AURIX_TC275_LITE板卡板卡资源丰富,在未来可以有机会继续对其进行开发探索。