0

我想驱动 BLDC 电机,我使用 ATMEGA32 作为控制器的 CPU,我在从 BLDC 电机读取霍尔效应传感器时遇到问题

这是我的代码:

DDRB=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5);
DDRD=(0<<0)|(0<<1)|(0<<2)|(0<<3);
PORTD=(1<<0)|(1<<1)|(1<<2)|(1<<3);

PORTB 作为 OUTPUT 和 PORTD 作为 INPUT 这是主程序:

       if (~(PORTD &(1<<0)) && PORTD &(1<<1) && ~(PORTD &(1<<2))) /// 0   1   0
        {
            PORTB=(1<<0)|(0<<1)|(0<<2)|(1<<3)|(0<<4)|(0<<5);
        }
        else if (~(PORTD &(1<<0)) && PORTD &(1<<1) && PORTD &(1<<2)) /// 0   1   1
        {
            PORTB=(0<<0)|(0<<1)|(0<<2)|(1<<3)|(0<<4)|(1<<5);
        }
        ...........

我的回答是该程序无法从霍尔效应传感器读取逻辑零 (0),因此 BLDC 无法正常运行,如何读取 AVR ATMEGA32 中的多个输入?我使用 Codeblock 和 winavr ....

非常感谢

4

1 回答 1

0

我真的不明白你想做什么,但如果你想从 atmega 32 中的端口 D 读取,你不处理 'PORTD' 寄存器,还有另一个名为 'PIND' 的寄存器,这是一个您从中读取数字信号。也没有 ">DDRD=(0<<0)|(0<<1)|(0<<2)|(0<<3);" 如果您想清除一点(将该位设置为逻辑零),您只需使用按位而不是移位的位(例如DDRD = ~(1<<bitnumber)

于 2016-01-13T18:08:07.357 回答