这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【1.19更新ePWM】Snake0301的DSP学习进程

共21条 2/3 1 2 3 跳转至
高工
2013-10-29 20:04:15     打赏
11楼

今晚玩按键,用按键去控制流水灯的速度。

符晓老师的那本教材灰常不错,很详细地解释了F28335的各种内涵。

下面所有的代码,均在20楼的基础上进行修改。

位定义:

在20楼LED位定义的前提,增加按键位的定义,按键使用GPIOB的58-61管脚。

#define KEY0_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO58  
#define KEY1_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO59
#define KEY2_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO60
#define KEY3_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO61

子函数与主函数:
GPIO初始化子函数添加

KEY0_DIR = IN;
KEY1_DIR = IN;
KEY2_DIR = IN;
KEY3_DIR = IN;


void LED_Blink(long double t) //LED Blink子函数
{LED0_ON;
LED1_ON;
LED2_ON;
LED3_ON;
LED4_ON;
LED5_ON;
LED6_ON;
LED7_ON;
DELAY_US(t);
LED0_OFF;
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
LED5_OFF;
LED6_OFF;
LED7_OFF;
DELAY_US(t);
}

void LED_GO(long double t) // LED 流水灯子函数
{LED0_ON;
 DELAY_US(t);
 LED0_OFF;
 LED1_ON;
 DELAY_US(t);
 LED1_OFF;
 LED2_ON;
 DELAY_US(t);
 LED2_OFF;
 LED3_ON;
 DELAY_US(t);
 LED3_OFF;
 LED4_ON;
 DELAY_US(t);
 LED4_OFF;
 LED5_ON;
 DELAY_US(t);
 LED5_OFF;
 LED6_ON;
 DELAY_US(t);
 LED6_OFF;
 LED7_ON;
 DELAY_US(t);
 LED7_OFF;
}


void main()
{ Uint32 KeyValue = 0;
 InitSysCtrl(); //系统初始化
  DINT;//关闭全局中断
 InitPieCtrl();//初始化中断控制寄存器
  IER = 0x0000;//关闭CPU中断
  IFR = 0x0000;//清除CPU中断信号
 InitPieVectTable();//初始化中断向量表
 Gpio_init();
 while(1)
 { KeyValue = GpioDataRegs.GPBDAT.all & 0x3C000000;
   switch(KeyValue)
    {case 0x3C000000:LED_Blink(200000);break;
     case 0x1C000000:LED_GO(100000);break;
     case 0x2C000000:LED_GO(200000);break;
     case 0x34000000:LED_GO(400000);break;
     case 0x38000000:LED_GO(800000);break;
    }
 }

}


视频伺候:



视频地址:http://player.youku.com/player.php/sid/XNjI3ODkzODUy/v.swf

一些情况及感想:

程序比较简单,没有防抖没有中断,调试过程很快。

如果时间ok的话,想把DSP所有的外设都系统地捣腾一遍,再捣腾捣腾浮点运算和graph。



高工
2013-10-29 23:56:23     打赏
12楼

晚上找来一个4位8段数码管,简单玩了一下。

动态扫描,技术到9999,显示erro,通过按键跳出erro,从0计数。

主函数:

void main()
{unsigned int count=0,KeyValue=0;
 InitSysCtrl(); //系统初始化
  DINT;//关闭全局中断
 InitPieCtrl();//初始化中断控制寄存器
  IER = 0x0000;//关闭CPU中断
  IFR = 0x0000;//清除CPU中断信号
 InitPieVectTable();//初始化中断向量表
 Gpio_init();
 Seg_dis_init();
start:while(count<=9999)
{ count++;
DELAY_US(1);      //这里太搞了,修改参数居然速度不变,后来不知神马情况又会变化了。
Seg_Dis_all(count);
}
while(count>9999)
{   Seg_dis_erro();
    KeyValue = GpioDataRegs.GPCDAT.all & 0x00000008;
    if(KeyValue==0)
    {
    count = 0;
    goto start;
    }
}
}

很久没用goto指令了,今天重温一下,嘿嘿,蛮好用。

其他的代码不贴了,有兴趣的童鞋自由下载:smg.rar

视频伺候:




视频地址:http://player.youku.com/player.php/sid/XNjI3OTc2MzQ0/v.swf

一些情况及感想:

吐槽一下,开发板木有电源引出,只有一组直接从USB取电的端子,不是很方便。

俺这个4位数码管共阳,Vcc端接入USB电压,F28335输出的高电平还是足够点亮数码管的。

好在把手头上的3.3v电源小板用起,才解决问题。

