28335 - DSP实验报告

更新时间:2024-04-18 16:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

XXXXXX大学

研究生实验报告

课程名称: DSP技术应用 综合设计名称:电量参数计算和发送

学生姓名: 班级学号: 学科名称:

2012年5月25日

研究生实验报告

一、综合实验题目和要求

1、实验设计要求

要求1:对给定的波形信号,采用

TMS320F28335的浮点功能计算该信号的以下时域参数:信号的周期T(频率f也需要计算),信号的均方根大小Vrms、平均值Vavg(即直流量)、峰峰值Vpp。

其中,均方根Vrms的计算公式(数字量的离散公式)如下:

NV12rms?N?u(i) i式中,N为采样点数,u(i)为采样序列中的第i个采样点。

要求2:所设计的软件需要计算采样的波形周期个数,并控制采样点数大于1个波形周期,小于3个波形周期大小。

要求3:对采样的数据通过串口发送至PC界面。 2、实验目的

主要考核学生对TMS320F28335浮点处理器、A/D模块、SCI模块和信号时域分析等知识的掌握。

产生的波形可选择正弦波,也可以是其它任意波形。如果波形中添加了随机噪声,则建议采用软件设计中加入数字滤波算法,否则可能计算中产生较大的误差。

实验所需的频率不能太大,(建议范围:10Hz~100kHz),采样点建议在256点左右(自己任意设定也可,不少于32点)。

二、硬件框图

JTAG口PC机USB仿真器SEED-DTK29335综合实验系统SCI接口LCDAD接口DSP信号发生器小键盘

图1 系统硬件框图

图1 给出了该综合实验的硬件框图,首先通过小键盘设置波形的参数,包括频率、幅值以及波形等。然后通过信号发生器产生模拟信号,由DSP28335的AD通道6进行采样处理。DSP与PC机之间通过串口进行通信,由DSP28335的SCIb通道处理。

ADC模块有16个转换通道,可配置成两个独立的8通道转换模块,分别对应于管理器A和B,根据用户需求,两个独立的8通道转换模块可以级联成一个8通道模块,在ADC模块中尽管可以多通道输入和有两个排序器,但只有一个A/D转换器可以。

两个8通道模块可以自动对一系列转换进行排序,而且每个模块都可以通过多路复用开关选择任何一个通道。在级联模式下,自动排序器将作为一个单一的8通道排序器。对于每个排序器,当转换结束时,选择通道的转换结果被储存在相应的结果寄存器中。在DSP28335,自动排序模式允许用户对统一通道进行多次采样。模拟输入与数字输

1

研究生实验报告

出的关系如下

数字输出值=4095?模拟输入值-ADCLO3

系统控制模块高速预定标器系统时钟ADC模块高速外设时钟ADCINA0.模Result Reg0.拟.开S/H-AResult Reg1.ADCINA7关.12位.ADCResult Reg7模块ADCINB0Result Reg8模.拟.开S/H-B.ADCINB0关Result Reg15S/WADC控制寄存器S/WGPIO/XINT2_EVAADCSOCSOC排序器1排序器1SOCEVB图2 ADC模块结构框图

外设时钟HSPCLK通过ADCTRL3寄存器的SDCCLKPS(3:0)位分频,然后再通过通过ADCTRL1寄存器中的CPS位进行二分频。另外,ADC模块还可以通过扩展采样/

获取周期,调整信号源的阻抗,这是由ADCTRL1寄存器中的ACQ_PS(3:0)位决定的。这些位并不影响采样/保持和转换过程,但可以通过增大脉冲长度增加采样的时间长度。

图3 ADC内核时钟以及采样/保持时钟

三、程序流程图

1、主程序流程图

程序使用两个中断:ADC中断和CPU

定时器2中断。ADC用于对波形进行采样、滤波、存储以及计算波形的有效值、峰峰值、平均值,并使用串口发送;CPU定时器2中断用于计算波形周期和频率。

系统初始化初始化GPIO、SCI清除所有中断,初始化PIE向量表初始化CPU定时器2初始化ADC使能中断等待中断响应

图4 主程序流程图

图4给出了主程序流程图,该程序的主要步骤是进行初始化——使能中断——等待中断响应。

2、子程序流程图

2

中中中中中中N中中中中中中中中中中中中中中=1024中YN中中中中中中中中中中中中中中中中中中中中中中中中中ADC中中中ADC中中中中中AD中中中中中

5 ADC中断服务子程序

开始信号采集并存储Voltage1[i]获取前一个采样点Voltage1[i-1]低通滤波,根据两次采样值修正此次采样值结束

