找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1478|回复: 20
收起左侧

AD5420无输出问题 附电路原理图和程序

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 5 黑币奖励! 每人限 2 次
ID:436963 发表于 2023-5-24 16:39 | 显示全部楼层 |阅读模式
程序使用官方例程,IOut无输出,原理图和程序在2楼
回复

使用道具 举报

ID:436963 发表于 2023-5-25 11:50 | 显示全部楼层
1684986414009.jpg

  1. #define SET_CLEAR() GPIO_SetBits(GPIOD, GPIO_Pin_0) // AD5420_CLEAR -> PD0
  2. #define CLR_CLEAR() GPIO_ResetBits(GPIOD, GPIO_Pin_0)

  3. #define SET_LATCH() GPIO_SetBits(GPIOB, GPIO_Pin_12) // AD5420_LATCH -> PB12
  4. #define CLR_LATCH() GPIO_ResetBits(GPIOB, GPIO_Pin_12)

  5. #define SET_SCL()   GPIO_SetBits(GPIOB, GPIO_Pin_13) // AD5420_SCLK  -> PB13
  6. #define CLR_SCL()   GPIO_ResetBits(GPIOB, GPIO_Pin_13)

  7. #define SET_SDO()   GPIO_SetBits(GPIOB, GPIO_Pin_15) // AD5420_SDIN  -> PB15
  8. #define CLR_SDO()   GPIO_ResetBits(GPIOB, GPIO_Pin_15)


  9. void AD5420_IO_Init(void)
  10. {
  11.     GPIO_InitTypeDef GPIO_InitStructure;
  12.     // SPI_InitTypeDef  SPI_InitStructure;

  13.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  14.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  15.     // RCC_APB1PeriphClockCmd(  RCC_APB1Periph_SPI2,  ENABLE );//SPI2时钟使能

  16.     // input:PD0->CLEAR; PB12->LATCH; PB13->SCLK; PB15->SDIN; output:PB14->SDIO; PD1->FAULT
  17.     // gpio配置
  18.     GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;       // PD0->CLEAR
  19.     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP; // 推挽输出
  20.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  21.     GPIO_Init(GPIOD, &GPIO_InitStructure);

  22.     GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15; // PB12->LATCH; PB13->SCLK; PB15->SDIN;
  23.     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;                        // 推挽输出
  24.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  25.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  26.     GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_1;    // PD1->FAULT
  27.     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_OD;//开漏输出
  28.     // GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU; // 上拉输入
  29.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  30.     GPIO_Init(GPIOD, &GPIO_InitStructure);

  31.     GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_14;   //  PB14->SDO
  32.     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU; // 上拉输入
  33.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  34.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  35.     GPIO_ResetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15);
  36.     GPIO_ResetBits(GPIOD, GPIO_Pin_0);
  37. }
  38. void AD5420_WriteData(uint8_t count, uint8_t *ad5420buf)
  39. {
  40.     uint8_t ValueToWrite = 0;
  41.     uint8_t i            = 0;
  42.     uint8_t j            = 0;

  43.     CLR_LATCH(); // 先拉低LATCH片选线

  44.     for (i = count; i > 0; i--)
  45.     {
  46.         ValueToWrite = *(ad5420buf + i - 1);
  47.         for (j = 0; j < 8; j++)
  48.         {
  49.             CLR_SCL();
  50.             if (0x80 == (ValueToWrite & 0x80))
  51.             {
  52.                 SET_SDO();
  53.             }
  54.             else
  55.             {
  56.                 CLR_SDO();
  57.             }
  58.             delay_ms(50);   
  59.             SET_SCL();
  60.             // delay_us(100);
  61.             ValueToWrite <<= 1;
  62.         }
  63.     }
  64.     CLR_SCL();
  65.     delay_us(500);
  66.     SET_LATCH();
  67.     delay_us(500);
  68.     CLR_LATCH();
  69. }

  70. void Ad5420_Init(void)
  71. {
  72.     ad5420buf[2] = 0x56; // 复位寄存器地址
  73.     ad5420buf[1] = 0x00;
  74.     ad5420buf[0] = 0x01;
  75.     AD5420_WriteData(3, ad5420buf);
  76.     delay_ms(100);

  77.     ad5420buf[2] = 0x55; // 可寻址控制寄存器地址
  78.     // ad5420buf[1] = 0x10;    //OUTEN=1,输出使能
  79.     ad5420buf[1] = 0x30; // REXT=1,外部电流设置电阻;OUTEN=1,输出使能;禁能数字压摆率控制;菊花链禁能
  80.     ad5420buf[0] = 0x05; // 4~20mA
  81.     // ad5420buf[0] = 0x06;  //0~20mA
  82.     // ad5420buf[0] = 0x07;  //0~24mA
  83.     AD5420_WriteData(3, ad5420buf);
  84.     delay_us(100);
  85. }
  86. void Write_Ad5420_Data(void)
  87. {
  88.     // Ad5420_Init();
  89.     ad5420buf[2] = 0x01;//数据寄存器
  90.     ad5420buf[1] = 0x00;
  91.     ad5420buf[0] = 0x00;//4mA
  92.     AD5420_WriteData(3,ad5420buf);

  93.     // ad5420buf[2] = 0x01; // 数据寄存器
  94.     // ad5420buf[1] = 0x60;
  95.     // ad5420buf[0] = 0x00; // 10mA
  96.     // AD5420_WriteData(3, ad5420buf);
  97.     delay_us(1000);

  98.     // ad5420buf[2] = 0x01;//数据寄存器
  99.     // ad5420buf[1] = 0xFF;
  100.     // ad5420buf[0] = 0xFF;//20mA
  101.     // AD5420_WriteData(3,ad5420buf);
  102.     // delay_us(2000);
  103.     GPIO_SetBits(GPIOD, GPIO_Pin_0);
  104.     delay_ms(200);

  105.     GPIO_ResetBits(GPIOD, GPIO_Pin_0);
  106.     delay_ms(200);

  107. }
