AiBOM
首页 > 文章 > ADXL335 > STM32F030C8T6单片机与GY-61 ADXL335模块测角度
为您找到相关搜索
STM32F03 系列微处理器,STMicroelectronics 基于 STMicroelectronics ARM Cortex-M0 的 STM32F0 系列微控制器,包括入门级 ARM Cortex™ M0 32 位 RISC 内核。 STM32F030 超值型提供高速嵌入式存储器,具有各种增强型外设和 I/O。 有如 I2C、SPI 和 USART 等通信接口,以及 12 位 ADC、16 位计时器和一个高级控制 PWM 计时器。 ST 的 STM32F0 MCU 高级体系结构与 STM32 平台相结合,允许低功率应用设计,提供不同的封装类型。 具有嵌入式闪存和 SRAM 的 ARM Cortex™-M0 内核处理器与所有 ARM 工具和软件兼容。 STM32F030 ARM 处理器微控制器 (MCU) 适用于广泛的应用,包括应用控制和用户界面、手持设备、A/V 接收器、PC 外设、游戏平台、消费者电器用具、打印机、报警系统和 HVAC。 频率:48 MHz CPU 闪存:高达 64 K 字节 SRAM:高达 8 K 字节 电源:2.4 至 3.6 V 温度范围:- 40 至 +85 °C ### STM32F0 系列 32 位 ARM® Cortex®-M0 微控制器,STMicroelectronics STM32 F0 系列 32 位闪存微控制器 (MCU) 基于 ARM Cortex™-M0 核心;为嵌入式应用特别开发的核心。 STMicroelectronics 的 STM32 ARM Cortex™ M 处理器得益于 Cortex-M0 体系结构增强功能,包括数字信号处理、实时性能、低电压和低功率。 ST ARM® STM32 F0 主流系列提供 32 位性能,且特别适用于小项目或平台决策,具有易于使用功能。
意法半导体(ST)公司成立于1987年,是意大利SGS半导体公司和法国汤姆逊半导体合并后的新企业,1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。从成立之初至今,ST的增长速度超过了半导体工业的整体增长速度。自1999年起,ST始终是世界十大半导体公司之一。整个集团共有员工近50,000名,拥有16个先进的研发机构、39个设计和应用中心、15主要制造厂,并在36个国家设有78个销售办事处。 ST公司位于瑞士日内瓦,同时也是欧洲区以及新兴市场的总部;公司的美国总部设在德克萨斯州达拉斯市的卡罗顿;亚太区总部设在新加坡;日本的业务则以东京为总部;大中国区总部设在上海,负责香港、大陆和台湾三个地区的业务。 意法半导体是业内半导体产品线最广的厂商之一,其主要产品有:分立二极管与晶体管,复杂的片上系统(SoC)器件,包括参考设计、应用软件、制造工具与规范的完整的平台解决方案等3000多种产品。意法半导体是各工业领域的主要供应商,拥有多种的先进技术、知识产权(IP)资源与世界级制造工艺。 半导体产品大体上可分为两类:专用产品和标准产品。专用产品从半导体制造商以及用户和第三方整合了数量众多的专有IP,这些使其区别于市场上的其他产品,例如: 片上系统(SoC)产品,定制与半定制电路,专用标准产品(ASSP),如:无线应用处理器、机顶盒芯片及汽车IC,微控制器,智能卡IC,专用存储器,专用分立器件等,一旦客户在应用中使用了专用产品,如果不修改硬件和软件设计,通常就不能进行产品替换。 相反,标准产品是实现某种特定的常用功能的器件,这些器件一般由几个供应商提供。通常,制造商推出的标准产品可以被其他制造商的同类产品所取代,供应商间的差别主要在于成本与客户服务上。然而,一旦应用设计被冻结,标准器件在性能优化方面也将变成唯一的器件。标准产品包括:分立器件,如晶体管、二极管与晶闸管,功率晶体管,如MOSFET、Bipolar与IGBT,模拟电路构建模块,如运算放大器、比较器、稳压器与电压参考电路,标准逻辑功能与接口,众多存储器产品,如标准或串行NOR闪存、NAND闪存、EPROM/EEPROM及非易失性RAM,射频分立器件及IC。
查看详情
微控制器是将微型计算机的主要部分集成在一个芯片上的单芯片微型计算机。微控制器诞生于20世纪70年代中期,经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。例如电机控制、条码阅读器/扫描器、消费类电子、游戏设备、电话、HVAC、楼宇安全与门禁控制、工业控制与自动化和白色家电(洗衣机、微波炉)等。
查看详情
热门推荐
STM32f103ZET6 学习资料 (连载3 存储器和总线构架 )
STM32f103ZET6 学习资料 (连载3 存储器和总线构架 )
元器件的Datasheet PDF数据手册如何阅读?如何快速掌握产品引脚图及功能等关键信息?
元器件的Datasheet PDF数据手册如何阅读?如何快速掌握产品引脚图及功能等关键信息?
基于STC15w408AS的电子时钟的设计
基于STC15w408AS的电子时钟的设计

STM32F030C8T6单片机与GY-61 ADXL335模块测角度

少侠好走位 2019-12-11 07:39 1658次阅读 ADXL335 STM32F030C8T6