图7滤波程序段 中中中中中中中中中中中中中中中中中中中中中中中中中中中中T1中中中中中中中中中中中中中中中中中中中中中中中中T3中中中中中中中中中中中中中中中中中中中中中中中中中中中中中中 6 定时器2中断服务子程序采集1024个数据点MAX=Voltagelb[0]MIN=Voltagelb[0]MAXVoltagelb[i]?NYMIN=Voltagelb[i]i==1024?i++Y结束

图8求最大值最小值程序段

研究生实验报告

采集1024个数据点计算1024个点的和以及平方和平方和除以1024后开根号,累加和除以1024得出结果即为有效值和平均值

图9求有效值和平均值程序段

图5~图10给出了所有子程序的框图,下面分别说明各个程序的设计思想:

(1)AD中断子程序(图5):该程序对波形进行采样,滤波以及存储,并求出有效值,峰峰值和平均值。采样后的波形存储在一个长度为1024的数组里。为了减少CPU开销,程序设定为采样累计到1024个点后再进行波形的有效值,峰峰值和平均值计算。

(2)定时器2中断子程序(图6):该程序通过定时器中断来实现对波形等时间间隔的判断和处理,从而可以较为精确的计算出波形周期和频率。在波形每次正向过零点时,计算出两次过零点的时间间隔,并乘以定时器2中断周期,从而得到波形的实际周期。定时器2中断周期设置为10us。

(3)滤波程序(图7):该程序对1024个点进行了低通值滤波,根据本次采样点和上次采样点,来修正本次的采样值。滤波公式如

开始将得到的浮点数据转化成整型将个十百千位进行分离Nbuff是否为空?Y转为ASCII码写入buff结束

图10串口通信程序段

下,程序中取K=0.15。

Voltage(n)?K*Voltage(n)?(1?K)*Voltage(n?1) (4)求最大值最小值程序(图8):该程序定义数组第一个值为初值,再比较1023个点,如果找到更大的点,则赋给最大值对应的变量;如果找到更小的点就赋给最小值对应的变量。

(5)求有效值和平均值程序段(图9):有效

值的计算:将1024个点的平方值相加求平均后,再开根号。平均值的计算:将1024个点求和然后求平均。

(6)SCI通信程序(图10):PC端为串口接收助手,为了使显示界面上显示的是实际数值,发送之前将有关的数据量的个十百千位拆开,并转换为ASCII码进行发送。在发送之前检测SCIb_buff是否为空,若不为空则等待。串口发送子程序定义了一个计数器,以控制串口发送的速率。

4

研究生实验报告

四、实验结果和分析

1、软件调试结果

图11 900Hz 1200mV正弦波调试结果 (上图)

图12 1700Hz 800mV正弦波调试结果 (上图)

图13 800Hz 1000mV三角波调试结果 (上图)

2、结果分析

(1)从图11所示的调试结果波形图可以看出,滤波后的波形平滑度明显变好,说明低

通滤波效果良好。各个波形参数MIN(最小值)、MAX(最大值)、VRM(有效值)、FRE(频率)、 PER(周期)均和实际输入的指标误差在

5

研究生实验报告

5%以内,说明电参量的计算方法准确性良好。

(2)从图12所示的实验波形可以看出,当输入波形的电参量变化时,输出电参量的值也发生了相同变化,且误差值在5%以内。由ADC的采样频率可以得到,本程序可以计算出频率最低为150Hz的正弦波的周期。

(3)比较图13和前两幅波形可以得出,本程序在对三角波进行采样时,波形滤波效果良好,电参量计算准确,也达到了良好的效果。由此验证了本程序的通用性,并进一步验证了程序的准确性。

(4)通过实验结果总结出本程序在以下方面需要进一步改进:AD采样的速率以及采样窗口的大小目前为确定值,当波形频率变化范围较大时,会影响到采样的结果,如:当频率过大时,采样波形每个周期的点数减小,将直接影响各个电参量的计算结果;当频率过小时,采样的窗口不能采样出一个完整的波形周期,也将直接影响各个电参量的计算结果。这是需要进一步作出改进的地方。

五、源程序

#include \ // DSP2833x Headerfile Include File

#include File

\ // DSP2833x Examples Include #include \

// Prototype statements for functions found within this file. interrupt void adc_isr(void); interrupt void ISRTimer2(void); void number_count(void); 并发送数据 //确定周期采样点,计算频率和有效值void scib_fifo_init(); void InitScibGpio(void);

//串口初始化程序

void number_C(unsigned long i); //数字各位拆分函数

