0

私は写真18f87j50を持っています。私のデジタル I/O の 1 つで、たとえば RH7 としましょう。これを使用して 0 ~ 3.3 V の信号を送りたいと考えています。私はそれを出力として構成し、PWM を生成するので、オシロスコープで 2V を読み取ります。次に、ポートを「解放」して、この 2V レベルでフローティングさせようとします。「解放」するときは、ポートを入力として作成し、インターンプルアップが無効になっていることを確認します。

しかし、私はこれで本当に成功していません。プルアップがまだ有効になっているため、3.3V に非常に速く戻るようです。ポートに負荷がかかりません。

次のステップは、そこに OP アンプを配置して 0 ~ 10V の信号を作成することです。

私はこれを正しく行っていますか?-> ポート出力、pwm 信号を希望のレベルに、内部プルアップを無効にし、ポート入力をフローティング開始できるようにします。

4

3 に答える 3

1

PWM によって生成された 2V レベルを維持したい場合は、PWM をオフにすることはできません。

ポートを「解放」することで何を達成しようとしているのかわかりません。

ハードウェアのことはあまり手伝えない...

コメントの後に更新します。

可能であれば、必要な処理を行う PWM をハードウェアでサポートしているピンを使用してください。レイアウトを変更できない場合は、おそらくソフトウェアで変更を続ける必要があります。RH7 がチップ上でそれを行うためのハードウェア サポートが何であるかはわかりません。PWM への割り当ては、プロセッサのピン数によって異なります。

これは、PIC18F87J60 ベースの製品で PWM を構成するために使用するコードです。これがセットアップされると、それ以上のソフトウェアの関与はありません。

/*
 * Configure the powersupply to the external serial port.  To do this,
 * we configure a PWM to control the isolated 3V power supply.
 */

TRISC1 = 1;
TRISC2 = 1;

PR2 = 0xFF;
CCP1CON = 0x0c;     /* PWM mode, active high, single output */
CCP2CON = 0x0e;     /* PWM mode, active low, single output */
CCPR1L = 0x80;      /* 50% duty cycle */
CCPR2L = 0x80;      /* 50% duty cycle */
ECCP1AS = 0;        /* auto shutdown off */
ECCP2AS = 0;        /* auto shutdown off */
PIR1bits.TMR2IF = 0;

T2CON = 0x04;       /* Enable T2 timer, prescale and postscale 1:1 */

while (!PIR1bits.TMR2IF)
    ;

TRISC1 = 0;
TRISC2 = 0;
于 2011-04-15T23:01:29.637 に答える
1

ピンを入力に設定すると、特定の電圧にはなりません。このアプローチは機能しません。

制御可能な電圧レベルが必要な場合、(追加のハードウェアを使用しない) 唯一のオプションは、データシートの第 24 章で説明されているように制御できる CVREF ピンを使用することです。

ちなみに、デジタル出力で2Vがどのように表示されるかはわかりません(電源が3.3Vであると仮定)。

于 2011-04-15T22:40:05.640 に答える
0

実際、この質問を最初に書いたとき、ポート出力に直接接続された特別な回路があることを忘れていました。pwm が実現されると、その回路には特定の電圧レベルが数秒間保持されます。

最初の回路は設計が不十分だったため、適切に動作せず、PWM が停止するとすぐに電圧レベルが低下しました。

今では動作します。ループ内で 1 ミリ秒の 2 電圧出力を作成する pwming をリリースし、プログラムの残りの部分を続行すると、回路は最後の既知の電圧を数秒間低下させることなく保持します。

特別な回路は、いくつかのコンデンサと OP から作られています。

そう…ハードウェアの故障でした!そのために残念。

于 2012-01-17T12:28:01.467 に答える