ADXL335 是一款小尺寸、薄型、低功耗、完整的三轴加速度计,提供经过信号调理的电压输出,能以最小±3 g 的满量程范围测量加速度。它可以测量倾斜检测应用中的静态重力加速度,以及运动、冲击或振动导致的动态加速度。用户使用 CX、CY和 CZ引脚上的电容 XOUT、YOUT和 ZOUT选择该加速度计的带宽。可以根据应用选择合适的带宽,X 轴和 Y 轴的带宽范围为 0.5 Hz 至 1600 Hz,Z 轴的带宽范围为0.5 Hz 至 550 Hz。

根据工程具体情况,我们使用STM32F030C8T6单片机连接模块进行角度的测量。


STM32F030C8T6单片机连接模块

考虑到测量角度的机械运动部分是垂直90°张开的,我们仅仅使用芯片的模块的4个引脚VCC、Y-out、Z-out、GND。

引脚说明

运用F0单片机的12位ADC转换单元。
F0单片机时钟配置:

void RCC_Configuration(void)
{
/*使能AHB时钟*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//使能APB2时钟
}

ADC引脚配置(使用了两块模块4个ADC通道):
void ADC_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;//GY61角度传感器YZ引脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN; //模拟模式
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;    //浮空无上下拉
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;//GY61角度传感器YZ引脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;        //模拟模式
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;    //浮空无上下拉
GPIO_Init(GPIOB,&GPIO_InitStructure);
}

MDA配置:
void DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel1);                              //DMA1通道1配置
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;//外设地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&RegularConvertedAdcValue;//内存地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;       //外设作为数据传输来源
DMA_InitStructure.DMA_BufferSize = 4;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器不变
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//数据宽度为16位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;          //循环模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High;      //设定DMA通道的优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;             //DMA通道没有设置为内存到内存传输
DMA_Init(DMA1_Channel1, &DMA_InitStructure);

DMA_Cmd(DMA1_Channel1, ENABLE);//DMA1_Channel1使能
}
ADC配置:
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;

ADC_DeInit(ADC1);
ADC_StructInit(&ADC_InitStructure);                       //初始化ADC结构体

ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;      //精度为12位
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;          //设置连续的装换工作模式
ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;      //数据为右对齐
ADC_InitStructure.ADC_ScanDirection=ADC_ScanDirection_Upward;//ADC的扫描方向Upward
ADC_Init(ADC1,&ADC_InitStructure);

ADC_ChannelConfig(ADC1,ADC_Channel_4,ADC_SampleTime_239_5Cycles);//转换ADC1通道4与239.5周期作为采样时间
ADC_ChannelConfig(ADC1,ADC_Channel_5,ADC_SampleTime_239_5Cycles);//转换ADC1通道5与239.5周期作为采样时间
ADC_ChannelConfig(ADC1,ADC_Channel_8,ADC_SampleTime_239_5Cycles);//转换ADC1通道8与239.5周期作为采样时间
ADC_ChannelConfig(ADC1,ADC_Channel_9,ADC_SampleTime_239_5Cycles);//转换ADC1通道9与239.5周期作为采样时间

ADC_GetCalibrationFactor(ADC1);                     //校准ADC1
ADC_DMARequestModeConfig(ADC1,ADC_DMAMode_Circular);//ADC_DMA请求模式配置
ADC_DMACmd(ADC1,ENABLE);                            //使能ADC的DMA传输
ADC_Cmd(ADC1,ENABLE);                               //使能ADC
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN));      //等待ADEN标志位
ADC_StartOfConversion(ADC1);                        //ADC1常规软件启动Conv
} 

ADC检查:
uint32_t ADC_Check(void)
{
uint8_t i;
for(i=0;i<8;i++)
{
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
ResultVolt +=(uint32_t)ADC_GetConversionValue(ADC1);
}
ResultVolt=ResultVolt >>3;
ResultVolt=(ResultVolt*3300)>>12;
  return ResultVolt;
}


配置初始化:
void Init_ALL(void)
{
RCC_Configuration();
ADC_GPIO_Configuration();
DMA_Config();
ADC_Configuration();
}


计算左右模块变化的角度值:
void datacollect_process(void)
{
/*获得各个通道ADC的值*/
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待传输完成否则第一位数据容易丢失
Y=RegularConvertedAdcValue[0];
Z=RegularConvertedAdcValue[1];
y=RegularConvertedAdcValue[2];
z=RegularConvertedAdcValue[3];

Y-=0X0800;//(1.65*4096)/3.3=2048
Z-=0X0800;//(1.65*4096)/3.3=2048
y-=0X0800;//(1.65*4096)/3.3=2048
z-=0X0800;//(1.65*4096)/3.3=2048

T=Y;
K=Z;
t=y;
k=z;

left_pitch=(float)((atan2(K,T)*180)/3.14159265);//GY61传感器角度计算
right_pitch=(float)((atan2(k,t)*180)/3.14159265);//GY61传感器角度计算
}


温馨提示:本文由网友投稿,经网站编辑整理发布,转载请注明出处和本文链接,如有侵犯您的权益,请及时与我们联系,我们将核实情况后进行相关处理!
相关推荐
单片机STM32F030C8T6引脚图和功能定义介绍,封装资料
单片机STM32F030C8T6引脚图和功能定义介绍,封装资料
STM32F030C8T6基于ARM®的32位MCU,最高256 KB闪存,定时器、ADC、通信接口、2.4-3.6 V操作,48脚,采用LQFP技术封装,国内用的比较多一款单片机型号。
STM32F030C8T6 / STM32 12372
关注

关注采芯网

回复型号,查元件信息

采芯网 FindIC 用户意见反馈
问题类型
网站页面问题或建议
数据问题或错误
元器件采购询价
其他
意见建议
联系方式
反馈和联系