1.简介
英飞凌TC275芯片是一个功能强大的汽车级嵌入式处理IC,TC275有三个核心性能强大,目前主要用于代替DSP系列的单片机。因为其具有三核的优势,在处理速度方面有DSP无法比拟的优点。这次参与活动,使用TC275板卡,通过旋转板卡上的电位计,改变呼吸灯闪烁速率,同时将ADC采集的数据通过串口,发送到串口上位机显示。
使用到的开发工具是AURIX Development Studio,板卡功能强大,调试方便。汽车级芯片功能复杂,需要参考的资料除了官方例程,还有TC27D_iLLD文档,以及datasheet。
本次完成任务二,通过旋转板卡上的电位计,改变呼吸灯闪烁速率,同时将ADC采集的数据通过串口,发送到串口上位机显示
2.硬件电路
用到的IO口如下图,LED通过IO口P00.5的PWM输出控制亮度和闪烁,ADC输入采集电位器输出电压,通过电位器调节LED的显示亮度和闪烁。
3.程序说明
3.1初始化函数
以下函数分别初始化LED PWM输出,ADC模块,串口模块。串口的波特率设置为115200,ADC初始化分辨率为12 Bit。
英飞凌的库函数和例程十分完善,下面函数可以通过AURIX Development Studio中找到,分别参考了以下三个例程。完善的例程和ILLD参考手册,可以让用户减少初始化的调试时间,有利于产品功能开发,说明文档十分详细,如果想要了解具体的函数,可参考官网Infineon-TC27D_iLLD_UM_1_0_1_12_0-Software-v01_00-EN文档,以及官方的datasheet。当然这样花费的时间肯定会大大加长。
程序可以通过一个核心实现,实时性要求不高,这里没有用到多核。主程序在CPU0中。
- GTM_ATOM_PWM_1_KIT_TC275
- ADC_Single_Channel_1_KIT_TC275
- UART_VCOM_1_KIT_TC275_LK
Ifx_TickTime ticksFor10ms = IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, WAIT_TIME);
/* Call the initialization function */
initGtmATomPwm();
vadcBackgroundScanInit();
vadcBackgroundScanRun();
init_UART(); /* Initialize the module */
3.2主函数
主函数功能是循环采集ADC的电压,通过电压大小控制LED闪烁的频率,采集的间隔是10ms,LED闪烁是通过PWM调节的渐变式的变化,所以LED的亮度每10ms更新一次,间隔100次循环,大约1秒钟通过串口发送一次当前ADC的数值到上位机中。
while(1)
{
waitTime(ticksFor10ms);
t2=indicateConversionValue2();
while(count2>=100)
{
itoa(t2,string,10);
count1=my_strlen(string);
for(int a=0;a<6;a++)
{
string[count1+a]=string2[a];
}
count1=my_strlen(string);
send_ADC(count1,string);
count2=0;
}
fadeLED2(20+t2/50);
count2++;
}
3.3其他的函数说明
将例程调整一下,PWM输出改为ADC输入控制,这里需要注意g_fadeValue的数值范围。
void fadeLED2(uint16 step)
{
setDutyCycle(g_fadeValue);
if(g_fadeValue >= PWM_PERIOD)
{
g_fadeDir = -1; /* Set the direction of the fade */
g_fadeValue=5000;
}
else if(g_fadeValue <= 0)
{
g_fadeDir = 1; /* Set the direction of the fade */
g_fadeValue=0;
}
g_fadeValue += g_fadeDir *step; /* Calculation of the new duty cycle */
}
4.串口上位机通信格式
如果仅显示串口数值,可以通过英飞凌Oneeye,但是Oneeye显示波形例程较为复杂,这里强烈建议英飞凌可以多做推广和介绍。为了快速开发,上位机使用的是,通信格式简单,如下,只需要将发送内容转换为字符串,每个数值之间“,”间隔即可,发送数据只有一组,使用通道1即可。
ADC的数据经过处理后发送到上位机,即可显示,如果中间数据断开,需要重启软件。
char string2[]={',','0',',','0','\r','\0'};//',0,0\r\0';
for(int a=0;a<6;a++)
{
string[count1+a]=string2[a];
}
void send_ADC(int num,char* str)
{
Ifx_SizeT count = num; /* Size of the message,forget to modify,but it can work */
IfxAsclin_Asc_write(&g_asc, str, &count, TIME_INFINITE); /* Transfer of data */
}
5.功能演示
到这里程序已完成,调节电位器的角度,LED的闪烁频率会发生变化,波形正确显示到上位机上。
6.总结
本次只是使用了TC275简单的功能,在这过程中,了解到英飞凌的完善的开发工具,实际上这款MCU并没有传闻中那么难使用,虽然复杂度确实相较普通MCU提升不少,但是对应的文档很完善,希望后续能有更多机会在项目中使用。