AD2S1210调试使用记录

项目场景:

电机旋变硬件解码芯片使用记录


硬件配置:

1、电机内部励磁线圈如下图示,励磁转子也存在极对数,注意区分,且极对数同电机极对数有有一定的比例关系。

旋变励磁线圈

下面就是啃手册了,这是一个嵌入式工程师的家常便饭了。。。。。。。

2、硬件注意事项,根据手册硬件波形调理电路需满足如下条件,调节放大增益来实现。需要硬件外围电路支持,将励磁激励的输出电压去放在合适的电压范围内,可以预防报错,影响使用即获得的结果。

公司的产品用的旋转变压器励磁激励是10KHz,即AD2S1210的输出激励EXC配置为10K。

为节约端口,设计采用SPI通讯的方式来实现。这里采用的是12位的分辨率。即如下所示。

且在软件中需要将地址0X92寄存器的分辨率对应写上。

如下,按照寄存器进行配置即可。

软件设计:

1、这里使用的是STM32G4系列的单片机进行的SPI通讯设计。系统时钟位170MHz,图形化配置如下:

 

需要注意的就是SPI的极性配置这里CPOL=0,CPHA=1。

废话不多说了上代码。

(1)基础配置

//Register Map
#define	POSITIONMSB		0x80
#define	POSITIONLSB		0x81
#define	VELOCITYMSB		0x82
#define	VELOCITYLSB		0x83
#define	LOSTHRES		0x88
#define	DOSORTHRES		0x89
#define	DOSMISTHRES		0x8A
#define	DOSRSTMXTHRES	0x8B
#define	DOSRSTMITHRES	0x8C
#define	LOTHITHRES		0x8D
#define	LOTLOTHRES		0x8E
#define	EXFREQUENCY		0x91
#define	CONTROL			0x92
#define	SOFTRESET		0xF0
#define	FAULT			0xFF
#define POS_VEL			0x00 

//复位
#define RESET_H  HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET)
#define RESET_L  HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET)
//CS片选
#define PCS_H	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_SET)
#define PCS_L	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_RESET)
//边沿触发逻辑输入
#define NWR_H	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET)
#define NWR_L	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET)
//采样
#define SMAPLE_H        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET)
#define SMAPLE_L	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET)
//故障读取
#define DOS	HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11)
#define LOT     HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)
//模式切换
#define A0_H	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_1,GPIO_PIN_SET)
#define A0_L	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_1,GPIO_PIN_RESET)
#define A1_H	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET)
#define A1_L	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET)
//分辨率配置
#define RES0_H	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET)
#define RES0_L	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET)
#define RES1_H	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET)
#define RES1_L	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET)

(2)SPI数据处理

void AD2S2S1210_ModeCfg(uint8_t ModeConfig)
{
  //Ax配置
  switch(ModeConfig)
  {
    case Mode_POSIT:
            A0_L;A1_L;
            break;
    case Mode_SPEED:
            A0_L;A1_H;
            break;
    case Mode_COFIG:
            A0_H;A1_H;
            break;		
    default:
            A0_H;A1_H;
            break;	
  }
  AD2S1210_Delay(4);
  SMAPLE_H;
  AD2S1210_Delay(1);
  SMAPLE_L;
  AD2S1210_Delay(1);
}
void AD2S1210_Init()
{
  //电阻配置
  RES0_L;RES1_H;  //配置为12位
  A0_H;A1_H;      //配置模式
  
  PCS_L;
  SMAPLE_L;
  
  AD2S1210_WRITE(CONTROL,0x7A);        //控制寄存器配置,主要配置分辨率
  AD2S1210_WRITE(EXFREQUENCY,0X28);    //设置ESC驱动频率   250 * 40 =10KHz
  AD2S1210_WRITE(DOSRSTMXTHRES,0x7e);  //DOS复位最大阈值
  AD2S1210_WRITE(DOSRSTMITHRES,0x02);  //DOS复位最小阈值
  AD2S1210_WRITE(LOSTHRES,0x01);       //复位最小阈值
  AD2S1210_WRITE(DOSORTHRES,0x7f);     //DOS超量程阀值
  AD2S1210_WRITE(DOSMISTHRES,0x7f);    //DOS失配阀值
  AD2S1210_Delay(0xfff);
  
  SMAPLE_H;
  SMAPLE_L;
  AD2S1210_Delay(0x1ff);
  AD2S1210_REFAULT(); //复位错误
  AD2S1210_Delay(0xff);
  PCS_H;    仅有片选功能
}

//AD2S1210 硬件复位
void AD2S1210_RESET(void)
{
  SMAPLE_H;
  SMAPLE_L;
  RESET_L;
  AD2S1210_Delay(0x5ff);
  RESET_H;
  AD2S1210_Delay(0xff);
}