复制代码


回复

使用道具 举报

ID:94031 发表于 2023-5-24 17:17 | 显示全部楼层
你应该把硬件,软件告诉大家,才能帮你分析
回复

使用道具 举报

ID:820444 发表于 2023-5-25 10:36 | 显示全部楼层
检查一下DVCC SELECT试试
回复

使用道具 举报

ID:94031 发表于 2023-5-25 13:35 | 显示全部楼层
牛牛牛牛牛牛 发表于 2023-5-25 11:50
#define SET_CLEAR() GPIO_SetBits(GPIOD, GPIO_Pin_0) // AD5420_CLEAR -> PD0
#define CLR_CLEAR() GP ...

你AVDD电压是多少?
回复

使用道具 举报

ID:94031 发表于 2023-5-25 13:51 | 显示全部楼层
牛牛牛牛牛牛 发表于 2023-5-25 11:50
#define SET_CLEAR() GPIO_SetBits(GPIOD, GPIO_Pin_0) // AD5420_CLEAR -> PD0
#define CLR_CLEAR() GP ...

量量15脚REFIN电压。
回复

使用道具 举报

ID:436963 发表于 2023-5-25 15:17 | 显示全部楼层
xuyaqi 发表于 2023-5-25 13:35
你AVDD电压是多少?

12v的模拟电路供电,3.3v的数字电路供电呀
回复

使用道具 举报

ID:436963 发表于 2023-5-25 15:21 | 显示全部楼层
xuyaqi 发表于 2023-5-25 13:51
量量15脚REFIN电压。

5v基准电压,没问题
回复

使用道具 举报

ID:436963 发表于 2023-5-25 15:23 | 显示全部楼层

用示波器测了一下这个时钟和数字引脚没问题
回复

使用道具 举报

ID:94031 发表于 2023-5-25 15:32 | 显示全部楼层
你根据什么得出IOut无输出。
回复

使用道具 举报

ID:436963 发表于 2023-5-25 15:40 | 显示全部楼层
xuyaqi 发表于 2023-5-25 15:32
你根据什么得出IOut无输出。

万用表串联IOUT和模拟地,测电流呀
回复

使用道具 举报

ID:94031 发表于 2023-5-25 16:04 | 显示全部楼层
牛牛牛牛牛牛 发表于 2023-5-25 15:40
万用表串联IOUT和模拟地,测电流呀

由于电流表内阻太小,造成芯片工作不正常,你串一个200欧电阻再试。
回复

使用道具 举报

ID:436963 发表于 2023-5-25 16:13 | 显示全部楼层
xuyaqi 发表于 2023-5-25 16:04
由于电流表内阻太小,造成芯片工作不正常,你串一个200欧电阻再试。

试了,270欧姆电阻,无输出,但是可以通过串口读出来数据寄存器的值,说明写进去,但是无输出
回复

使用道具 举报

ID:94031 发表于 2023-5-25 16:22 | 显示全部楼层
牛牛牛牛牛牛 发表于 2023-5-25 16:13
试了,270欧姆电阻,无输出,但是可以通过串口读出来数据寄存器的值,说明写进去,但是无输出

输出接电阻,用电压表测,是否电流表有问题。
回复

使用道具 举报

ID:94031 发表于 2023-5-25 16:28 | 显示全部楼层

量20脚BOOST有电压吗?是多少?
回复

使用道具 举报

ID:436963 发表于 2023-5-25 16:33 | 显示全部楼层
xuyaqi 发表于 2023-5-25 16:28
量20脚BOOST有电压吗?是多少?

跟这个引脚没啥关系吧
回复

使用道具 举报

ID:436963 发表于 2023-5-25 16:35 | 显示全部楼层
xuyaqi 发表于 2023-5-25 16:22
输出接电阻,用电压表测,是否电流表有问题。

万用表好着呢,按理来说数据写进到数据寄存器,就不需要管了呀,芯片就会生成数据寄存器的值调出来的电流,现在没有输出就很奇怪
回复

使用道具 举报

ID:94031 发表于 2023-5-25 16:50 | 显示全部楼层
牛牛牛牛牛牛 发表于 2023-5-25 16:33
跟这个引脚没啥关系吧

这个脚电压能知道内部工作电压是否加上,反馈情况。
回复

使用道具 举报

ID:94031 发表于 2023-5-25 16:52 | 显示全部楼层
牛牛牛牛牛牛 发表于 2023-5-25 16:35
万用表好着呢,按理来说数据写进到数据寄存器,就不需要管了呀,芯片就会生成数据寄存器的值调出来的电流 ...

你数据是希望输出多大电流?
回复

使用道具 举报

ID:436963 发表于 2023-5-25 16:59 | 显示全部楼层
xuyaqi 发表于 2023-5-25 16:52
你数据是希望输出多大电流?

4~20ma 的10ma
回复

使用道具 举报

ID:436963 发表于 2023-5-26 09:27 | 显示全部楼层
xuyaqi 发表于 2023-5-25 16:22
输出接电阻,用电压表测,是否电流表有问题。

感谢老哥,还真是这万用表电流档有点问题,测不出来,最后串联了一个电阻,测电压,然后算电流没问题,误差0.02
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表