一、开发板主要功能
用于这次项目的开发板是tc275kit开发板。此开发板是一个类似于核心版的定位的开发板,下面就从芯片角度来简单描述一下此板子的功能。
从英飞凌官方的定位来说,这是一个面向于工业和个人消费者的产品。属于第一代 Aurix TC27xT 产品。其创新多核心架构基于多达三个独立 32 位 TriCore CPU,专为满足极高的安全标准,同时大幅提高性能而设计。TC27xT 系列产品配备 200 MHz TriCore、5V 或 3.3V 单电压供电和强大的通用定时器模块 (GTM),旨在降低复杂度、实现同类产品中极其优秀的功耗并节省大量成本。闪存和RAM都具有ECC保护的功能,具有多通道的DMA和ADC。
tc275目前主要用于代替DSP系列的单片机。因为其具有三核的优势,在处理速度方面有DSP无法比拟的优点,生成高精度PWM的能力也要比单片机和DSP强得多,在本次的“可见光通信”项目中起到了举足轻重的作用。
二、代码部分
下面简单说一下本项目的核心代码部分。本项目的核心是多通道pwm的产生。
下面是GTM模块的初始化代码:
void GTM_Cmu_init(){ // unsigned int Trig_status; //Enable the GTM IfxGtm_enable(gtm);//使能寄存器 IfxGtm_Cmu_Clk clkIndex=IfxGtm_Cmu_Clk_0; //enable GTM clock boolean frequency = IfxGtm_Cmu_isClkClockEnabled(&MODULE_GTM,clkIndex);//GTM时钟使能 //Set the global clock frequency to the max IfxGtm_Cmu_setGclkFrequency(gtm,1000000);//把全局时钟频率设为1MHz //Set the CMU CLK0 IfxGtm_Cmu_setClkFrequency(gtm,IfxGtm_Cmu_Clk_0,100000); IfxGtm_Cmu_setClkFrequency(gtm,IfxGtm_Cmu_Clk_6,1000000); // FXCLK: used by TOM and CLK0: used by ATOM //IfxGtm_Cmu_enableClocks(gtm, IFXGTM_CMU_CLKEN_FXCLK | IFXGTM_CMU_CLKEN_CLK0); IfxGtm_Cmu_enableClocks(&MODULE_GTM, IFXGTM_CMU_CLKEN_CLK0); GTM_CMU_FXCLK_CTRL.B.FXCLK_SEL = IfxGtm_Cmu_Clk_0;//设置为TOM的输入时钟 // enable FX clock IfxGtm_Cmu_enableClocks(&MODULE_GTM, IFXGTM_CMU_CLKEN_FXCLK);//设置为TOM的输入时钟// Trig_status=IfxGtm_Trig_toVadc(gtm, IfxGtm_Trig_AdcGroup_0, IfxGtm_Trig_AdcTrig_0, IfxGtm_Trig_AdcTrigSource_tom0, IfxGtm_Trig_AdcTrigChannel_1);//GTM triger config}?
四个通道pwm的产生代码
0通道
void GTM_Tom0_CH0_init(uint16 Period, uint16 Dutycycle){ // initialise TOM IfxGtm_Tom_Pwm_Config tomConfig; //configuration structure IfxGtm_Tom_Pwm_Driver tomHandle; //handle // Ifx_GTM_TOM *LocaltomSFR = &tomConfig.gtm.TOM[tomConfig.tom]; IfxGtm_Tom_Pwm_initConfig(&tomConfig, gtm); tomConfig.tomChannel = IfxGtm_Tom_Ch_0; tomConfig.period = Period;//分度10us tomConfig.dutyCycle = Period-Dutycycle;//分度10us tomConfig.immediatStart = TRUE; //关闭立即启动 //tomConfig.CounterValue = 0;//设定计数器初值 tomConfig.interrupt.ccu0Enabled = TRUE;//周期中断 tomConfig.interrupt.ccu1Enabled = FALSE;//匹配中断 tomConfig.outputTrigger = IfxGtm_Tom_Ch_OutputTrigger_generate;//由本通道产生触发信号 tomConfig.signalLevel = Ifx_ActiveState_high; tomConfig.interrupt.isrPriority = TOM0_CH0_PRI0; tomConfig.pin.outputPin = &IfxGtm_TOM0_0_TOUT87_P14_7_OUT; // IfxGtm_Tom_Ch_setTriggerOutput(LocaltomSFR, tomConfig.tomChannel, tomConfig.outputTrigger); IfxGtm_Tom_Pwm_init(&tomHandle, &tomConfig); //install interrupt handlers IfxCpu_Irq_installInterruptHandler(TOM0Ch0_ISR,TOM0_CH0_PRI0); IfxCpu_enableInterrupts(); }?
1通道
void GTM_Tom0_CH1_init(uint16 Period, uint16 Dutycycle){ // initialise TOM IfxGtm_Tom_Pwm_Config tomConfig; //configuration structure IfxGtm_Tom_Pwm_Driver tomHandle; //handle // Ifx_GTM_TOM *LocaltomSFR = &tomConfig.gtm.TOM[tomConfig.tom]; IfxGtm_Tom_Pwm_initConfig(&tomConfig, gtm); tomConfig.tomChannel = IfxGtm_Tom_Ch_1; tomConfig.period = Period;//分度10us tomConfig.dutyCycle = Period-Dutycycle;//分度10us tomConfig.immediatStart = TRUE; //关闭立即启动 //tomConfig.CounterValue = 0;//设定计数器初值 tomConfig.interrupt.ccu0Enabled = TRUE;//周期中断 tomConfig.interrupt.ccu1Enabled = FALSE;//匹配中断 tomConfig.outputTrigger = IfxGtm_Tom_Ch_OutputTrigger_generate;//由本通道产生触发信号 tomConfig.signalLevel = Ifx_ActiveState_high; tomConfig.interrupt.isrPriority = TOM0_CH1_PRI0; tomConfig.pin.outputPin = &IfxGtm_TOM0_0_TOUT87_P14_7_OUT; // IfxGtm_Tom_Ch_setTriggerOutput(LocaltomSFR, tomConfig.tomChannel, tomConfig.outputTrigger); IfxGtm_Tom_Pwm_init(&tomHandle, &tomConfig); //install interrupt handlers IfxCpu_Irq_installInterruptHandler(TOM0Ch1_ISR,TOM0_CH1_PRI0); IfxCpu_enableInterrupts(); }?
2通道
void GTM_Tom0_CH2_init(uint16 Period, uint16 Dutycycle){ // initialise TOM IfxGtm_Tom_Pwm_Config tomConfig; //configuration structure IfxGtm_Tom_Pwm_Driver tomHandle; //handle // Ifx_GTM_TOM *LocaltomSFR = &tomConfig.gtm.TOM[tomConfig.tom]; IfxGtm_Tom_Pwm_initConfig(&tomConfig, gtm); tomConfig.tomChannel = IfxGtm_Tom_Ch_2; tomConfig.period = Period;//分度10us tomConfig.dutyCycle = Period-Dutycycle;//分度10us tomConfig.immediatStart = TRUE; //关闭立即启动 //tomConfig.CounterValue = 0;//设定计数器初值 tomConfig.interrupt.ccu0Enabled = TRUE;//周期中断 tomConfig.interrupt.ccu1Enabled = FALSE;//匹配中断 tomConfig.outputTrigger = IfxGtm_Tom_Ch_OutputTrigger_generate;//由本通道产生触发信号 tomConfig.signalLevel = Ifx_ActiveState_high; tomConfig.interrupt.isrPriority = TOM0_CH2_PRI0; tomConfig.pin.outputPin = &IfxGtm_TOM0_0_TOUT87_P14_7_OUT; // IfxGtm_Tom_Ch_setTriggerOutput(LocaltomSFR, tomConfig.tomChannel, tomConfig.outputTrigger); IfxGtm_Tom_Pwm_init(&tomHandle, &tomConfig); //install interrupt handlers IfxCpu_Irq_installInterruptHandler(TOM0Ch2_ISR,TOM0_CH2_PRI0); IfxCpu_enableInterrupts(); }%MCEPASTEBIN% ?
3通道
void GTM_Tom0_CH3_init(uint16 Period, uint16 Dutycycle){ // initialise TOM IfxGtm_Tom_Pwm_Config tomConfig; //configuration structure IfxGtm_Tom_Pwm_Driver tomHandle; //handle // Ifx_GTM_TOM *LocaltomSFR = &tomConfig.gtm.TOM[tomConfig.tom]; IfxGtm_Tom_Pwm_initConfig(&tomConfig, gtm); tomConfig.tomChannel = IfxGtm_Tom_Ch_3; tomConfig.period = Period;//分度10us tomConfig.dutyCycle = Period-Dutycycle;//分度10us tomConfig.immediatStart = TRUE; //关闭立即启动 //tomConfig.CounterValue = 0;//设定计数器初值 tomConfig.interrupt.ccu0Enabled = TRUE;//周期中断 tomConfig.interrupt.ccu1Enabled = FALSE;//匹配中断 tomConfig.outputTrigger = IfxGtm_Tom_Ch_OutputTrigger_generate;//由本通道产生触发信号 tomConfig.signalLevel = Ifx_ActiveState_high; tomConfig.interrupt.isrPriority = TOM0_CH3_PRI0; tomConfig.pin.outputPin = &IfxGtm_TOM0_0_TOUT87_P14_7_OUT; // IfxGtm_Tom_Ch_setTriggerOutput(LocaltomSFR, tomConfig.tomChannel, tomConfig.outputTrigger); IfxGtm_Tom_Pwm_init(&tomHandle, &tomConfig); //install interrupt handlers IfxCpu_Irq_installInterruptHandler(TOM0Ch3_ISR,TOM0_CH3_PRI0); IfxCpu_enableInterrupts(); }?
三、项目展示
为了解决现如今汽车领域出现的沟通不方便的问题,我团队研发了一种车间新形式的交互系统,该系统以DSP处理器为核心,利用可见光进行通信,使用LED作为信号的发射源,用强度不同表征信号,并把其加载到LED发光器件上,通过LED灯的明暗闪烁来传递所需要的信息。APP音频输入后经DSP处理器处理将音频信号转换为电信号并将其加载到LED灯上实现信号发送,指定方向的车辆在收到光信号后,经过处理器处理后最终以音频信号的传达发送方车辆所要传达的音频信息。
1、信号发送模块的设计
信号发送模块由音频输入模块、LED 驱动模块、发光二极管 LED 组 成。从信号源接收数据,然后通过LED驱动模块将数据信号放大,把含有数据的信号加载 到 LED 上进行闪烁。接收模块由光电检测模块、信号处理模块、处理器组成,光电检测模 块接收到光信号,对光信号进行处理,把信号送入处理器,进而输出至扬声器或者耳机,从而实现音频信号的传输。
2. 接收模块的设计
LED 可见光无线通信系统接受模块部分的硬件主要是由光电检测模块、信号处理模块、处理器模块、电源模块等组成。在光电检测模块中,使用光电检测器来获取带有数据信息的可见光信号,通过光电转换的方法把数据信息的光信号转换成带有数据信息的模拟电信号,使用运算放大器对电信号进行放大,被放大以后的电信号经过信号处理模块,经过模数转换功能把模拟信号转换成数字信号,将这个转换完成的数字信号立即通过Mc BSP 送入到处理器TC275中进行处理。光电检测模块是实现光信号到电信号转换的关键,其性能好坏对整个系统性能影响深远。为了提高识别概率我们采用了自主设计的滤波算法对干扰部分进行分析,并取得了较好的效果。
3. EMI以及数模信号的隔离
所有的电子设备在工作时均会受到空间内的电磁波干扰,当其受到干扰的强度大于一定值时就会影响电子设备的正常工作并且产生干扰。尤其是在高速MCU下,其受到干扰的程度将愈发明显。 为了避免或者减少干扰所带来的影响,其收到的干扰水平必须低于规定的值。
辐射骚扰在空间内通过感应场与电场传播,它们都具有电磁辐射的特性,并且通过场源距离来进行区分。考虑到电源信号以及数字信号处理为数字量,需要与音频输入输出信号模拟量信号进行隔离。所以在制板时,我们将数字量部分与模拟两部分分开并置于板子的对脚侧,为了达到同步,我们对数字量信号采用蛇形走线,对模拟量信号采用差分走线方式以减少干扰。
4. 信号处理模块设计(TC275的应用)
光信号通过光电检测器由光信号转换成电信号,然后经过前置放大模块的放大,由微弱信号变成较强的信号。但是这些信号都是模拟信号,要把信号输入到处理器TC275中进行处理,那么就必须把模拟信号转换成数字信号。通信双方一方面等待自己方面音频信号输入,一方面准备输出对方发来的信号。通过 Mc BSP方式TC275 的发送时钟信号口 (MCKXA) 和AIC23 的接口时钟信号BCLK 相连,系统时钟由TC275提供;TC275 的发送串行数据口(MDXA)和接收串行数据口(MDRA)分别与AIC23的数据输入口DIN和数据输出口DOUT相连;TC275的发送帧同步口(MFSXA)和接收帧同步口(MFSRA)分别于AIC23的数字音频DAC 帧信号接口(LRCIN)和数字音频ADC 帧信号(LRCOUT)相连。其中TC275主要用于数字信号的处理。
只有注册用户才能在此添加评论。 如果您已经注册,请登录。 如果您还没有注册,请注册并登录。