0

BLDC モーターを駆動したいのですが、コントローラーの CPU として ATMEGA32 を使用しています。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」と呼ばれる別のレジスタがあり、これがその 1 つです。からデジタル信号を読み取ります。また、">DDRD=(0<<0)|(0<<1)|(0<<2)|(0<<3);" として何もありません。ビットをクリアする (ビットを論理ゼロに設定する) 場合は、シフトされたものではなくビット単位を使用するだけです (例:DDRD = ~(1<<bitnumber)

于 2016-01-13T18:08:07.357 に答える