在公司的项目中,我们使用了TI的DRV8860驱动芯片。
我们软件的设计思路是:将芯片的ENABLE一直拉高。在发送数据前先将LATCH脚和CLK脚拉低。接着就是利用DIN脚进行8位数据的串行传输(CLK上升把数据clock到寄存器)。再把LATCH脚拉高。
我们在实验时,全部传输1(即0xff),理想输出是output输出全部低电平。可是不管我们怎么去传输,output始终没反应。也就是高阻状态。
另外,fault脚,是不是在输出有错误时,会变低
#define _SCL_H GPIO_SetBits(GPIOC, GPIO_Pin_10) /// CLK
#define _SCL_L GPIO_ResetBits(GPIOC, GPIO_Pin_10) ///
#define _DIN_H GPIO_SetBits(GPIOC, GPIO_Pin_11) /// DIN
#define _DIN_L GPIO_ResetBits(GPIOC, GPIO_Pin_11) ///
#define _EN_H GPIO_SetBits(GPIOC, GPIO_Pin_8)/// ENABLE
#define _EN_L GPIO_ResetBits(GPIOC, GPIO_Pin_8)///
#define _LATCH_H GPIO_SetBits(GPIOC, GPIO_Pin_9) /// LATCH
#define _LATCH_L GPIO_ResetBits(GPIOC, GPIO_Pin_9) ///
void Gpio_DO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
_EN_H;
}
void Send_DATA8(unsigned char Data)
{
unsigned char i;
_SCL_L;
for (i = 8; i != 0; i--) {
(Data & 0x80) ? _DIN_H : _DIN_L;
Delay(1);
_SCL_H;
Data = (Data << 1);
Delay(1);
if (i > 1)
_SCL_L; // left CLK HIGH at after the last data transfered
}
}
void Write_data(unsigned char Data)
{
unsigned char data;
data = Data;
_LATCH_H;
Delay(1);
_LATCH_L;
_SCL_L;
Delay(2);
Send_DATA8(data);
Delay(1);
_LATCH_H;
// Delay(1);
}
另附原理图