主题中讨论的其他器件:TMS320F28379D、 AMC1305M05、 controlSUITE
社区好、我在从 Σ-Δ 滤波器模块中获取正确数据时遇到了问题。 该位流由 TI 的 AMC1305M05生成。 为了进行滤波、我使用 TMS320F28379D 的集成 SDFM (具有集线站的 controlCARD 版本)。
两侧都需要一个 CLK 才能正常工作、为此、我在 TMS320F28379D 上配置了一个 ePWM 模块。 以20MHz 运行的 CLK 以最快速度获取详细数据。
现在、硬件已调整为正常工作、滤波信号上的噪声尽可能小。
在第一个测试中、我使用 了 controlSUITE "sdfm_PWM_SYNC"中的一个项目。 每个 SDFM-数据滤波器的基本配置是64的 OSR 和4位的位移、让我得到准确的值、但所有数据都是有符号整数(对吗?) 二´s 补码。
在 CodeComposerStudio 中使用原始代码时、我还可以看到、此数据类型存在问题、因为 CCS 将所有内容解释为无符号整数。 当数据从 CCS 保存到 csv 文件中时、也会发生这种错误的解释。 (只有 binaräy 代码是正确的。)
如何轻松地将数据转换为正确的非 sigend 整数以尽可能快地使用数据? 例如、在错误中断中、将数据添加到 DAC 的寄存器或其他内容。
下一个是 SDFM 的~ 200个采样后、数据中出现峰值、并且可以跳至最大值或最小值。 起初、我认为保存数据是一个问题、因为我决定保存200个以上的样本(原始代码中最多保存200个数据点)。 我更改了代码、这样数据就不会保存在电路板上、而是从数字数据中重新生成原始波形。 我认为这将对峰值有帮助、但峰值仍然存在。 我估计每200个样本后仍会出现峰值。
2.我的数据处理有什么问题? 如何停止峰值?
我将从示波器中给出一个 scrrrrrrrrrrrrshot 示例、您可以在其中看到 DAC 产生的三个信号。 DAC 通过来自 TMS320F28379D SDFM 的数据进行馈送、位流来自三个 AMC1305M05 IC。 AMC1305M05 IC 测量的信号来自分压器上的单个信号发生器。
//###################################################################################################################### // ////文件:sdfm_PWM_SYNC_CPU_cpu01.c // //标题:F2837xD 的 SDFM PWM 同步示例。 // //! addtogroup cpu01_example_list //!SDFM PWM 同步
//! //! 在此示例中、SDFM 滤波器数据由 CPU 在 SDFM ISR 例程中读取。 //! SDFM 配置如下所示: //! -本例中使用了 SDFM1 //! -选择 MODE0输入控制模式 //! -比较器设置 //! -选择了 SinC3滤波 器//! - OSR = 32 //! - HLT = 0x7FFF (阈值上限设置) //! - LLT = 0x0000 (阈值下限设置) //! -数据过滤器设置 //! -启用所有4个滤波器模块 //! -选择了 SinC3滤波 器//! - OSR = 256 //! -所有4个滤波器均通过使用 PWM //! (主滤波器使能位) //! -以16位格式表示的滤波器输出 //! -为了转换25位数据过滤器 //! 转换为16位格式用户需要为 //右移9位! OSR = 256 //!的 Sinc3滤波器 - SDFM 滤波 器的中断模块设置//! -所有4个阈值更高的比较器中断被禁用 //! -所有4个阈值下限比较器中断被禁用 //! -禁用所有4个调制器故障中断 //! -所有4个滤波器将在新的滤波器数据 //! 可用 //! // //########################################################################################################################## //$TI 发行版:F2837xD 支持库 V210 $// $发行 日期:星期二11月1日14:46:15 CDT 2016 $// 版权所有:版权所有(C) 2013-2016德州仪器(TI)公司-// http://www.ti.com/保留所有权利$ //############################################################################################################ // //包含的文件 // #include "F28x_Project.h" #include "F2837xD_struct.h" #include "F2837xD_sdfm_drivers.h" // 定义 // #define MAX_SAples 200 #define SDFM_PIN_MUX_OPTION1 1 #define SDFM_PIN_MUX_Option2 2 #define SDFM_PIN_MUX_OPTION3. 3 #define ePWM_TIMER_TBPRD 65535 // ePWM 周期寄存器 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //define für ePWM #define DB_UP 1//define für DAC #define reference_VDAC 0 #define reference_VREF 1 #define DACA 1 #define DACB 2 #define DACC 3 #define reference reference_VREF #define DAC_NUM DACA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //全局 // uint16_t gPeripheralNumber,gPWM_Number = 11; uint16_t Filter1_result[MAX_Samples]; uint16_t Filter3_Result[MAX_Samples]; uint16_t Filter2_resultsamples];uint16_t Filter2_Result [MAX_Samples]; uint16_t filter4_result[MAX_samples]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Globales für ePWM UINT16 EPwm7_DB_DIRECTION; UINT16 EPwm6_DB_DIRECTION; UINT16 EPwm5_DB_DIRECTION; UINT16 EPwm4_DB_DIRECTION; UINT32 EPwm7TZIntCount; uint32 EPwm6TZIntCount; uint32 EPwm5TZIntCount; uint32 EPwm4TZIntCount; //Glaobales für DAC volatile struct DAC_regs* DAC_PTR[4]={0x0、DacaRegs、DacbRegs、& Dacces、//////////////////////////////////////////////////////////////////////////////// void #configma DATA_SECTION (Filter1_Result、"Filter1_RegsFile"); #pragma DATA_SECTION (Filter2_Result、"Filter2_RegsFile"); #Filterma DATA_SECTION (Filter3_Result、"Filter3_RegsFile"); #pragma DATA_SECTION (Filter4_Result、"Filter4_Regsfile");_ pragma INSD/ INDIRECT_INU16 ( void); void pragma NOT_pragma (void) pragma INSD/ INSDT/ INDIRECTPLISRISR/ IND16);void (void (void) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //函数原型 für ePWM void InitEPwm7Examples(); void InitEPwm6Examples(); void InitEPwm5Examples(); void InitEPwm4Examples(); __interrupt void epwm7_ISR (void); __interrupt void epwm6_ISR (void); __interrupt void epwm5_ISR (void); __interrupt void epwm4_ISR (void); void InitEPwmGpio_TZ (void); //函数原型 für DAC void configureDAC (uint16 DAC_num); //////////////////////////////////////////////////////////////////////////////////////// // // Main // void main (void) { uint16_t pinMuxoption; uint16_t HLT、LLT; // 初始化系统控制: // PLL、看门狗、启用外设时钟 //此示例函数可在 F2837xD_sysctrl.c 文件中找到。 // InitSysCtrl(); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// InitGpio(); // Einschalten der CLK der PWM 模块 // CpuSysRegs.PCLKCR2.bit.EPWM7=1; CpuSysRegs.PCLKCR2.bit.EPWM6=1; CpuSysRegs.PCLKCR2.bit.EPWM5=1; CpuSysRegs.PCLKCR2.bit.EPWM4=1; InitEPwmGpio_TZ (); //////////////////////////////////////////////////////////////////////////////////////////////// // //清除所有__interrupts 并初始化 PIE 矢量表: //禁用 CPU __interrupts // Dint; // //将 PIE 控制寄存器初始化为默认状态。 //默认状态是禁用所有 PIE _interrupts 并 清除标志//。 //此函数位于 F2837xD_PIECTRL.c 文件中。 // InitPieCtrl(); // 禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志: // IER = 0x0000; IFR = 0x0000; // //初始化 PIE 矢量表,其中包含指向 shell 中断 //服务例程(service routines,ISR)的指针。 //这将填充整个表,即使在 本示例中未使用__interrupt //也是如此。 这对于调试很有用。 //可以在 F2837xD_SYSCTRL.c 中找到 shell ISR 例程 //此函数位于 F2837xD_SYSCTRL.C.中 // InitPieVectTable(); // //此示例中使用的中断被重新映射到 这个文件中的// ISR 函数。 // EALLOW; PieVectTable.SD1_INT =&Sdfm1_ISR; PieVectTable.SD2_INT =&Sdfm2_ISR; ////////////////////////////////////////////////////////////////////////////////////////// PieVectTable.EPWM7_TZ_INT =&epwm7_ISR; PieVectTable.EPWM6_TZ_INT =&epwm6_ISR; PieVectTable.EPWM5_TZ_INT =&epwm5_ISR; PieVectTable.EPWM4_TZ_INT =&epwm4_ISR; ////////////////////////////////////////////////////////////////////////////////// EDIS; EALLOW; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Alles zwischen ***** Wird 同步 ausgeführt durch 裸片同步裸片 EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0; EDIS; //Intitialisierung/Einstellung der EPWM2 und der EPWM7 InitEPwm7Examples(); InitEPwm6Examples(); InitEPwm5Examples(); InitEPwm4Examples(); EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1; EDIS; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //启用连接到 SDFM INT 的 CPU INT5 // IER |= M_INT5; IER |= M_INT6;//中断 für ePWM7 IER |= M_INT4; IER |= M_INT3; // //在 PIE 中启用 SDFM INTn:组5 __interrupt 9-10 // PieCtrlRegs.PIEIER5.bit.INTx9=1;// SDFM1中断被启用 //PieCtrlRegs.PIEIER5.bit.INTx10 = 1;// SDFM2中断被启用 PieCtrlRegs.PIEIER2.bit.INTx7=1; PieCtrlRegs.PIEIER2.bit.INTx6=1; PieCtrlRegs.PIEIER2.bit.INTx5 = 1; PieCtrlRegs.PIEIER2.bit.INTx4 = 1; EINT; #ifdef CPU1 PinMuxoption = SDFM_PIN_MUX_OPTION1; // 将 GPIO 引脚配置为 SDFM 引脚 // Sdfm_configurePins (pinMuxoption); #endif // //选择 SDFM1 // gPeripheralNumber = SDFM1; // //输入控制模块 // //配置输入控制模式:调制器时钟速率=调制器数据速率 // Sdfm_configureInputCtrl (gPeripheralNumber、filter1、mode_0); Sdfm_configureInputCtrl (gPeripheralNumber、Filter2、mode_0); Sdfm_configureInputCtrl (gPeripheralNumber、FILTER3、MODE_0); Sdfm_configureInputCtrl (gPeripheralNumber、FILTER4、MODE_0); // //比较器模块 // HLT = 0x7FFF;//过值阈值设置 LLT = 0x0000;//欠值阈值设置 // //配置比较器模块的比较器滤波器类型和比较器的 OSR //值,更高的阈值,更低的阈值 // Sdfm_configureComparator (gPeripheralNumber、filter1、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、Filter2、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、FILTER3、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、FILTER4、SINC3、OSR_32、 HLT、LLT); // //启用主过滤器位:除非该位置位 ,否则所有过滤器模块//都不能启用。 当主滤波器//位在单个滤波器模块被启用后被启用时、所有滤波器模块被同步。 当在 启用//单个滤波器模块之前启用主滤波器位时,所有的滤波器//模块都异步。 // Sdfm_enableMFE (gPeripheralNumber); // 数据过滤器模块 // //配置数据过滤器模块过滤器类型、OSR 值和 //启用/禁用数据过滤器 // Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BIits); Sdfm_configureData_filter (gPeripheralNumber、Filter2、filter_enable、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BIits); Sdfm_configureData_filter (gPeripheralNumber、FILTER3、FILTER_ENABLE、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BIits); Sdfm_configureData_filter (gPeripheralNumber、FILTER4、FILTER_ENABLE、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BIits); // PWM11.CMPC、PWM11.CMPD、 PWM12.CMPC 和 PWM12.CMPD 信号不能同步 //滤波器。 此示例中未使用此选项。 // Sdfm_configureExternalreset (gPeripheralNumber、filter_1_EXT_RESET_ENABLE、 FILTER_2_EXT_RESET_ENABLE、 FILTER_3_EXT_RESET_ENABLE、 FILTER_4_EXT_RESET_ENABLE); // //初始化 ePWM // InitEPwm (); // //启用中断 // //可以使用此函数启用/禁用以下 SDFM 中断。 //启用/禁用比较器高阈 值//启用/禁用比较器低阈值 //启用/禁用调制器时钟故障 //启用/禁用滤波器确认 // Sdfm_configureInterrupt (gPeripheralNumber、filter1、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、Filter2、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER3、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER4、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); while ((* ePWM[gPWM_Number]).TBCTR < 550); // 启用主中断,以便任何滤波器中断都可以通过 SDFM 中断触发//到 CPU // Sdfm_enableMIE (gPeripheralNumber); ////////////////////////////////////////////////////////////////////////////////////// //Konfiguration von DAC Auf configureDAC (DAC_NUM); //////////////////////////////////////////////////////////////////////////////////////////////// while (1); } // // Sdfm1_ISR - SDFM 1 ISR // _中断 void Sdfm1_ISR (void) { //uint32_t sdfmReadFlagRegister = 0; //静态 uint16_t loopCounter1 = 0; // //读取 SDFM 标志寄存器(SDIFLG) // //sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); /* if (loopCounter1 <= MAX_SAples) { // //读取每个 SDFM 滤波器输出并将其存储在相应的滤波器中 //结果数组 // filter1_Result[loopCounter1]= SDFM1_READ_filter1_DATA_16BIT; Filter2_Result[loopCounter1]= SDFM1_READ_Filter2_DATA_16BIT; Filter3_Result[loopCounter1]= SDFM1_READ_FILTER3_DATA_16BIT; Filter4_Result [loopCounter1++]= SDFM1_READ_FILTER4_DATA_16BIT; // //清除 SDFM 标志寄存器 // Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister); sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); if (sdfmReadFlagRegister!= 0x0) { ESTOP0; } } 其他 { ESTOP0; Done (); } * //********* //Neue Datenverarbeitung Ausmit gabe über DAC while (1) { //filter1_Result[1]= SDFM2_READ_filter1_DATA_16BIT; DAC_PTR[DACA]->DACVALS.ALL = SDFM1_READ_filter1_DATA_16BIT; DAC_PTR[DACB]->DACVALS.ALL = SDFM1_READ_Filter2_DATA_16BIT; DAC_PTR[DACC]->DACVALS.ALL = SDFM1_READ_FILTER3_DATA_16BIT; //unsigned int val =(unsigned char) SDFM1_READ_FILTER3_DATA_16BIT[0]<< 16 |(unsigned char) SDFM1_READ_FILTER3_DATA_16BIT[1]; //DAC_PTR[DACC]->DACVALS.all = val; } //********* // //确认此__interrupt 以接收更多来自组5的__interrupts // PieCtrlRegs.PIEACK.all = PIEACK_group5; } // Sdfm2_ISR - SDFM 2 ISR // _中断 void Sdfm2_ISR (void) { //uint32_t sdfmReadFlagRegister; //静态 uint16_t loopCounter1 = 0; // //读取 SDFM 标志寄存器(SDIFLG) // //sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); /* if (loopCounter1 <= MAX_SAples) { // //读取每个 SDFM 滤波器输出并将其存储在相应的滤波器中 //结果数组 // filter1_Result[loopCounter1]= SDFM2_READ_filter1_DATA_16BIT; Filter2_Result[loopCounter1]= SDFM2_READ_Filter2_DATA_16BIT; Filter3_Result[loopCounter1]= SDFM2_READ_FILTER3_DATA_16BIT; Filter4_Result [loopCounter1++]= SDFM2_READ_FILTER4_DATA_16BIT; // //清除 SDFM 标志寄存器 // Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister); sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); if (sdfmReadFlagRegister!= 0x0) { ESTOP0; } } 其他 { ESTOP0; Done (); } * //********* //Neue Datenverarbeitung Ausmit gabe über DAC //filter1_Result[1]= SDFM2_READ_filter1_DATA_16BIT; DAC_PTR[DACA]->DACVALS.ALL = SDFM1_READ_filter1_DATA_16BIT; DAC_PTR[DACB]->DACVALS.ALL = SDFM1_READ_Filter2_DATA_16BIT; DAC_PTR[DACC]->DACVALS.ALL = SDFM1_READ_FILTER3_DATA_16BIT; //********* // // //确认此__interrupt 以接收更多来自组5的__interrupts // PieCtrlRegs.PIEACK.all = PIEACK_group5; } // Sdfm_configurePins -配置 SDFM GPIO // void Sdfm_configurePins (uint16_t sdfmPinOption) { uint16_t 引脚; 开关(sdfmPinOption) { 案例 SDFM_PIN_MUX_OPTION1: for (pin=16;pin<=31;pin++) { GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async); GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7); } 中断; 案例 SDFM_PIN_MUX_Option2: for (pin=48;pin<=63;pin++) { GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async); GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7); } 中断; 案例 SDFM_PIN_MUX_OPTION3: 对于(引脚=122;引脚<=137;引脚++) { GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async); GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7); } 中断; } } // // InitEPwm -初始化指定的 ePWM 设置 // void InitEPwm (void) { uint16_t CMPC、CMPD; CMPC = 2; CMPD = 2; #ifdef CPU1 GPIO_SetupPinOptions (4、GPIO_OUTPUT、GPIO_异 步); GPIO_SetupPinMux (4、GPIO_MUX_CPU1、1); #endif EALLOW; // //允许所有用户将所有启用的 ePWM 模块全局同步到 //时基时钟(TBCLK) // CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1; // //设置 TBCLK // (* ePWM[gPWM_Number]).TBPHS.bit.TBPHS = 0x0000;//相位为0 (* ePWM[gPWM_NUMBER]).TBCTR = 0x0000; //清除计数器 (* ePWM[gPWM_Number]).TBPRD = ePWM_TIMER_TBPRD;//设置计时器周期 // 801 TBCLK。 (* ePWM[gPWM_NUMBER]).CMPC = CMPC; //设置比较 C 值 (* ePWM[gPWM_Number]).CMPD = CMPD; //设置比较 D 值 (* ePWM[gPWM_Number]).cmpa.bit.cmpA = CMPC; //设置比较 C 值 (* ePWM[gPWM_Number]).CMPB.bit.CMPB = CMPD; //设置比较 D 值 // //设置计数器模式 // (* ePWM[gPWM_Number]).TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数 (* ePWM[gPWM_Number]).TBCTL.bit.HSPCLKDIV = TB_DIV1; (* ePWM[gPWM_Number]).TBCTL.bit.CLKDIV = TB_DIV1; // //设置操作 // (* ePWM[gPWM_Number]).AQCTLA.bit.CAU = 3; //在事件 A 上设置 PWM1A、向上 //计数 // //设置操作 // (* ePWM[gPWM_Number]).AQCTLB.bit.CBU = 3; //在事件 A 上设置 PWM1A、向上 //计数 EDIS; } // //完成-停止调试器和停止应用 程序的函数// void Done (void) { asm (" ESTOP0"); 用于(;); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void InitEPwmGpio_TZ (void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO12 = 1;//禁用 GPIO10上的上拉电阻(EPWM7A) GpioCtrlRegs.GPAMUX1.bit.GPIO12=1;//将 GPIO10配置为 EPWM7A GpioCtrlRegs.GPAPUD.bit.GPIO13 = 1;//禁用 GPIO11上的上拉电阻(EPWM7B) GpioCtrlRegs.GPAMUX1.bit.GPIO13=1;//将 GPIO11配置为 EPWM7B GpioCtrlRegs.GPAPUD.bit.GPIO10=1;//EPWM6A GpioCtrlRegs.GPAMUX1.bit.GPIO10=1;// GpioCtrlRegs.GPAPUD.bit.GPIO11 = 1;//EPWM6B GpioCtrlRegs.GPAMUX1.bit.GPIO11=1;// GpioCtrlRegs.GPAPUD.bit.GPIO8=1;//EPWM5A GpioCtrlRegs.GPAMUX1.bit.GPIO8=1;// GpioCtrlRegs.GPAPUD.bit.GPIO9=1;//EPWM5B GpioCtrlRegs.GPAMUX1.bit.GPIO9=1;// GpioCtrlRegs.GPAPUD.bit.GPIO6 = 1;//EPWM4A GpioCtrlRegs.GPAMUX1.bit.GPIO6=1;// GpioCtrlRegs.GPAPUD.bit.GPIO7=1;//EPWM4B GpioCtrlRegs.GPAMUX1.bit.GPIO7=1;// EDIS; } // //文件结束 // /////EPM7 Nur für Test-Zwecke void InitEPwm7Examples() { EALLOW; EPwm7Regs.TBPRD = 4; EPwm7Regs.TBPHS.bit.TBPHS = 0x0000; EPwm7Regs.TBCTR = 0x0000; EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm7Regs.CMPA.bit.CMPA = 2; EPwm7Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm7Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm7Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm7Regs.DBRED.bit.DBRED = 0; EPwm7Regs.DBFED.bit.DBFED = 0; EPwm7_DB_DIRECTION = DB_UP; EPwm7Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm7Regs.ETSEL.bit.INTEN = 1; EPwm7Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm7_ISR (void) { EPwm7Regs.ETCLR.bit.INT = 1; }// //EPM7 Nur für Test-Zwecke void InitEPwm6Examples() { EALLOW; EPwm6Regs.TBPRD = 4; EPwm6Regs.TBPHS.bit.TBPHS = 0x0000; EPwm6Regs.TBCTR = 0x0000; EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm6Regs.CMPA.bit.CMPA = 2; EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm6Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm6Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm6Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm6Regs.DBRED.bit.DBRED = 0; EPwm6Regs.DBFED.bit.DBFED = 0; EPwm6_DB_DIRECTION = DB_UP; EPwm6Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm6Regs.ETSEL.bit.INTEN = 1; EPwm6Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm6_ISR (void) { EPwm6Regs.ETCLR.bit.INT = 1; }// //EPM7 Nur für Test-Zwecke void InitEPwm5Examples() { EALLOW; EPwm5Regs.TBPRD = 4; EPwm5Regs.TBPHS.bit.TBPHS = 0x0000; EPwm5Regs.TBCTR = 0x0000; EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm5Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm5Regs.CMPA.bit.CMPA = 2; EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm5Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm5Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm5Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm5Regs.DBRED.bit.DBRED = 0; EPwm5Regs.DBFED.bit.DBFED = 0; EPwm5_DB_DIRECTION = DB_UP; EPwm5Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm5Regs.ETSEL.bit.INTEN = 1; EPwm5Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm5_ISR (void) { EPwm5Regs.ETCLR.bit.INT = 1; }// //EPM7 Nur für Test-Zwecke void InitEPwm4Examples() { EALLOW; EPwm4Regs.TBPRD = 4; EPwm4Regs.TBPHS.bit.TBPHS = 0x0000; EPwm4Regs.TBCTR = 0x0000; EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm4Regs.CMPA.bit.CMPA = 2; EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm4Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm4Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm4Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm4Regs.DBRED.bit.DBRED = 0; EPwm4Regs.DBFED.bit.DBFED = 0; EPwm4_DB_DIRECTION = DB_UP; EPwm4Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm4Regs.ETSEL.bit.INTEN = 1; EPwm4Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm4_ISR (void) { EPwm4Regs.ETCLR.bit.INT = 1; } // configureDAC - Abänderung 指定的 DAC 输出//μ s -->配置 von zwei DAC void configureDAC (uint16 DAC_num) { EALLOW; DacaRegs.DACCTL.bit.DACREFSEL =基准; DacaRegs.DACOUTEN.bit.DACOUTEN = 1; DacaRegs.DACVALS.ALL = 0; //DELAY_US (10);//缓冲 DAC 加电延迟 DacbRegs.DACCTL.bit.DACREFSEL =基准; DacbRegs.DACOUTEN.bit.DACOUTEN = 1; DacbRegs.DACVALS.ALL = 0; //DAC_C DaccRegs.DACCTL.bit.DACREFSEL =基准; DaccRegs.DACOUTEN.BIT.DACOUTEN = 1; DaccRegs.DACVALS.ALL = 0; DELAY_US (10);//缓冲 DAC 加电延迟 EDIS; }
高级感谢您的参与