#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 // HSPCLK

=

SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz #endif

#if (CPU_FRQ_100MHZ)

SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) #define ADC_MODCLK 0x2 // = 25.0 MHz HSPCLK = #endif

#define HSPCLK/2*ADC_CKPS ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz

0x1 // ADC module clock = #define ADC_SHCLK 0xf // S/H width in ADC module periods = 16 ADC clocks

#define AVG 1000 // Average sample limit #define ZOFFSET 0x00 // Average Zero offset #define BUF_SIZE 160 // Sample buffer size

//Global variables used in this example: Uint16 LoopCount; Uint16 ConversionCount; Uint16 Voltage1[1024]; Uint16 i = 0; Uint16 j = 0; Uint16 Ticker[50];

//在AD采样的例程基础上修改,以下为新定义的变量: Uint16 ADt1,ADt2,ADt,ADt3,ADt4;//AD时间间隔 Uint16 Voltagelb[1024]; Uint16 vref=500; //参考值 int PreConversion=0; int crosszero=0;

Uint32 t1,t2,t,t3,t4;//定时器时间间隔 float Data=0.0; float Vavg=0.0;//平均值 float Vmax=0.0;//最大值

float Vmin=0.0;//最小值 float Vrms=0.0;//有效值 float Vpp=0.0;//峰峰值 float frequency=0; float period=0; float MAX=0.0; float MIN=0.0;

//以下为整型变量,用于串口发送 Uint16 T=0;//周期ms Uint16 F=0;//

6

研究生实验报告

Uint16 V=0;//有效值mv Uint16 max=0;//最大值mv Uint16 min=0;//最小值mv unsigned int TX_flag = 0; //串口发送时间间隔标志 unsigned int TX_Ticker = 500; //串口发送的周期间隔 main() { // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl(); // Step 2. Initialize GPIO: // This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state. InitGpio(); // Skipped for this example InitScibGpio();//*********************起初遗漏了这句话************************** // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT; // Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2833x_PieCtrl.c file. InitPieCtrl(); // Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c. InitPieVectTable(); // Interrupts that are used in this example are re-mapped to // ISR functions found within this file. EALLOW; // This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; PieVectTable.TINT2 = &ISRTimer2; EDIS; InitXintf(); /*设置CPU*/ InitCpuTimers(); ConfigCpuTimer(&CpuTimer2, 150, 10);//中断时间10us. 1MHz StartCpuTimer2(); CpuTimer2Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0 /*开中断*/ IER |= M_INT14; // Enable TINT0 in the PIE: Group 1 interrupt 7 PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c // InitPeripherals(); // Not required for this example InitAdc(); // For this example, init the ADC scib_fifo_init(); // Step 5. User specific code, enable interrupts: // Enable ADCINT in PIE PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |= M_INT1; // Enable CPU Interrupt 1 EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM LoopCount = 0; ConversionCount = 0; AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 0 Non-Cascaded Mode; 1 Cascaded Mode AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x6; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15; 7 研究生实验报告

AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; for(i=0;i<1024;i++) { Voltagelb[i] = 0; } // Wait for interrupt for(;;); } //******************此中断完成AD采样以及相关波形参数的计算(除周期外)********************** interrupt void adc_isr(void) { //********************************采样并滤波************************************************ Voltage1[ConversionCount]=AdcRegs.ADCRESULT0 >>4; PreConversion=ConversionCount-1; if(PreConversion<0) PreConversion=1024; Voltagelb[ConversionCount]= Voltage1[ConversionCount]*0.15+ Voltagelb[PreConversion]*0.85;//一阶滞后滤波 if(ConversionCount == 1024) { ConversionCount = 0; //************************计算有效值,平均值,峰峰值程序段***************************// //Vavg平均值,Vmax最大值,Vmin最小值,Vrms有效值,Vpp峰-峰值 Vavg = 0; Data = 0; Vmax=Voltagelb[0]; Vmin=Voltagelb[0]; for(i=0;i<1024;i++) { Data+=Voltagelb[i]*Voltagelb[i]; Vavg+=Voltagelb[i]; if(VmaxVoltagelb[i]) Vmin=Voltagelb[i]; } Data=Data/1024; Vrms=sqrt(Data);//计算有效值 Vavg=Vavg/1024;//计算平均值 Vpp=Vmax-Vmin;//计算峰-峰值 //**************************计算有效值,平均值,峰峰值程序段结束********************// T=period*1000000; F=frequency; Vrms=Vrms*3/4095; MAX=Vmax*3/4095; MIN=Vmin*3/4095; V=Vrms*1000; max=MAX*1000; min=MIN*1000;//得出的整型值单位均为mv number_count();//调用串口发送 } else ConversionCount++; // Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; return; } //*************************此中断中计算波形周期,10us执行一次******************************** interrupt void ISRTimer2(void) { CpuTimer2.InterruptCount++;//32位无符号整型:最大4294967295 CpuTimer2.InterruptCount=0; if(CpuTimer2.InterruptCount>4294967290) ount])&&(crosszero==0))//if((Voltagelb[PreConversion]vref)&&(vref>Voltagelb[ConversionCount])&&(crosszero==1))//第2个交点 { crosszero=2; t2=CpuTimer2.InterruptCount; 8 研究生实验报告

