ホーム フォーラム Texas Instruments マイコン C2000 TM320F28027について

このトピックには11件の返信が含まれ、2人の参加者がいます。5 年、 7 ヶ月前Yojiro Yojiro さんが最後の更新を行いました。

13件の投稿を表示中 - 1 - 13件目 (全13件中)
  • 投稿者
    投稿
  • #4871 返信

    amatsu1
    参加者

    TM320F28027について

    デバイス型番:TM320F28027

    お世話になります。
    現在、”TMS320C2000Piccolo MCUのソフトウェア開発入門”を拝読しながら、
    TM320F28027を開発していますが、以下についてご教示願います。

    ①EPWM2,EPWM3にて、EPWM2をマスタとしてカウント0で同期して使用する場合、PWM2だけPWMを止める場合はどうすれば良いでしょうか(PWM2,3タイマは止めずにEPWM2のCMPAを0とするなどを考えています)

    ②同時サンプリングはSOC1,2といったようにSOC+奇数番, SOC+偶数番でもできますでしょうか

    ③同時サンプリング速度 = 2*シングルサンプリングという認識で宜しいでしょうか

    以上、宜しくお願い致します。

    #4874 返信
    Yojiro
    Yojiro
    従業員

    お問い合わせいただき、ありがとうございます。

    ①EPWM2,EPWM3にて、EPWM2をマスタとしてカウント0で同期して使用する場合、PWM2だけPWMを止める場合はどうすれば良いでしょうか(PWM2,3タイマは止めずにEPWM2のCMPAを0とするなどを考えています)

    CMPAを0にすることで、PWM出力を停止する方法については、以下の場合のみ有効になります。
    ・PWMタイマをUp-Count Modeで動作
    ・Action Qualifier の設定にて、TBCTR=ZEROおよびTBCTR=CMPAの場合のみ変化する
    タイマカウンタの一致イベントの同時発生には、優先度がありますので、その優先度を考慮した設定が必要となります。
    CMPAを0に設定する以外に、AQCSFRCレジスタに停止時の出力を設定することで、継続してHighまたはLow出力を行うことが可能になっております。AQCSFRCレジスタの設定は、タイマコンペアのイベントよりも優先度が高く、AQCSFRCレジスタの設定をDisableに変更するまで継続されます。

    ②同時サンプリングはSOC1,2といったようにSOC+奇数番, SOC+偶数番でもできますでしょうか

    ご参照いただいているアプリケーションノートにも記載されておりますが、同時サンプリングに使用可能なSOCは、偶数番号から始まる連続したSOC(偶数番号とその番号+1)のペアのみ有効になります。

    ③同時サンプリング速度 = 2*シングルサンプリングという認識で宜しいでしょうか

    ADC変換時間については、サンプリング(Acquisition)時間+変換(Conversion)時間の2つの時間で構成されます。サンプリング時間はSOCのACQPSにて設定されるADCCLKサイクル数、変換時間は13 ADCCLKサイクル必要となります。
    同時サンプリングの場合、2つのチャネルが同時にACQPSに設定される時間サンプリングを実行します。(同時サンプリングの場合、偶数SOCのACQPSで実行されます)その後、偶数番号から変換が開始されます。そのため、単純に2倍ではありません。

    サンプリング・変換中に次のSOCイベントが発生している場合は、2回目のConversion中の6cycle後から次のサンプリングが開始されます。ACQPSが最小の7cycleの場合は、常にConversionが動作している状態となるので、1/ 2*変換時間(13cycle)がサンプリング速度になります。2チャンネル同時サンプリングを1ペアのみで連続実行される場合のAD変換速度は、以下の式になります。
    変換速度 = (ACQPS – 7) + (13 x 2)

     

    ご確認のほど、よろしくお願いします。

     

    #4876 返信

    amatsu1
    参加者

    お世話になります。
    早速の回答、誠にありがとうございます。
    ②③については承知致しました。ありがとうございます。

    ①については以下についてご教示願います。

    >・Action Qualifier の設定にて、TBCTR=ZEROおよびTBCTR=CMPAの場合のみ変化する
    これについて理解できませんでした。お手数ですが、詳細説明を宜しくお願い致します。

    AQCSFRCレジスタについて説明がされているドキュメントはどこにございますでしょうか。
    TM320F28027のデータシートや、”TMS320C2000Piccolo MCUのソフトウェア開発入門”を探しても見当たりませんでした。

    以上、宜しくお願い致します。

    #4886 返信
    Yojiro
    Yojiro
    従業員

    Action Qualifier Submodule でカウンタの一致イベントからPWM信号の論理を制御するのですが、このイベントが同時に発生した場合の優先順位がテクニカルリファレンスマニュアル(SPRUI09)の「3.2.4.3 Action-Qualifier Event Priority」に記載されております。

    CMPAを0として、PWM出力をさせないということは、CTR=ZEROイベントでHigh出力して、CMPA一致イベントでLow出力するような動作を検討いただいていると思います。ここでCMPB一致イベントでHigh出力設定をしていると、CMPA=CMPB=0としても、優先度からCMPB一致イベントの出力が行われ、PWMがHighとなります。

     

    AQCSFRCレジスタの説明につきましては、テクニカルリファレンスマニュアルの p.308

    Figure 3-91. Action-Qualifier Continuous Software Force Register (AQCSFRC)
    Table 3-40. Action-qualifier Continuous Software Force Register (AQCSFRC) Field Descriptions

    に記載されておりますのでご確認ください。

    ご確認のほど、よろしくお願いいたします。

    #4916 返信

    amatsu1
    参加者

    内容承知致しました。
    ご対応いただき、ありがとうございました。

    #5264 返信

    amatsu1
    参加者

    お世話になります。
    TM320F28027について以下の5点について追加でご教示願います。

    ①ADの誤差は何LSBになるでしょうか。
    ②アナロググランドとパワーグランドが共通のパターンでAD検出を利用する場合、2pin(Vss),12pin(Vss),23pin(Vssa)は同一パターンで良いでしょうか。
    ③PWM3をマスタ、PWM4をスレーブとしてそれぞれchAを使用し、HRPWMを使用しようと考えておりますが、特に問題ないでしょうか。
    ④IC周りの素子(パスコン)などの推奨接続例(容量付き)がございますでしょうか。
    ⑤AD開始(トリガ:CMPBマッチ)~AD完了割り込みまでにおいて、ADに関してCPUが取られてしまう時間はございますでしょうか。ある場合、どの程度でしょうか。

    以上、宜しくお願い致します。

    #5322 返信
    Yojiro
    Yojiro
    従業員

    amatsu1さん

    回答が遅くなり、大変申し訳ありません。

    ①ADの誤差は何LSBになるでしょうか。

    ADCの特性については、データシート(SPRS523)の「6.9.1.1.3 On-Chip Analog-to-Digital Converter」に記載されておりますが、総合的な誤差(総合未調整誤差(TUE))についてこちらに詳しく説明されております。
    TMS320F28027のTUEについては、起動時に一度Device_cal関数を実行した場合では、±45.0LSBとなります。リファレンス入力も含めて周期的なキャリブレーションを実施いただくことで、±9.2LSBとなります。

    ②アナロググランドとパワーグランドが共通のパターンでAD検出を利用する場合、2pin(Vss),12pin(Vss),23pin(Vssa)は同一パターンで良いでしょうか。

    問題ございません。

    ③PWM3をマスタ、PWM4をスレーブとしてそれぞれchAを使用し、HRPWMを使用しようと考えておりますが、特に問題ないでしょうか。

    PWM3のSYNCO信号はPWM4のSYNCI信号に入力されておりますので、問題なくご使用いただけます。

    ④IC周りの素子(パスコン)などの推奨接続例(容量付き)がございますでしょうか。

    C2000wareにTMS320F28027を使用したcontrolCARDとLaunchpadの回路図がございます。
    C2000wareをインストールしていただきますと、以下のフォルダに回路図がございます。
    controlCARD : C:\ti\c2000\C2000Ware_1_00_06_00\boards\controlCARDs\TMDSCNCD28027
    Launchpad  : C:\ti\c2000\C2000Ware_1_00_06_00\boards\LaunchPads\LAUNCHXL_F28027

    ⑤AD開始(トリガ:CMPBマッチ)~AD完了割り込みまでにおいて、ADに関してCPUが取られてしまう時間はございますでしょうか。ある場合、どの程度でしょうか。

    AD開始から変換完了割り込みまで、CPUのリソースは必要ありません。すべてADC機能内で処理された後、完了割り込みが発生します。

     

    以上、ご確認のほど、よろしくお願いします。

    #5353 返信

    amatsu1
    参加者

    内容承知致しました。
    ご対応、ありがとうございました。

    #5636 返信

    amatsu1
    参加者

    お世話になります。
    お手数ですが、TM320F28027について以下の6点について追加でご教示願います。

    ①>TMS320F28027のTUEについては、
    TUEとは何でしょうか?

    ②>起動時に一度Device_cal関数を実行した場合では、±45.0LSBとなります。リファレンス入力も含めて周期的なキャリブレーションを実施いただくことで、±9.2LSBとなります。
    TRM(テクニカルリファレンスマニュアル)を拝見しますと、P54の中ほどにDevice_calはBoot時と通常動作時に自動的に呼び出されるとございます。すなわち、特に何もせずとも±9.2LSBを実現できると考えて宜しいでしょうか?

    ③HRPWM使用時、PCLKCR0のHRPWMENCLKは1にしなくても良いのでしょうか?

    ④VSSAとVSSが接続かつVDDAとVDDIOが接続の状態でADを使用するとき、internal reference voltageとexternal reference voltageのどちらが良いでしょうか。

    ⑤TRM P143,144のPIE MUXed Perpheral Interrupt Vector Tableにて、ADCINT1,2が違うアドレスで2箇所あるのは何故でしょうか。

    ⑥TRM P333にはHRPWMの使用推奨条件が250kHz以上と記載がありますが、ソフトウェア開発入門 P126には60kHz以上と記載があります。どちらが正しいでしょうか。

    以上、宜しくお願い致します。

    #5638 返信
    Yojiro
    Yojiro
    従業員

    amatsu1さん

    ①>TMS320F28027のTUEについては、
    TUEとは何でしょうか?

    TUEとは、総合未調整誤差(Total Un-adjusted Error:TUE)のことになります。ADCのデータシートでは、エラーに関して、オフセットやゲイン・INLなど個別に記載されています。これらのエラーを全て掛け合わせたときに発生しうる総システム誤差の比率を表すものになります。
    以下のサイトに詳しい内容が記載されておりますので、ご参照いただけますでしょうか。

    ②>起動時に一度Device_cal関数を実行した場合では、±45.0LSBとなります。リファレンス入力も含めて周期的なキャリブレーションを実施いただくことで、±9.2LSBとなります。
    TRM(テクニカルリファレンスマニュアル)を拝見しますと、P54の中ほどにDevice_calはBoot時と通常動作時に自動的に呼び出されるとございます。すなわち、特に何もせずとも±9.2LSBを実現できると考えて宜しいでしょうか?

    以前の投稿にも記載しておりますが、Device_cal関数を呼び出すだけでは、±45.0LSBになります。
    以下のE2Eスレッドの「Requirements:」に記載されているように、定期的(数秒に1回程度)に外部のリファレンス電源などを使用してゲインのキャリブレーションを実施していただくことで初めて±9.2LSBを実現することができます。
    http://e2e.ti.com/support/microcontrollers/c2000/f/171/p/587441/2157843#2157843

    ③HRPWM使用時、PCLKCR0のHRPWMENCLKは1にしなくても良いのでしょうか?

    HRPWM仕様時は、PCLKCR0のHRPWMENCLKは1に設定してください。

    ④VSSAとVSSが接続かつVDDAとVDDIOが接続の状態でADを使用するとき、internal reference voltageとexternal reference voltageのどちらが良いでしょうか。

    データシートのTable 6-26. ADC Electrical Characteristicsに記載されている通り、External ReferenceのほうがInternal referenceより変換誤差が少なくなります。また上記に記載しておりますゲインのキャリブレーションも検討される場合は、External Referenceをお薦めいたします。

    ⑤TRM P143,144のPIE MUXed Perpheral Interrupt Vector Tableにて、ADCINT1,2が違うアドレスで2箇所あるのは何故でしょうか。

    PIEベクタテーブル(INTx.y)のなかで、x,yの数値が小さいほど割り込みの優先度が高くなっています。
    設計依存にはなるのですが、ADC変換完了割込みを最優先で処理したい場合には、INT1.1/INT1.2という最優先で処理されるベクタに割り当てられています。システム設計において必要に応じて使い分けていただくことになります。

    ⑥TRM P333にはHRPWMの使用推奨条件が250kHz以上と記載がありますが、ソフトウェア開発入門 P126には60kHz以上と記載があります。どちらが正しいでしょうか。

    この記述ですが、一般論として250kHz以下のPWM周期では高分解能PWMは必要ないということが記載されており、使用条件を記述しているものではございません。Table 4-1ではPWM周期20kHzの例も記載されております。
    またデータシートでもHRPWMに関しての最低周波数の記載もございませんので、必要に応じてHWPWMをご利用いただければと思います。

     

    ご確認のほど、よろしくお願いいたします。

    #5652 返信

    amatsu1
    参加者

    お世話になります。
    早急なご対応、誠にありがとうございます。

    内容確認させていただきます。

    以上、宜しくお願い致します。

    #5949 返信

    amatsu1
    参加者

    いつも大変お世話になっております。
    TMS320F28027を使用し、実際に動かす段階に入りました。
    その中で不明点が出てきましたので、お手数ですがご教授願います。

    ①デバッグ時にHRPWMのキャリブレーション部分でフリーズしてしまうのですが何故でしょうか。
     なお、本部分をコメントアウトするとHRPWMが正常に動作します。
     また、HRPWMを動作させてからキャリブレーションをするよう順序を変更してもフリーズは起きてしまいました。
    while(HR_Calib_status==SFO_INCOMPLETE){
    HR_Calib_status=SFO();
    }

    ②PieVectTable.XINT1 =”自分でつけた命令名”;
    としておいてから、
    interrupt void “自分でつけた命令名”(void){}
    を定義しておりますが、本割り込みに入らずに、
    DSP2802x_common/sorce/DSP2802x_Default.cのinterrupt void XINT1_ISR(void)
    {}に入ってしまいます。何故でしょうか。

    ③ブレイクポイントの数ですが、1つ以上打つとエラーが出てしまいます。増やせないでしょうか。

    ④リンカコマンドファイルとしてF28027.cmdを指定している状態で、
    #pragma CODE_SECTION(Xint1Isr,”.TI.ramfunc”);としてから、
    memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,(Uint32)&RamfuncsLoadSize);
    とたところ、RamfuncsLoad Sizeが外部で宣言されてないというようなエラーが出た為、
    以下のように変えました。
    extern Uint16 RamfuncsLoadEnd;→Uint16 RamfuncsLoadSize;
    エラーが出ずに、正常に動作しているように見えるのですが、問題ないでしょうか。
    なお、CCS8.2を使用しております。

    ⑤GPIOの内部プルアップ抵抗値 及び内部プルアップ抵抗周りの具体的なIC内部回路図などございますでしょうか。

    以上、宜しくお願い致します。

    • この返信は5 年、 7 ヶ月前に  amatsu1 さんが編集しました。
    #5954 返信
    Yojiro
    Yojiro
    従業員

    amatsu1さん

    ※新規のお問い合わせにつきましては、新しいトピックにて投稿いただけますでしょうか。
    ※解決済みのトピックに追加でお問い合わせいただいた場合、対応が遅れる場合がございます。
    ※お手数ではございますが、ご協力いただけますよう、よろしくお願いいたします。

    ①デバッグ時にHRPWMのキャリブレーション部分でフリーズしてしまうのですが何故でしょうか。
    なお、本部分をコメントアウトするとHRPWMが正常に動作します。
    また、HRPWMを動作させてからキャリブレーションをするよう順序を変更してもフリーズは起きてしまいました。
    while(HR_Calib_status==SFO_INCOMPLETE){
    HR_Calib_status=SFO();
    }

    記述内容から、最初のキャリブレーションかと思います。この時点では、HRPWMを動作させる必要はありませんが、クロックの供給は必要です。SysCtrlRegs.PCLKCR0.bit.HRPWMENCLKは’1’に設定頂いておりますでしょうか。
    また、リンク頂いているライブラリは、F28027用のライブラリ
    <C2000ware>\libraries\calibration\hrpwm\f2802x\lib
    の SFO_TI_Build_V6.lib または SFO_TI_Build_V6b.lib をご利用頂いておりますでしょうか。
    HRPWMにつきましては、サンプルプロジェクトが以下に用意されております。
    <C2000ware>\device_support\f2802x\examples\structs\hrpwm_duty_sfo_v6
    <C2000ware>\device_support\f2802x\examples\structs\hrpwm_mult_ch_prdupdown_sfo_v6
    こちらのプロジェクトを参考に、設定値をご確認いただけますでしょうか。

    ②PieVectTable.XINT1 =”自分でつけた命令名”;
    としておいてから、
    interrupt void “自分でつけた命令名”(void){}
    を定義しておりますが、本割り込みに入らずに、
    DSP2802x_common/sorce/DSP2802x_Default.cのinterrupt void XINT1_ISR(void)
    {}に入ってしまいます。何故でしょうか。

    以下、ご確認いただけますでしょうか。

    1. PieVectTableはEALLOWプロテクトがかかっています。
      PieVectTable.XINT1 =”自分でつけた命令名”; を実行前にEALLOW命令を実行いただいておりますでしょうか。
    2. PieVectTableはInitPieVectTable()によりデフォルト設定(XINT1_ISR)に設定します。
      ユーザー関数を設定後に、InitPieVectTable()を実行されていないでしょうか。

    ③ブレイクポイントの数ですが、1つ以上打つとエラーが出てしまいます。増やせないでしょうか。

    申し訳ありません。TMS320F28027ではハードウェアブレークポイントは2つまでとなっております。FLASH ROM上のソフトウェアに対してブレークポイントを設定する場合は、ハードウェアブレークポイントを利用するしかなく、この数は増やすことができません。1つ以上とございますが、他に設定されている箇所はございませんでしょうか。CCSのViewメニュー→Breakpointsを選択していただくと、設定中のブレークポイントの一覧をご確認いただけます。また、この画面から、ブレークポイントを削除ではなく、チェックボックスのOn/OffによりEnable/Disableを設定することが可能になっております。

    ④リンカコマンドファイルとしてF28027.cmdを指定している状態で、
    #pragma CODE_SECTION(Xint1Isr,”.TI.ramfunc”);としてから、
    memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,(Uint32)&RamfuncsLoadSize);
    とたところ、RamfuncsLoad Sizeが外部で宣言されてないというようなエラーが出た為、
    以下のように変えました。
    extern Uint16 RamfuncsLoadEnd;→Uint16 RamfuncsLoadSize;
    エラーが出ずに、正常に動作しているように見えるのですが、問題ないでしょうか。
    なお、CCS8.2を使用しております。

    CCS8.2に付属しているF28027.cmdでは、
    LOAD_END(_RamfuncsLoadEnd)
    と定義されておりますが、C2000wareのF28027.cmdでは、
    LOAD_SIZE(_RamfuncsLoadSize)
    にて定義されております。
    C2000wareのリンカコマンドファイル(F28027.cmd)をお使いの場合は修正いただいた内容で問題ございません。

     

    以上、ご確認のほど、よろしくお願いいたします。

13件の投稿を表示中 - 1 - 13件目 (全13件中)