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

BLDC3_1 hall3中HALL3_Determine_State(p)函数

在 F281X_EV1_HALL3_Determine_State(p);函数中, p->HallGpio = p->HallGpio>>8;检测到后为什么要移位啊?感谢老师们的回复

Martin Yu:

应该是为了获得Hall反馈的GPIO口上的电平(1或0),具体请将该函数的代码贴上来。

在 F281X_EV1_HALL3_Determine_State(p);函数中, p->HallGpio = p->HallGpio>>8;检测到后为什么要移位啊?感谢老师们的回复

zeyuan du:

回复 Martin Yu:

下面是部分代码,

void F281X_EV1_HALL3_Determine_State(HALL3 *p){        EALLOW;                       // Enable EALLOW        // Configure CAP1-3 as GPIO-inputs (GPIO8-GPIO10)        GpioMuxRegs.GPAMUX.all &= 0xF8FF;    // config GPIO8-GPIO10 as inputs  GpioMuxRegs.GPADIR.bit.GPIOA8 = 0;  GpioMuxRegs.GPADIR.bit.GPIOA9 = 0;  GpioMuxRegs.GPADIR.bit.GPIOA10 = 0;        EDIS;                         // Disable EALLOW                p->HallGpio = GpioDataRegs.GPADAT.all&0x0700;  // HallGpio.2-0 = GPIO10-GPIO8         p->HallGpio = p->HallGpio>>8;

        EALLOW;                       // Enable EALLOW        GpioMuxRegs.GPAMUX.all |= 0x0700;     // Set up the CAP1-3 pins to primary functions        EDIS;                         // Disable EALLOW

}

感谢您百忙之中的回复!!

在 F281X_EV1_HALL3_Determine_State(p);函数中, p->HallGpio = p->HallGpio>>8;检测到后为什么要移位啊?感谢老师们的回复

zeyuan du:

回复 rookiecalf:

老师:

        您好!!首先非常感谢您在现在这个时间了还能给我解疑答惑,谢谢您!!

        我还能过分点在向您请教一个问题吗?就是关于无刷直流机转子位置传感器例程程序中  Debounce的问题,其流程图如下:

   

在 F281X_EV1_HALL3_Determine_State(p);函数中, p->HallGpio = p->HallGpio>>8;检测到后为什么要移位啊?感谢老师们的回复

rookiecalf:

回复 zeyuan du:

没看到你的问题是什么。

给你一个参考的帖子:

http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/8956.aspx

在 F281X_EV1_HALL3_Determine_State(p);函数中, p->HallGpio = p->HallGpio>>8;检测到后为什么要移位啊?感谢老师们的回复

zeyuan du:

回复 rookiecalf:

老师:

      您好!感谢您的回复。问题是这样的,在debounce程序中 Stallcount 是什么啊,为什么计数这么多次呢? 非常感谢您的回复程序附录如下:

void F281X_EV1_HALL3_Debounce(HALL3 *p){

if (p->HallGpio == p->HallGpioAccepted) // GPIO_UNCHANGED: 没变Current GPIO reading == debounced GPIO reading? { if (p->Revolutions <= 0) // Only create hall map during initial Revolutions F281X_EV1_HALL3_Create_Map(p); p->StallCount -= 1; // Decrement stall counter if (p->StallCount == 0) { p->EdgeDebounced = 0x7FFF; // If motor has stalled, then user trigger to commutate p->StallCount = 0xFFFF; // Reset counter to starting value } } else // GPIO_CHANGED: If not zero, then the motor has moved to a new position. { if (p->HallGpio == p->HallGpioBuffer) // Current GPIO reading == previous GPIO reading? { if (p->DebounceCount >= p->DebounceAmount) // If equal, is current GPIO reading debounced? { p->HallGpioAccepted = p->HallGpioBuffer; // Current GPIO reading is now debounced,当前位置已经去抖 p->EdgeDebounced = 0x7FFF; // Edge/position debounced, trigger commutation

p->DebounceCount = 0; // Reset debounce counter

if (p->HallMapPointer==0) p->Revolutions += 1; // Increment on every rev (HallMapPointer = 0) } else // DEBOUNCE_MORE p->DebounceCount += 1; // Increment debounce counter } else // NEW_READING { p->HallGpioBuffer = p->HallGpio; // Save new reading and reset debounce counter p->DebounceCount = 0; } }}

在 F281X_EV1_HALL3_Determine_State(p);函数中, p->HallGpio = p->HallGpio>>8;检测到后为什么要移位啊?感谢老师们的回复

user5308366:

回复 zeyuan du:

兄弟,问题解决了没

赞(0)
未经允许不得转载:TI中文支持网 » BLDC3_1 hall3中HALL3_Determine_State(p)函数
分享到: 更多 (0)