This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Other Parts Discussed in Thread: 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输出低电平,才会执行这段代码。

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

  • if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
            {

                usDelay(2000);

                if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
                {
    貌似跟这个延时有关,延时小一些就正常了,这是为什么呢?
  • if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
            {

                usDelay(2000);

                if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
    再经过多次测试之后,发现与延时时间并无关系,减小延时时间也没有效果,还是一样上电之后就会进入这段程序,是不是表明8301存在问题?但是我若去掉这段程序,整个系统都是正常工作的,这说明也不是8301的问题呀,但为什么会进入这段程序呢?求助!!
  • 测量硬件,芯片管脚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);
    }

    }

  • 一開始有無Enable後再判斷?

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

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

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

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

    當電源穩定後再使能drv8301

  • Hi Jim1,

    Thanks,我试试看。

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