您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 【转载】基于BF592的中波调幅任意频率干扰试... 
本帖共有792个阅读者
发表帖子 发表投票 回复主题
【转载】基于BF592的中波调幅任意频率干扰试验
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
【转载】基于BF592的中波调幅任意频率干扰试验

前些日子上网看到一个帖子,作者用一个音频变压器、一个晶振、加上一根简易的天线做成了一个音频发射器,其晶振频率为1MHZ,距离约10m左右,使用收音机即可收到,下面是作者的图片:

上传的图片
  2012281134057.jpg [ 25.10 KB 621×526 ] (缩略时请点击查看原图)

 

我觉得挺好玩的,便去买晶振想实验下,但是遗憾的是我买到的是1.84M的,而我国的中波调幅波段是540~1600KHZ,也就是我的收音机范围就是540~1600的,真悲催!

但是我想知道用这么简单的东西能否真的向作者说的那样可以拿收音机接收到,手头又没有在这个范围内的晶振,SO,我想到了功能彪悍的DSP,用DSP调出1000KHZ的晶振实在是太简单了,不止1000K,用DSP变个频率啥的也不错,但是DSP输出的数字量啊,想要实现模拟量还要转换器,我又没有,肿么办,既然我不能实现放音乐,那就实现干扰吧,于是就有了这篇博客了。

用DSP进行全中波调幅的任意频率进行干扰。

使用的器件如下:DSP评估板、315M使用2262/2272的无线收发模块、12864、一跟导线。

先来一张全家福:

上传的图片
  2012281143257.jpg [ 243.51 KB 1280×960 ] (缩略时请点击查看原图)

 

扩展接口使用:

使用PF0、PF1、PF2作为与12864的串口通信;

使用TMR1(PF10)作为频率输出;

使用PG8、PG9、PG10作为无线传输信号使用;

下面来一张显示界面:

再来一个示波器图像:



效果是在0.5M内可以对收音机AM(范围是540Khz~1600Khz)进行干扰,压制原有信号,如果不考虑失真(干扰还有考虑不失真?),可以接个三极管进行发射功率放大(现在手里没有),那么干扰距离将扩大,还有,天线我只是直接拿了一根普通的导线,如果用一个专业的天线那么效果会更好。


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/8 11:07:23
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

整个程序代码如下:

/*****************************************************************************
* NewProject.c
*****************************************************************************/
#include <CDEFBF592-A.H>
#include <DEFBF592-A.H>
#include <DEFBF59X_BASE.H>
#include <CCBLKFN.H>
#include <SYS exception.h="">  
#include <12864.c>        //包含基本的12864的程序
  
int     testkey(void);
void    ShowInfo(int x,int position);   //在某一位置显示变量
  
void main( void )
{
    int i;
    char a[10]={"当前频率:"},b[10]={"调整级数:"},c[4]={" KHz"};
    int tmp[4];
    int key,level,khz,tmp0,lastkey;     //key为按键level为调整单位khz为频率
      
    *pPORTF_FER  |=  PF10;              //天线
    *pTIMER1_CONFIG   = 0x0209;
    *pTIMER1_PERIOD   = 0x47868c0/2000/500;
    *pTIMER1_WIDTH   =  0x23c3460/2000/500;
    *pTIMER_ENABLE  |=  0x0002;
      
      
    *pPORTFIO_DIR |=0x000f;          
    *pPORTFIO &=0xFFFE;
    *pPORTFIO |=0x0001;
    *pPORTGIO_INEN=0x0700;  //PG8£¬PG9£¬PG10按键输入
  
    ssync();
    Init12864();
    level=1;
    khz=500;
    lastkey=0;
    //数据初始化
    Lcdwrite(0x80,0xf8);
    for(i=0;i<9;i++)
    {
        Lcdwrite(a[i],0xfa);
    }
    Lcdwrite(0x88,0xf8);
    for(i=0;i<9;i++)
    {
        Lcdwrite(b[i],0xfa);
    }
    Lcdwrite(0x96,0xf8);
    for(i=0;i<4;i++)
    {
        Lcdwrite(c[i],0xfa);
    }
    Delay(10);
    Lcdwrite(0x9e,0xf8);
    for(i=0;i<4;i++)
    {
        Lcdwrite(c[i],0xfa);
    }
    ShowInfo(khz,0x94);
    ShowInfo(level,0x9c);
      
      
    //画出基本界面
      
    while(1)
    {       //主控循环
        key=testkey();
        if(lastkey==key)
        {
            continue;
        }
        switch(key)
        {
            case 0:
                break;
            case 1:
                if(khz+level<=1800)
                {
                    khz +=level;
                    *pTIMER_DISABLE |=  0x0002;
                    *pTIMER1_PERIOD   = 0x47868c0/2000/khz;
                    *pTIMER1_WIDTH   =  0x23c3460/2000/khz;
                    *pTIMER_ENABLE  |=  0x0002;
                }
                break;
            case 2:
                if(khz-level>500)
                {
                    khz -=level;
                    *pTIMER_DISABLE |=  0x0002;
                    *pTIMER1_PERIOD   = 0x47868c0/2000/khz;
                    *pTIMER1_WIDTH   =  0x23c3460/2000/khz;
                    *pTIMER_ENABLE  |=  0x0002;
                }
                break;
            case 3:
                level=level*4;
                if(level>256)
                {
                    level=1;
                }
                break;
        }
        lastkey=key;
        ShowInfo(khz,0x94);
        ShowInfo(level,0x9c);    
    }
}
int     testkey(void)   //检测按键
{
    int x=*pPORTGIO;
    x=x&0x0f00; //排除干扰
    switch(x)
    {
        case 0x0000:
            return 0;
        case 0x0400:
            return 3;
        case 0x0200:
            return 2;
        case 0x0100:
            return 1;
    }
    return 0;
}
void    ShowInfo(int x,int position)    //在某一位置显示变量
{
    int i=0,tmp[4],tmp0=x;
    //初始化
    tmp[0]=tmp[1]=tmp[2]=tmp[3]=0;
    while(tmp0)
    {
        tmp[i]=tmp0%10;
        tmp0=tmp0/10;
        i++;
    }
    Lcdwrite(position,0xf8);
    for(i=3;i>=0;i--)
    {
        if(tmp[i]==0 && tmp0==0)
        {
            Lcdwrite(0x20,0xfa);
        }
        else
        {
            Lcdwrite(tmp[i]+0x30,0xfa);
            tmp0=1;
        }
    }
}
  
</SYS></CCBLKFN.H></DEFBF59X_BASE.H></DEFBF592-A.H></CDEFBF592-A.H>


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/8 11:07:51
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154302 Call, 1 Queries, Processed in 0.035156 second(s),