1. HT7036计量芯片与SPI通信基础
第一次接触HT7036这款计量芯片时,我和大多数工程师一样有点懵。厂家没提供技术支持,网上资料零零散散,只能硬着头皮啃数据手册。这里给新手朋友一个忠告:拿到任何芯片,第一件事就是通读数据手册,这个习惯能让你少走很多弯路。
HT7036是款三相电能计量芯片,内部集成了6个ADC差分通道,专门处理电压、电流的采样和计算。最棒的是它自带计量算法,我们MCU只需要通过SPI接口读取数据就行,不用自己折腾复杂的电能计算算法。这就好比餐厅里大厨已经把菜做好,我们只需要端上桌品尝即可。
SPI通信是HT7036与MCU对话的唯一方式。SPI是一种同步串行通信协议,需要四根线:SCK(时钟)、MOSI(主机发送)、MISO(主机接收)、CS(片选)。HT7036的SPI接口支持最高2MHz的通信速率,对于电能数据采集来说完全够用。
在实际接线时,要特别注意引脚对应关系。HT7036的25脚是SCK,26脚是MISO,27脚是MOSI,28脚是CS。记得加上拉电阻,确保信号稳定性。我曾经因为没加上拉电阻,通信时不时丢数据,排查了好久才发现问题。
2. SPI通信时序配置详解
SPI时序配置是个技术活,配置不对根本读不到数据。HT7036支持模式0和模式3,我建议直接用模式0(CPOL=0,CPHA=0),这是最常用的模式。
先说说时钟极性(CPOL)和时钟相位(CPHA)。CPOL=0表示时钟空闲时为低电平,CPOL=1则是高电平。CPHA=0表示在时钟的第一个边沿采样,CPHA=1是在第二个边沿采样。HT7036默认支持模式0,也就是CPOL=0,CPHA=0。
在实际配置时,STM32的SPI初始化可以这样写:
void SPI_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRC


410

被折叠的 条评论
为什么被折叠?