//AD2S1210复位错误----3us
void AD2S1210_REFAULT()
{
  AD2S2S1210_ModeCfg(Mode_COFIG);
  SMAPLE_H;
  AD2S1210_Delay(0x1);
  SMAPLE_L;
  AD2S1210_Delay(0x1);
  AD2S1210_READ(0xFF);
  SMAPLE_H;
  AD2S1210_Delay(0x1);
  SMAPLE_L;
  AD2S1210_Delay(6);
}


void AD2S1210_Delay(uint32_t nCount) //nCount =1时 执行时间为183ns   步长22ns
{ 
  for(; nCount != 0; nCount--); 
} 

//写入
void AD2S1210_WRITE(uint8_t addr,uint8_t data)
{
  uint8_t temp =addr;
  uint8_t rData=0;

  NWR_L;
  AD2S1210_Delay(1);
  HAL_SPI_TransmitReceive(&hspi3,&temp,&rData,1);
  NWR_H;
  AD2S1210_Delay(0x06);
  NWR_L;
  AD2S1210_Delay(1);
  temp = data;
  HAL_SPI_TransmitReceive(&hspi3,&temp,&rData,1);
  NWR_H;
  AD2S1210_Delay(0x20);
}

//配置模式读取
uint8_t AD2S1210_READ(uint8_t addr)
{
  uint8_t temp=addr;
  uint8_t buff=0;
  uint8_t temp2;
  NWR_L;
  AD2S1210_Delay(0x01);
  HAL_SPI_Transmit(&hspi3,&temp,1,1);
  NWR_H;
  AD2S1210_Delay(0x02);
  
  buff=0;
  NWR_L;
  temp2 = HAL_SPI_TransmitReceive(&hspi3,&temp,&buff,1,1);
  NWR_H;
  AD2S1210_Delay(0x2);

  return temp2;
}

//普通模式读取
uint16_t AD2S1210_CommRead(uint8_t *err)
{
  unsigned char tbuff[3]={0xFF,0xFF,0xFF};
  unsigned char rbuff[3];

  NWR_L;
  AD2S1210_Delay(1);
  HAL_SPI_Receive(&hspi3,buff,3,2);
  NWR_H;
  AD2S1210_Delay(1);
  *err = rbuff[2];

  return ((rbuff[0]<<8)+rbuff[1]);
}

如上所所示,即位驱动程序的全部,在可靠性验证时,可以切换模式,如500ms配置为配置模式,读取写入的参数,另500ms配置为只读模式,读取位置/速度和故障信息,验证通讯的可靠性。

自然也可以使用DMA进行配置AD2S1210的读取方式,暂未研究透彻,不在赘述。

参考

可参考其手册,高亮出为使用时的注意事项。

汽车电子笔记之-013:旋变硬解码ADI芯片AD2S1210使用记录(从零开始到软件实现)-CSDN博客

AD2S1210中文数据手册(中文版)-CSDN博客

深度学习图像预处理是指在将图像输入深度学习模型之前对图像进行一系列的处理操作,以提高模型的性能和效果。以下是一些常用的深度学习图像预处理方法及其作用: 1. 图像缩放:将图像的尺寸调整为模型所需的输入尺寸。这可以避免模型因为输入尺寸不匹配而无法正常工作。 2. 图像裁剪:根据目标任务的需求,对图像进行裁剪,以提取感兴趣的区域或去除无关的背景。这有助于减少噪声和冗余信息,提高模型的鲁棒性和泛化能力。 3. 图像旋转和翻转:通过旋转和翻转图像,可以增加数据的多样性,提高模型的鲁棒性和泛化能力。例如,对于物体识别任务,可以通过旋转和翻转来模拟不同角度和视角下的物体。 4. 图像归一化:将图像的像素值进行归一化处理,使其落在一个特定的范围内(例如0到1或-1到1)。这有助于加速模型的训练过程,并提高模型对光照和颜色变化的鲁棒性。 5. 图像增强:通过应用一系列的图像增强技术,如亮度调整、对比度增强、颜色平衡等,可以增加图像的清晰度和对比度,提高模型的性能和效果。 6. 数据增强:通过对图像进行随机变换,如平移、旋转、缩放、剪切等,可以生成更多的训练样本,增加数据的多样性,提高模型的泛化能力。 7. 图像去噪:通过应用去噪算法,如高斯滤波、中值滤波等,可以减少图像中的噪声,提高模型对细节的感知能力。 8. 图像标准化:对图像进行标准化处理,使其具有相似的统计特性。这有助于加速模型的训练过程,并提高模型的收敛性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值