MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)
MCP4921简介
MCP4921 是一款由 Microchip Technology 生产的单通道、12 位数模转换器 (DAC),具有外部电压参考引脚和 SPI 接口。它具有以下主要特点:
12 位分辨率:提供高精度的模拟输出。
单通道电压输出:适用于需要单一输出的应用。
外部电压参考引脚:允许用户使用外部参考电压以提高灵活性。
低功耗:典型工作电流为 175µA,非常适合便携式和电池供电的应用。
SPI 接口:支持高达 20 MHz 的时钟频率,便于与微控制器通信。
快速设定时间:输出设定时间为 4.5 µs,适用于需要快速响应的应用。
多种封装:提供 PDIP、SOIC、MSOP 和 DFN 封装,适应不同的设计需求。
MCP4921 适用于消费类和工业应用,如设定点控制、偏移调整和传感器校准等。
点击查看MCP4921中文数据手册
MCP4921电路设计
MCP4921芯片的外围电路相对简单,实际参考Mikro发布的DAC芯片模块进行设计。
点击查看参考电路图
根据参考电路绘制出电路图如下:
在完成对MCP4921的电路设计后,就可以对其进行驱动,使用到的单片机为PIC18F56Q71单片机。
PIC18F56Q71 是 Microchip Technology 推出的 8 位微控制器,专为高带宽、混合信号和传感器应用设计。以下是其主要特点:
集成运算放大器:内置两个运算放大器,支持 5.5 MHz 增益带宽。
12 位差分 ADC:具有计算和上下文切换功能,支持高达 43 个外部通道。
多种 DAC:包括一个 10 位 DAC 和两个 8 位 DAC。
高速模拟比较器:提供快速响应的模拟信号比较。
模拟外设管理器:优化使用模拟外设的功耗。
8 位信号路由端口:用于连接数字外设。
多种定时器和 PWM:包括三个 16 位双 PWM 输出和两个 16 位定时器。
直接内存访问 (DMA):四个 DMA 控制器,支持高效数据传输。
低功耗模式:包括睡眠、打盹和空闲模式,优化功耗。
灵活的引脚选择:支持外设引脚选择 (PPS),便于数字信号的引脚映射。
PIC18F56Q71 适用于多种应用场景,如 LED 照明、预测性维护、医疗设备、家居自动化、工业过程控制、汽车和物联网 (IoT) 等。
点击查看PIC18F56Q71数据手册
MCP4921驱动代码
使用MPLAB X IDE v6.20进行开发,代码生成工具为MCC v5.5.1。新建工程后,对单片机的硬件SPI进行配置。
在Device Resource中勾选SPI_Host。
勾选完成后,在Project Resource与Builder中就可以看到SPI_Host已经添加上了。
点击Pin Grid View选项卡,选择SPI对应端口。(这里选择PORTC3为SCK,PORTC4为SDO1,PORTC6为CS口)
并对管脚进行配置:
配置完管脚之后,双击Builder选项卡中的SPI1_Host标签,并对SPI1_Host进行配置:
配置完成后点击Project Resource选项卡里的Generate生成代码。
根据MCP4921的数据手册,编写用户代码。
总共命令为16位数据,分为高八位和低八位,可使用SPI1_BufferWrite()函数来发送命令,代码如下:
#define DAC_4_BIT_DATA 0x0F
#define DAC_8_BIT_DATA 0xFF
#define DAC_APPLY_SETTINGS 0x30
uint8_t cmd[2];
uint16_t vout = 0;
int main(void)
{
SYSTEM_Initialize();
// If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
// If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global Interrupts
// Use the following macros to:
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();
// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();
SPI1_Open(HOST_CONFIG);
while(1)
{
int i = 0;
for(i = 0; i< 4095;i++)
{
cmd[ 0 ] = ( i >> 8 ) & DAC_4_BIT_DATA;
cmd[ 0 ] |= DAC_APPLY_SETTINGS;
cmd[ 1 ] = i & DAC_8_BIT_DATA;
CS_SetLow();
SPI1_BufferWrite(cmd,2);
CS_SetHigh();
__delay_ms(100);
}
}
}
本段代码的意思为,让MCP4921芯片输出0-3.3V的电压。12位DAC芯片的分辨率为4095。
总结
使用MCC对PIC单片机开发大大减小了开发者的工作量,应用起来非常简单。但是要熟练的运用MCC还需要大家多多使用Microchip的产品进行练习。MCP4921芯片的开发也非常的简单,Microchip公司的芯片使用便捷,外围电路简单,本地化做的非常好,中文数据手册翻译的非常专业,在开发时应多多应用Microchip公司的产品。
标签:DAC,芯片,引脚,PIC,硬件,SPI,单片机,MCP4921 From: https://blog.csdn.net/qq_34436979/article/details/143155659