发新帖我要提问
12
返回列表
打印
[STM32F1]

这个是怎么回事?

[复制链接]
楼主: pengf
手机看帖
扫描二维码
随时随地手机跟帖
21
pengf|  楼主 | 2021-6-3 23:31 | 只看该作者 回帖奖励 |倒序浏览
现在又用AD方式采集测试了一下,当平放时候,采集电压时2.5V,0度。 当按-90度方向放置传感器,采集值是0.54左右,是-80度左右,还是没到-90,跟SPI方式采集的现象基本一致。

使用特权

评论回复
22
pengf|  楼主 | 2021-6-3 23:33 | 只看该作者
计算应该没问题吧,0度到正90度的计算都正确,但是从传感器采集的数值,始终不能到-90度,只能到-80度左右。

使用特权

评论回复
23
pengf|  楼主 | 2021-6-3 23:35 | 只看该作者
void SCA61T_SpiInit(void)
{
  
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  
  /* Enable SPI3 and GPIO clocks */  
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3 , ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  
  /* Connect PXx to SPI_SCK */
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3);
  
  /* Connect PXx to SPI_MISO */
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3);
  
  /* Connect PXx to SPI_MOSI */
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3);  
  
  /* Configure SPI3 pins: SCK, MISO and MOSI */
  GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode         = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd         = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  
  /* SPI3 configuration */
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI3, &SPI_InitStructure);
  
  /* Enable SPI3 */
  SPI_Cmd(SPI3, ENABLE);
  
  /* Configure GPIO PIN for Lis Chip select */
  GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode         = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd         = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Deselect : Chip Select high */
  GPIO_SetBits(GPIOA, GPIO_Pin_15);
        
}

/*******************************************************************************
* Function Name  : SCA61T_SPI_SendByte
* Description    : Sends a Byte through the SPI interface and return the
*                  Byte received from the SPI bus.
* Input          : Byte : Byte send.
* Output         : None
* Return         : The received byte value
*******************************************************************************/
uint8_t SCA61T_SPI_SendByte(uint8_t byte)
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET);
  
  /* Send Half Word through the SPI peripheral */
  SPI_I2S_SendData(SPI3, byte);
        
  /* Wait to receive a Half Word */
  while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET);
  
  /* Return the Half Word read from the SPI bus */
  return (int8_t)SPI_I2S_ReceiveData(SPI3);
}


uint8_t SCA61T_ReadDataReg(uint8_t Reg, uint16_t* Data)
{
   
    uint8_t value_h=0,value_l=0;
    uint16_t value_temp=0;
               
    SCA61T_CS_LOW();
               
    SCA61T_SPI_SendByte(Reg);                                                                                //read x data command
    value_h = SCA61T_SPI_SendByte(0xFF);                                //read  hight 8 bit data        
    value_l = SCA61T_SPI_SendByte(0xFF);                                //read  low 8 bit data
   
    SCA61T_CS_HIGH();
               
    value_temp = ((uint16_t)value_h & 0x00FF);                                                                                                                                       
    value_temp = ((value_temp << 3) & 0x07F8) + (((value_l & 0xE0) >> 5) & 0x07);                //hight 8 bit + low 3 bit  = 11bit x data;
   
   *Data = value_temp;
               
    return MEMS_SUCCESS;
}

uint16_t SCA61T_Read_Xdata(void)
{
                uint16_t x_value=0;
               
                SCA61T_CS_HIGH();
                vTaskDelay(1);
                SCA61T_ReadDataReg(RDAX_REG,&x_value);
                my_uDelay(10);
                return x_value;
               
}

float SCA61T_Transformation_Angle(float senscomp)
{
                float angle=0.00f;
                uint8_t i=0;
                uint16_t x_value=0;
                uint32_t temp_value=0;
               
                for(i=0; i<3; i++)
                {
                    temp_value += SCA61T_Read_Xdata();
                }
                x_value = temp_value / i;
               
                if(x_value <= 1024 - SENS) x_value = 1024-SENS;
                if(x_value >= 1024 + SENS) x_value = 1024+SENS;
                angle=asinf(((float)x_value-1024.00)/senscomp);
               
                angle=angle*180/PI;
               
                return angle;
}

使用特权

评论回复
24
pengf|  楼主 | 2021-6-3 23:37 | 只看该作者
我的主芯片是STM32 传感器用的是 SCA61T-FA1H1G  测量范围是正负90度   

使用特权

评论回复
25
llljh| | 2021-6-3 23:40 | 只看该作者
使用校准算法了吗?

使用特权

评论回复
26
supernan| | 2021-6-3 23:42 | 只看该作者
推荐mpu6050芯片,这个计算角度。

使用特权

评论回复
27
wuhany| | 2021-6-3 23:43 | 只看该作者
这个不是ADC采样的角度传感器么

使用特权

评论回复
28
wenfen| | 2021-6-3 23:45 | 只看该作者
换算的方式不对,这个没有用过。

使用特权

评论回复
29
pengf|  楼主 | 2021-6-3 23:48 | 只看该作者
换算方式不对么????

这个是ADC采样和SPI采用两种方式,可通过硬件接线选择。  目前我这两种方式都尝试过,效果一样。

使用特权

评论回复
30
juventus9554| | 2021-6-3 23:50 | 只看该作者
角度换算有问题。

使用特权

评论回复
31
jlyuan| | 2021-6-3 23:53 | 只看该作者
将信号转换为基准,然后使用正负换算。

使用特权

评论回复
32
dengdc| | 2021-6-3 23:56 | 只看该作者
使用加速度传感器测量。

使用特权

评论回复
33
zhanghqi| | 2021-6-3 23:58 | 只看该作者
推荐axl345芯片,这个可以测量倾角。

使用特权

评论回复
34
pengf|  楼主 | 2021-6-7 20:59 | 只看该作者
目前已经定了这款芯片,就暂时先不换其它的了

使用特权

评论回复
35
pengf|  楼主 | 2021-6-7 21:04 | 只看该作者
jlyuan 发表于 2021-6-3 23:53
将信号转换为基准,然后使用正负换算。

不是很明白,能在详细的说一下么,谢谢

使用特权

评论回复
36
renyaq| | 2021-6-7 21:06 | 只看该作者
请问大佬能把你的代码发我一份吗?我现在初学SCA100T,遇到了一些问题,想参考一下你的代码

使用特权

评论回复
37
heweibig| | 2021-6-7 21:09 | 只看该作者
不知道使用STM32有没有将SCA61T enable起来?

使用特权

评论回复
38
zhenykun| | 2021-6-7 21:11 | 只看该作者
我也在enable SCA61T,看起来读取的数据有点不正常

使用特权

评论回复
39
jlyuan| | 2021-6-7 21:15 | 只看该作者
我最近在弄SCA100T,也出现了和你一样的情况,我测量x轴时不能够测量到-90(实际值218左右)我测量Y轴就能够测量到-90但是+90测不到(实际值1830左右+80)

使用特权

评论回复
40
pengf|  楼主 | 2021-6-7 21:19 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则