微芯MCP3202的使用和编程

[复制链接]
1736|11
 楼主| 宸心尽向紫烟来 发表于 2019-4-11 14:47 | 显示全部楼层 |阅读模式
有没有大神可以教我MCP3202的编程方法,可以给钱啊
zhuomuniao110 发表于 2019-4-12 18:36 | 显示全部楼层
mcp3202是Microchip(微芯科技)公司产的一款ADC芯片,成本低,使用方便。本文主要分析软件使用方面的特点及方法。

1.1器件特点

1)转换精度:12bit

2)转换速率:100ksps(最快)

3)伪差分输入

4)4线spi控制接口

5)使用简单,无须复杂的寄存器配置,直接通过spi获取转换数据

1.2应用范围

1)传感器

2)过程控制

3)数据采集

4)电池供电系统

1.3器件基础框图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
zhuomuniao110 发表于 2019-4-12 18:36 | 显示全部楼层
.器件使用(软件)

2.1时序图

驱动mcp3202,主要是实现一个spi总线,首先看改器件时序图,如下。

时序图分析:

1)片选线、时钟线与普通spi一致;

2)数据输入(SDI):第一位为启动位,固定为1,第2、3位为配置选择位,具体选择信息如下;第4位MSBF,设置数据格式,高位/低位在前,一般情况下我们都使用“高位在前”的模式;后面的数据则为无关位;

3)数据输出(SDO):从第6个时钟周期开始,返回的数据为有效数据,共12位,高位在前。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
zhuomuniao110 发表于 2019-4-12 18:37 | 显示全部楼层
2.2器件使用

1)对应这类非标spi,可以通过模拟时序实现;

2)通过硬件spi实现,其中此器件手册也有专门介绍如何通过硬件spi驱动(其他像ADI的器件就很少有说明),如图。

a)读一个完整的12bit数据至少需要17个时钟周期,故意以8bit模式的spi下,最少需要24个时钟周期(3字节);

b)根据返回数据有效位,通过“移位”和“按位与”的方式提取有效数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
zhuomuniao110 发表于 2019-4-12 18:38 | 显示全部楼层
2.3驱动代码

以stm32f1为例,以“spi抽象/硬件spi”中的spi封装代码为基础,驱动mcp3202。
  1. #include "spi_core.h"
  2. #include "spi_hw.h"

  3. static struct spi_dev_device mcp3202_spi_dev;
  4. static struct spi_bus_device spi_bus0;

  5. static void spi0_cs(unsigned char state)
  6. {
  7.      if (state)
  8.           GPIO_SetBits(GPIOC, GPIO_Pin_4);
  9.      else
  10.           GPIO_ResetBits(GPIOC, GPIO_Pin_4);
  11. }

  12. void mcp3202_init(void)
  13. {
  14.         GPIO_InitTypeDef GPIO_InitStructure;
  15.        
  16.         //spi cs
  17.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC ,ENABLE);
  18.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                               
  21.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  22.         GPIO_SetBits(GPIOC, GPIO_Pin_4);       
  23.        
  24.         //device init
  25.         stm32f1xx_spi_init(&spi_bus0,8,0,0);
  26.         mcp3202_spi_dev.spi_cs         = spi0_cs;
  27.         mcp3202_spi_dev.spi_bus = &spi_bus0;                       
  28. }

  29. u16  mcp3202_read(u8 mode)
  30. {
  31.         u8 send_buff[3],recv_buff[3];
  32.        
  33.         send_buff[0] = 0x01;
  34.         send_buff[1] = mode;
  35.         send_buff[2] = 0x00;
  36.         spi_send_recv(&mcp3202_spi_dev,send_buff,recv_buff,3);
  37.        
  38.         return (((recv_buff[1] << 8) | recv_buff[2])&0x0fff);
  39. }
zhuomuniao110 发表于 2019-4-12 18:38 | 显示全部楼层
代码简要分析:

 

1)stm32f1代码配置查看附件源码,配置参数与前面使用的一致,对于其他spi器件也是,几乎无须更改,注意速率和模式即可;

2)片选初始化;

3)用到的spi封装接口是“spi_send_recv”,通过器件时序图即可看出;

4)send_buff:第一字节0x01是启动位,第二字节mode为模式,第三字节为无关位,设置为0即可;

5)recv_buff:接收返回数据,并提取有效的12位数据。
zhuomuniao110 发表于 2019-4-12 18:38 | 显示全部楼层
网上帮你找的,你试试。
 楼主| 宸心尽向紫烟来 发表于 2019-4-13 23:19 | 显示全部楼层
zhuomuniao110 发表于 2019-4-12 18:38
网上帮你找的,你试试。

好的,我试试,太感谢你了
externally 发表于 2019-4-15 21:26 | 显示全部楼层
网上应该找得到应用例程。
yiy 发表于 2019-4-16 22:09 | 显示全部楼层
这是什么单片机
 楼主| 宸心尽向紫烟来 发表于 2019-4-19 19:33 | 显示全部楼层
yiy 发表于 2019-4-16 22:09
这是什么单片机

AD转换芯片
 楼主| 宸心尽向紫烟来 发表于 2019-4-19 19:33 | 显示全部楼层
externally 发表于 2019-4-15 21:26
网上应该找得到应用例程。

嗯嗯,现在我已经会了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

87

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部