B i ? . 2022-06-29 22:34 采纳率: 0%
浏览 44
已结题

AD9226运用在TMS28335上的配置程序

刚入手DSP,最近要测量一个衰减信号,只用TMS28335上的ADC,速率不够,现在接触到AD9226,但配置不成功。
商家给的是32和FPGA 的例程,我根据例程改编,配置AD9226只需要时钟和打开GPIO口就行,但是一直呈乱码状态。
不知道是GPIO口配置问题,还是时钟问题。请求大家的帮助,或者有别的DSP高速adc推荐也可以。

衰减信号,是一个经降频后的1M信号,大概能维持20us,应该需要较高速的采样率。

img

我的配置代码如下

#include "ad9226.h"

void AD9926_Init(void)
{
    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK=1;


    GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;//AD9226_CLOCK
    GpioCtrlRegs.GPAMUX1.bit.GPIO13=0;//AD9226_D11
    GpioCtrlRegs.GPAMUX1.bit.GPIO14=0;//AD9226_D10
    GpioCtrlRegs.GPAMUX1.bit.GPIO15=0;//AD9226_D9
    GpioCtrlRegs.GPAMUX2.bit.GPIO16=0;//AD9226_D8
    GpioCtrlRegs.GPAMUX2.bit.GPIO17=0;//AD9226_D7
    GpioCtrlRegs.GPAMUX2.bit.GPIO18=0;//AD9226_D6
    GpioCtrlRegs.GPAMUX2.bit.GPIO19=0;//AD9226_D5
    GpioCtrlRegs.GPAMUX2.bit.GPIO20=0;//AD9226_D4
    GpioCtrlRegs.GPAMUX2.bit.GPIO21=0;//AD9226_D3
    GpioCtrlRegs.GPAMUX2.bit.GPIO22=0;//AD9226_D2
    GpioCtrlRegs.GPAMUX2.bit.GPIO23=0;//AD9226_D1
    GpioCtrlRegs.GPAMUX2.bit.GPIO24=0;//AD9226_D0

    GpioCtrlRegs.GPADIR.bit.GPIO12=1;
    GpioCtrlRegs.GPADIR.bit.GPIO13=0;
    GpioCtrlRegs.GPADIR.bit.GPIO14=0;
    GpioCtrlRegs.GPADIR.bit.GPIO15=0;
    GpioCtrlRegs.GPADIR.bit.GPIO16=0;
    GpioCtrlRegs.GPADIR.bit.GPIO17=0;
    GpioCtrlRegs.GPADIR.bit.GPIO18=0;
    GpioCtrlRegs.GPADIR.bit.GPIO19=0;
    GpioCtrlRegs.GPADIR.bit.GPIO20=0;
    GpioCtrlRegs.GPADIR.bit.GPIO21=0;
    GpioCtrlRegs.GPADIR.bit.GPIO22=0;
    GpioCtrlRegs.GPADIR.bit.GPIO23=0;
    GpioCtrlRegs.GPADIR.bit.GPIO24=1;

    GpioCtrlRegs.GPAPUD.bit.GPIO12=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO13=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO14=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO15=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO16=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO17=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO18=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO19=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO20=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO21=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO22=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO23=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO24=1;

    EDIS;

}

ADC输出如下

```c
        for(k=0; k<1024; k++)
        {
            AD9226_CLK_L;
            AdcBuf[k++] = ((GpioDataRegs.GPADAT.all)>>13)&0X0FFF;
            AD9226_CLK_H;
        }

32例程如下

#include <stm32f10x.h>
#include "ad9226.h"

//-----------------------------------------------------------------
// void AD9226_Init(void)
//-----------------------------------------------------------------
// 
// 函数功能: AD9226初始化
// 入口参数: 无 
// 返 回 值: 无
// 注意事项: 无
//
//-----------------------------------------------------------------
void AD9226_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  // 使能IO口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | 
                                                                    GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | 
                                                                    GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

}

ADC输出语句

for(i=0;i<Draw_Number;i++)
    {
        // AD9226_Data[300]得到的是GPIOB整个组的数据,AD9226是12位的,只需要GPIOB的低十二位
        adcx = data[i]&0x0FFF;
        // 模拟量与数字量的转换:A = (4095 - D)/4095*10000-5000,其中A为模拟量,D为数字量
        // A的范围为:±5V,为了让波形显示在Y轴的前200,将A范围设置为:0200,其中Y轴0对应5V,Y轴200对应-5V
        Draw_data[i] = (uint16_t)(((double)adcx/4095*10000)/50);
    }

```

  • 写回答

1条回答 默认 最新

  • 歇歇 2022-07-05 09:41
    关注

    DSP28335的ADC介绍
    F28335 片内集成的 ADC 转换模块的核心资源是一个 12 位的模数
    转换器。
    F28335 ADC 转换模块具有 16 个通道,由 2 个独立的 8 通道模
    块组成,这两个独立的 8 通道模块也可以级联成一个 16 通道模
    块。尽管 AD 转换器中有多个输入通道和两个序列发生器,但只有
    一个转换器。
    F28335 的 ADC 模块主要包括以下特点:
    –12 位模数转换
    –2 个采样保持器(S/H)
    –同时或顺序采样
    –模拟电压输入范围 0-3V
    –ADC 转换时钟频率最高可配置为 25MHz,采样带宽 12.5MHz
    –16 通道模拟输入
    –排序器支持 16 通道独立循环“自动转换”,每次转换通道可以软件编程选择。
    –16 个结果寄存器存放 ADC 转换的结果,转换后的数字量表示为:
    数字值=4095*(输入模拟值-ADCLO)/3,输入模拟值在 0-3V 之间

    评论

报告相同问题?

问题事件

  • 系统已结题 7月7日
  • 修改了问题 6月30日
  • 创建了问题 6月29日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog