TI中文支持网
TI专业的中文技术问题搜集分享网站

drv8301故障反馈引脚的读取问题

(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW){	usDelay(2000);	if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)	{		GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301		HAL_disablePwm(halHandle);		for(j=0;j<10;j++)		{			HAL_LED(halHandle,3);//DRV故障,闪灯警示			usDelay(10000);			HAL_LED(halHandle,1);//Gpio34亮			usDelay(10000);		}	}}

但是在正常情况下,程序会执行这段代码,这是为什么呢?

我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。

然而却不是这样,求各位大神指教,急急急!!!

desheng yang:if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
        {
            usDelay(2000);
            if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
            {

貌似跟这个延时有关,延时小一些就正常了,这是为什么呢?

(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW){	usDelay(2000);	if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)	{		GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301		HAL_disablePwm(halHandle);		for(j=0;j<10;j++)		{			HAL_LED(halHandle,3);//DRV故障,闪灯警示			usDelay(10000);			HAL_LED(halHandle,1);//Gpio34亮			usDelay(10000);		}	}}

但是在正常情况下,程序会执行这段代码,这是为什么呢?

我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。

然而却不是这样,求各位大神指教,急急急!!!

desheng yang:

回复 desheng yang:

if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
        {
            usDelay(2000);
            if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)

再经过多次测试之后,发现与延时时间并无关系,减小延时时间也没有效果,还是一样上电之后就会进入这段程序,是不是表明8301存在问题?但是我若去掉这段程序,整个系统都是正常工作的,这说明也不是8301的问题呀,但为什么会进入这段程序呢?求助!!

(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW){	usDelay(2000);	if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)	{		GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301		HAL_disablePwm(halHandle);		for(j=0;j<10;j++)		{			HAL_LED(halHandle,3);//DRV故障,闪灯警示			usDelay(10000);			HAL_LED(halHandle,1);//Gpio34亮			usDelay(10000);		}	}}

但是在正常情况下,程序会执行这段代码,这是为什么呢?

我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。

然而却不是这样,求各位大神指教,急急急!!!

desheng yang:

回复 desheng yang:

测量硬件,芯片管脚3.3V,8301错误引脚0.6V左右,怎么到了芯片内部程序读取就成低电平了,什么原因呢???

读取管脚数据函数如下,是官方库的

uint16_t GPIO_getData(GPIO_Handle gpioHandle, const GPIO_Number_e gpioNumber){ GPIO_Obj *gpio = (GPIO_Obj *)gpioHandle; if(gpioNumber < GPIO_Number_32) { return ((gpio->GPADAT >> gpioNumber) & 0x0001); } else { return ((gpio->GPBDAT >> (gpioNumber – GPIO_Number_32)) & 0x0001); }

}

(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW){	usDelay(2000);	if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)	{		GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301		HAL_disablePwm(halHandle);		for(j=0;j<10;j++)		{			HAL_LED(halHandle,3);//DRV故障,闪灯警示			usDelay(10000);			HAL_LED(halHandle,1);//Gpio34亮			usDelay(10000);		}	}}

但是在正常情况下,程序会执行这段代码,这是为什么呢?

我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。

然而却不是这样,求各位大神指教,急急急!!!

Jim1:

回复 desheng yang:

一開始有無Enable後再判斷?

(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW){	usDelay(2000);	if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)	{		GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301		HAL_disablePwm(halHandle);		for(j=0;j<10;j++)		{			HAL_LED(halHandle,3);//DRV故障,闪灯警示			usDelay(10000);			HAL_LED(halHandle,1);//Gpio34亮			usDelay(10000);		}	}}

但是在正常情况下,程序会执行这段代码,这是为什么呢?

我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。

然而却不是这样,求各位大神指教,急急急!!!

desheng yang:

回复 Jim1:

初始化的时候,已经使能的了,判断我是在循环中执行的;若改为if(GPIO_getData(gpioHandle, GPIO_Number_32)==HIGH),程序是正常运行的,系统正常工作,就是理论上判断低的时候,就会进入这段程序,原则上应该是8301输出低电平才是故障吧?

(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW){	usDelay(2000);	if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)	{		GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301		HAL_disablePwm(halHandle);		for(j=0;j<10;j++)		{			HAL_LED(halHandle,3);//DRV故障,闪灯警示			usDelay(10000);			HAL_LED(halHandle,1);//Gpio34亮			usDelay(10000);		}	}}

但是在正常情况下,程序会执行这段代码,这是为什么呢?

我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。

然而却不是这样,求各位大神指教,急急急!!!

Jim1:

回复 desheng yang:

剛上電的時候,PVDD還在充電

這時候使能的話有可能會觸發UnderVoltage報警,則必須重新致能

建議你在使能前,先判斷PWRGD的狀態

當電源穩定後再使能drv8301

(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW){	usDelay(2000);	if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)	{		GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301		HAL_disablePwm(halHandle);		for(j=0;j<10;j++)		{			HAL_LED(halHandle,3);//DRV故障,闪灯警示			usDelay(10000);			HAL_LED(halHandle,1);//Gpio34亮			usDelay(10000);		}	}}

但是在正常情况下,程序会执行这段代码,这是为什么呢?

我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。

然而却不是这样,求各位大神指教,急急急!!!

desheng yang:

回复 Jim1:

Hi Jim1,

Thanks,我试试看。

但是如果我屏蔽掉这段程序,确实正常的情况,启动什么的,都正常。

赞(0)
未经允许不得转载:TI中文支持网 » drv8301故障反馈引脚的读取问题
分享到: 更多 (0)