还在捣腾这些简单的IO,期待深入的学习啊。

库里面有个函数DELAY_US(),很不解。比如上面主函数里面调用DELAY_US(1),居然和DELAY_US(100)、DELAY_US(100xxx)的延时效果一致,貌似入口参数没起作用。后来反复折腾,不知怎么的又ok了,不会和外设时钟有关吧?我顿时湿了,求版主科普啊。


高工
2013-10-30 12:10:24     打赏
13楼
版主没看视频,哈哈 数码管从0~9999计数,1us和100us在数码管上肉体还是能感觉出来的。 也试过ms级,情况相同。 不知道是不是仿真器问题。

高工
2013-10-31 23:13:33     打赏
14楼

呃,今天 调试发现上次调试的信息还会有残存,一些数组没有进行操作,数据也会发生变化。

很奇怪,不知道是怎么回事。

编译器、DSP芯片、仿真器都有可能有bug。


高工
2013-11-01 00:56:32     打赏
15楼

晚上调试串口通信,一切顺利。

顺道用串口做了个简单的交互界面,只判断几个字符串,然后对应输出字符串。

光盘给了SCIC的代码,用的是串口中断,还算比较好理解。

看这个简单的交互界面,想起了小时候的小霸王学习机,吼吼,有空把 小霸王学习机 复刻一次。

代码:

懒得贴了,直接上附件吧,想玩的童鞋直接下起:simpleGUI.rar

视频伺候:


视频地址:http://player.youku.com/player.php/sid/XNjI4ODQ2NzI4/v.swf

一些情况:

串口硬件调试还是相对比较简单,玩串口的过程中,发现字符串的处理比串口本身要复杂。

难怪串口这么多年了,还有不少人在研究新的串口通信协议。

老师说中断里面就不要处理数据了,可惜在主函数里面比较字符串并输出总是有点瑕疵,干脆都丢在中断服务程序里面搞定了。



高工
2014-01-17 22:33:09     打赏
16楼
这两个月忙到呕血,下周开始继续更新。

高工
2014-01-19 17:44:51     打赏
17楼

ePWM,第一次接触,以前PWM倒是久闻大名。

ePWM其实就是增强型的PWM,可以通过各种寄存器,去配置PWM的各种特性

每个ePWM模块有xA和xB两路输出

除了常见的周期、占空比外,可以设置死区、动作类型、斩波等等特性

为毛TI的DSP很适合电机类、开关电源等领域,估计ePWM加了不少分吧


直接看例程

历程里面启用了PWM1-PWM3,并设置对应的中断和参数

值得注意的是所有这3组PWM的周期都不是通过TBPRD字段来进行配置计数器周期来得到PWM周期

虽然定义了EPWM1_TIMER_TBPRD、EPWM2_TIMER_TBPRD和EPWM3_TIMER_TBPRD ,但貌似他们的取值都是2000,反倒是利用HSPCLKDIV和CLKDIV字段来进行系统时钟的分频。进而获得PWM的频率

另外一个是PWM3B,触发后的动作是TOGGLE,其实这路并没有输出PWM,而是一个常规方波。


F28335有关ePWM的寄存器贼多,数据手册和教材得备在旁边才能摸索

倒腾了一下午,才勉强了解大概是如何工作的。

主要就是7个模块,TB、CC、AQ、DB、PC、TZ和ET,但是常规PWM的输出重点要处理TB、CC、AQ、ET的相关寄存器

寄存器太多了,建议还是慢慢查看数据手册,再对照进行仿真调试

TI的源码也是定义了一大堆的结构体,还相互嵌套,有点坑。


直接来个视频吧


视频地址:http://player.youku.com/player.php/sid/XNjYzNjU3OTc2/v.swf


示波器很清楚看出来,经典的PWM波形啊

其实想玩玩死区和斩波的,USBee不争气,示波器通道2显示有问题,调试半天也没搞定,先缓缓。

整了个RGB的LED,PWM控制LED也是比较常见的用途吧

还有板载的2个LED,CPLD里面直通,渐暗渐灭

直通啊直通

懒人都用原理图,不用描述语言。


眼睛花了,到这儿先。


高工
2014-01-19 18:37:02     打赏
18楼

版主V5


高工
2014-01-24 11:34:33     打赏
19楼

的确是看的不是很清楚

不过我感觉和可调电阻关系不大

印象中,单步调试的时候,显示还是比较正常的。

估计是因为在RAM中运行,速度太快,液晶时序不是很匹配吧


高工
2014-02-17 14:36:11     打赏
20楼
一直在上班哈

共21条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]