ADt2=ConversionCount; } ount])&&(crosszero==2))//if((Voltagelb[PreConversion]= TX_Ticker ) { TX_flag = 0; //需要发送频率、有效值、最大值、最小值 ScibRegs.SCITXBUF= '{'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'M'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'I'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'N'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ':'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); number_C(min); ScibRegs.SCITXBUF= 'm'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'v'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ','; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'M'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'A'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'X'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ':'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); number_C(max); ScibRegs.SCITXBUF= 'm'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'v'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ','; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'V'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'R'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'M'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ':'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); number_C(V); ScibRegs.SCITXBUF= 'm'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'v'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ','; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'F'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'R'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'E'; 9

研究生实验报告

while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ':'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); number_C(F); ScibRegs.SCITXBUF= 'H'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'Z'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ','; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'P'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'E'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 'R'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= ':'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); number_C(T); ScibRegs.SCITXBUF= 'u'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= 's'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= '}'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= '\\t'; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); } //清有效值和周期采样点数,为下周期做准备 } void scib_fifo_init() //串口B初始化 { ScibRegs.SCICCR.all = 0x0007; // 1个停止位、无奇偶校验 ScibRegs.SCICTL1.all = 0x0003; // 使能TX、RX ScibRegs.SCICTL2.all = 0x0003; ScibRegs.SCICTL2.bit.TXINTENA = 1; ScibRegs.SCICTL2.bit.RXBKINTENA = 1; ScibRegs.SCIHBAUD = 0x0001; ScibRegs.SCILBAUD = 0x00e7; //波特率9600 ScibRegs.SCICCR.bit.LOOPBKENA =0; //禁止自检模式 ScibRegs.SCICTL1.all =0x0023; ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0; ScibRegs.SCIFFRX.bit.RXFIFORESET=0; ScibRegs.SCIFFTX.all=0xE040; ScibRegs.SCIFFRX.all=0x204f; ScibRegs.SCIFFCT.all=0x0; } void InitScibGpio(void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // GPIO18上拉 GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; // GPIO19上拉 义为输入脚GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // GPIO19定 GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 2; // GPIO18定义为SCITXDB操作 GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 2; // GPIO19定义为SCIRXDB操作 EDIS; } //**********************************此程序将发送的数据拆分****************************** void number_C(unsigned long i) { unsigned char a,b,c,d; a = i; b = ( i/10 ); c = ( i/100 ); d = ( i/1000); //将数字个、十、百和千位拆开 if(d!=0) //千位不为0,四位数全部发送 { ScibRegs.SCITXBUF= d+48; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= c+48; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= b+48; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= a+48; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); } else if( d==0 && c!=0 ) //千位为0,百位不为0时,发送低三位数 10

研究生实验报告

{

ScibRegs.SCITXBUF= c+48;

while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= b+48;

while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= a+48;

while(ScibRegs.SCIFFTX.bit.TXFFST != 0);

}

发送低二位数else if( d==0 && c==0 && b != 0 ) // 千、百位为0,十位不为0时, {

ScibRegs.SCITXBUF= b+48;

while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF= a+48;

while(ScibRegs.SCIFFTX.bit.TXFFST != 0); } else

//只发送个位数

{

ScibRegs.SCITXBUF= a+48;

while(ScibRegs.SCIFFTX.bit.TXFFST != 0); }

}

六、对本实验课程的几点建议

1.可以考虑结合自己的课题,设计讲解一些复杂程序。像PWM等模块的使用对于做电机、电源变换器等课题来说经常用到,希望能增加这些常用程序的实验。

2.希望能更多地安排自由上机的时间,这样可以更好地掌握所学知识,增加程序调试经验。

3.希望对实验箱进行整体检修,因为在实验调试时发生了很多状况,比如程序加载失败、信号发生器小键盘失灵等,给实验带来了不便。

11

本文来源:https://www.bwwdw.com/article/nldp.html

Top