stm32外部AD——ADC08060 驱动

我的毕设用的是外部的AD,型号是ADC0806,发现大部分大家都使用的是ARM的内部AD,没有搜到可植入代码的我,只能自己摸索,下面给大家分享一下外部AD的驱动方法

首先,我们需要研究一下AD的数据手册(时序图部分):

根据时序图,我们可以看出来,控制ADC0806的只有一个CLK,在CLK的低电平数据稳定,在CLK的高电平变换数据 。因此,我们只需要编写CLK的时序,数据就会自动读取。但是这里要注意一点,就是相对于上升沿来说,下降沿时刻的数据更加稳定。我们可以将下降沿作为数据读取的时刻,将上升沿作为数据变换的时刻。

编写AD的CLK的频率时,应该和需要做AD转换的数据速度一致

比如我的AD是要读取光谱仪输出的光谱,我的光谱仪输出数据的速度是1M,那么我的AD的CLK就是1M。用PWM生成时序的方法大家可以参考这一篇:stm32f4 生成PWM波_居安士的博客-CSDN博客_stm32产生pwm波

之后我们可以利用示波器,看一下自己是否正确生成了AD的clk,以及AD的clk是否对应着需要转换的数据 ,也就是看看是否一个数据对应一个CLK,(ADC0806是很高速的AD,因此只要我们对准了数据和CLK,AD转换后的数据不会漏掉),完成这一步之后,我们下面就是利用串口助手,看一下AD转换之后的数据。

在看之前,我们需要先把AD的多位输出拼成一个数。

由于ADC0806是8位输出,所以我们直接读8位输出的管脚,(管脚是0或者1),再把8位输出拼位

#define data0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)
#define data1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)
#define data2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)
#define data3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)
#define data4 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)
#define data5 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)
#define data6 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)
#define data7 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)

#define input data0 | (data1<<1) | (data2<<2) |(data3<<3)| (data4<<4) | (data5<<5) | (data6<<6) |(data7<<7) |0x00

这里的input就是AD转换之后的数据,接下来我们将input用串口进行传输

我们传输的时候可以计算一下波特率够不够(我的串口波特率最高2M)

如果是1M的速度的数据,一个数据有起始位+8位数据+停止位,所以按照bit来算10M/bit,而我的串口最高只有2M/bit,正常的串口传输根本不行。需要使用不需要占用CPU资源的DMA发送方式!

下一篇教大家串口使用DMA,以及数据的抽帧发送


下面再说一下,关于STM32内部AD和外部AD区别

主要是有两个区别(1)精度(2)IO口

外部AD高精度但是占IO口;内部AD低精度但是省IO口

所以大家选择的时候要看一下自己需要多高的AD精度:

AD精度指的是AD实际转换的结果和理想的计算结果之间的误差,也叫做积分非线性误差,符号是(INL) 单位是LSB

LSB=基准/2^AD位数 例如3V的基准 12位AD 那LSB=3/4096

在数据手册上面都会写明AD精度的大小,例如ADC0806,就是最高1.3LSB

AD对应IO口的占用还是非常明显的,8位并行就是8个IO口,如果大家的IO口数量不满足外部AD,也要选择使用内部AD 

 

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
根据引用\[1\]中提供的信息,可以使用STM32的HAL库来模拟SPI方式驱动W25Q128存储芯片。首先需要进行模拟SPI方式的IO配置,然后使用相应的驱动代码来实现功能。 W25Q128是一款SPI接口的NOR Flash芯片,具有128 Mbit的存储空间,相当于16M字节。NOR Flash是一种常用的用于存储数据的半导体器件,具有容量大、可重复擦写、按扇区/块擦除、掉电后数据可继续保存的特性。Flash的物理特性是只能写0,不能直接写1,写1需要进行擦除操作。 根据引用\[3\]中的实验,可以通过硬件接线将W25Q128模块与STM32连接起来,其中VCC接3.3V,CS接PA4,CLK接PA5,DO接PA6,DI接PA7。然后可以使用CubeMX进行相应的配置。 要获取W25Q128的ID,可以使用SPI通信协议来读取芯片的ID寄存器。具体的代码实现可以参考引用\[1\]中提供的驱动代码。 #### 引用[.reference_title] - *1* [STM32CubeMX | STM32使用HAL库模拟SPI方式驱动W25Q128存芯片](https://blog.csdn.net/qq153471503/article/details/106895933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32之SPI和W25Q128](https://blog.csdn.net/weixin_49001476/article/details/130909856)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值