这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » (NRF24L01驱动成功)hanshuyujifen2的 ARM DIY进程贴

共191条 18/20 |‹ 15 16 17 18 19 20 跳转至
高工
2012-06-08 12:18:57     打赏
171楼
ENC-03MB模块(单轴陀螺仪)驱动成功

ENC-03MB是小日本产的单轴陀螺仪。有以下几个特点:
   1、供电电压 2.7~5.25
   2、参考电压 1.25~1.45  典型值为1.35V
   3、比例系数 0.67mV/deg/s
   4、静态输出 Vref+/-0.6

需要的Vref为1.35V  手上没有咋办?
站不是搞定了DAC吗?使用DAC输出1.35V参考电压供ENC模块使用
步骤如下:
1、使用前面做过的的DAC实验,输出1.35V电压
   使用定时器触发:My_DAC2_Init();将DAC数据寄存器的值设置为0x69
   输出后使用三用表测试下,输出1.34V多点
2、ADC初始化
   前面也提到过,当时没有电压可测试,值测试了3.3V和0V的输出。
   今天拿来实验。由于使用的是DMA方式,只需要读数据就OK了
3、将读出的数据进行简单的滤波串口打印
   很简单的滤波,取100次采集到数据的平均值
   卡尔曼滤波效果比较不错,可惜俺不会。
       while(1)
    {
        //if(ADC_ConvertedValue>2000)
       
        adctemp+= ADC_ConvertedValue;
        i++;
        //进行简单的滤波后输出
        if(i == 100)
        {
            printf("%d\r\n",adctemp/100);
            i = 0;
            adctemp = 0;
        }
    }


摇晃陀螺仪时候的输出:

高工
2012-06-08 12:43:13     打赏
172楼
简单  就三个寄存器

工程师
2012-06-08 13:18:52     打赏
173楼
恭喜啊,又出新成果了!

高工
2012-06-08 13:28:45     打赏
174楼
俺们今天休息。都出去看桂林山上了,就俺在家玩这东西。。。

高工
2012-06-11 21:29:19     打赏
175楼
参考SPI1代码
但有个地方必须改好
初始化代码如下
void SPI2_Init(void)
{     
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    SPI_I2S_DeInit(SPI2);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );
    //SPI2挂在APB1上,别搞错了   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
      
    /* Configure SPI2 pins: SCK, MISO and MOSI */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;      //分别对应SPI2_CLK、SPI3_MISO、SPI4_MOSI
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
   
    /* SPI1 configuration */
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;        //设置SPI工作模式:设置为主SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;        //设置SPI的数据大小:SPI发送接收8位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//SPI_CPOL_High;        //选择了串行时钟的稳态:时钟悬空高
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//SPI_CPHA_2Edge;    //数据捕获于第二个时钟沿
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;        //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;        //定义波特率预分频的值:波特率预分频值为256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;    //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7;    //CRC值计算的多项式
    SPI_Init(SPI2, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
   
    /* Enable SPI1  */
    SPI_Cmd(SPI2, ENABLE); //使能SPI外设

             
}

高工
2012-06-11 21:30:24     打赏
176楼
收发数据代码基本相同
u8 SPI2_ReadWriteByte(u8 TxData)
{       
    u8 retry=0;                 
    //while((SPI1->SR&1<<1)==0)//等待发送区空   
    /* Loop while DR register in not emplty */
    while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
    {
        retry++;
        if(retry>200)return 0;
    }             
    /* Send byte through the SPI1 peripheral */
    SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个数据
    retry=0;

    /* Wait to receive a byte */
    while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); //检查指定的SPI标志位设置与否:接受缓存非空标志位
    {
        retry++;
        if(retry>200)return 0;
    }                                 
    /* Return the byte read from the SPI bus */
    return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据                   
}

高工
2012-06-11 21:40:30     打赏
177楼
为无线nrf24l01做准备。。。

高工
2012-06-12 21:24:11     打赏
178楼
实验两天,没搞定NRF24L01。
一直是检测不到无线模块

今天那三用表测试了下,发现PB15和NRF的6号脚不通
PG8和NRF的8号脚不通。PG8还直接连到了地上

唉  郁闷了
没带拍针,还不好飞线。。。
只能放弃了。

不过模块测试是正常的

助工
2012-06-13 13:11:05     打赏
179楼
NRF24L01的8号脚(IRQ)是接PG6的,EEPW的原理图没错,但PCB板有错。

高工
2012-06-13 15:04:14     打赏
180楼
晕,这不是坑人吗!

共191条 18/20 |‹ 15 16 17 18 19 20 跳转至

回复

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