15件の結果を表示中 - 1,606 - 1,620件目 (全2,733件中)
  • 投稿者
    検索結果
  • #5978
    Yojiro
    Yojiro
    従業員

    amatsu1さん

    ちなみに、演算速度を速める他の方法として、変数のIQ型のグローバル宣言の部分について、
    16bitシフトした値をlong型で宣言した方が速くなるような気がしているのですが、
    それに関しまして見解をご教示願います。

    こちらは、_IQ(…)で定数を定義(例:#define MAX_CNTVAL _IQ(414))するよりも、long型の変数として定義(例: long MAX_CNTVAL = (long)(414 << 16)としたほうが実行速度が早くなるのではという質問でしょうか。

    C2000のアセンブラで考えた場合、演算対象が定数と変数(メモリアクセス)では実行サイクル数は変わりませんので、どちらの定義でもそれほど変化はないのではと考えております。しかし、コンパイラの最適化(速度有優先、サイズ優先)により、場合によっては違いが出てきますので、一概にどちらが早いということはコメントすることができません。実際に測定いただくことをお薦めいたします。

     

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

    #5974
    Yojiro
    Yojiro
    従業員

    amatsu1さん

    ①以下のようなコードを書いたところ、演算時間が3.7usでした。
    処理時間をさらに早くする方法について、ご教示願います。

    コードを確認させていただきましたが乗算(__IQmpy)に関しましては、Intrinsic関数をご利用頂いておりますので、これ以上の高速化は難しいです。
    コードの後半で、最大値と最小値の判定を行っていますが、次のIntrinsic関数がご利用いただけるのではないかと考えます。
    __IQsat( long A, long max, long min );

    NxtCntVal_Ch1=((NxtCntVal_Ch1 > MAX_CNTVAL) ? MAX_CNTVAL: NxtCntVal_Ch1);
    EPwm3Regs.CMPA.all=((NxtCntVal_Ch1 < MIN_CNTVAL) ? MIN_CNTVAL: NxtCntVal_Ch1);

    __IQsat関数をご利用いただくと、上記2行は「__IQsat(NxtCntVal_Ch1, MAX_CNTVAL, MIN_CNTVAL);」の1行で記述でき、かつアセンブラコードも次の3命令に集約されますので、実行速度の改善につながるものと思います。

    MOVL ACC, NxtCntVal_Ch1
    MINL ACC, MAX_CNTVAL
    MAXL ACC, MIN_CNTVAL

     

    ②ADCCTL1レジスタのINTPULSEPOSについてですが、SOC0~SOC5のラウンドロビンでSOC5時にINT pulseを発生させる場合、
    INTPULSEPOS=0とすると、SOC5開始時にINT pulseが発生するという認識でよろしいでしょうか。

    INTPULSEPOSビットにつきましては、割込み信号(ADCINTx)の制御ではなく、ADC内部の変換完了信号(EOC)パルスの生成タイミングを設定します。INTPULSEPOS=0の場合は、EOCは各SOC動作時のサンプリング終了後(AD変換前)にEOCパルスが発生し、INTPULSEPOS=1の場合は、各SOC動作時のAD変換終了後にRESULTレジスタへ変換データを格納したあとにEOCパルスが発生します。
    データシート(SPRS523)のFigure 6-21.(INTPULSEPOS=1)、Figure 6-22. (INTPULSEPOS=0)にタイミングチャートがございますので、ご確認ください。
    ※タイミングチャートでは、最初のEOCパルスでCPUへの割込み(ADCINT)を発生させています。

    EOCパルスは全てのSOC動作で発生しますので、SOC5の変換開始時にADC変換割込みを発生させたい場合は、INTPULSEPOS=0として、INTSELxNyレジスタにEOC5のみを選択していただくことで対応できると思います。

     

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

    #5973

    amatsu1
    参加者

    いつも大変お世話になっております。
    早速ですが、TMS320F28027にて、以下の2点質問がございます。

    ①以下のようなコードを書いたところ、演算時間が3.7usでした。
    処理時間をさらに早くする方法について、ご教示願います。

    #define GLOBAL_Q 16
    #define MAX_CNTVAL _IQ(414)
    #define MIN_CNTVAL _IQ(14.4)
    #define PWM_PERIOD _IQ(600)
    #define K0 _IQ(0.01347)
    #define K1 _IQ(0.01347)
    #define K2 _IQ(0.99917)
    _iq IoutDetect_Ch1;
    _iq IoutDetect_Ch2;
    _iq CtrlVal0_Ch1;
    _iq CtrlVal0_Ch2;
    _iq Ierror0_Ch1;
    _iq Ierror0_Ch2;
    _iq Ierror1_Ch1;
    _iq Ierror1_Ch2;

    interrupt void ADCINT1_ISR(void) // ADC (Can also be ISR for INT10.1 when enabled)
    {
    //計測開始
    IoutDetect_Ch1=AdcResult.ADCRESULT2;
    IoutDetect_Ch2=AdcResult.ADCRESULT3;
    _iq NxtCntVal_Ch1, NxtCntVal_Ch2;
    //Ierror0_Ch1= _IQ((IoutCommand_Ch1-IoutDetect_Ch1) >> 2); ←最初こちらのコードを書きましたが、_IQに相当する16bit左シフトと元々の2bit右シフトを合算した14bit左シフト(1行下のコード)の方が速かった為、コメントアウトしました
    Ierror0_Ch1= (IoutCommand_Ch1-IoutDetect_Ch1) << 14;
    NxtCntVal_Ch1 = __IQmpy(K0,Ierror0_Ch1,16)+__IQmpy(K1,Ierror1_Ch1,16)+__IQmpy(K2,CtrlVal1_Ch1,16);
    NxtCntVal_Ch1=((NxtCntVal_Ch1 > MAX_CNTVAL) ? MAX_CNTVAL: NxtCntVal_Ch1);
    EPwm3Regs.CMPA.all=((NxtCntVal_Ch1 < MIN_CNTVAL) ? MIN_CNTVAL: NxtCntVal_Ch1);

    CtrlVal1_Ch1=EPwm3Regs.CMPA.all;
    Ierror1_Ch1=Ierror0_Ch1;

    //Ch2でも上記と同じ処理(冗長の為、ここでは省略しますが、演算時間に含まれています)
      
      //計測終了(ここまでが3.7us)
    }

    ②ADCCTL1レジスタのINTPULSEPOSについてですが、SOC0~SOC5のラウンドロビンでSOC5時にINT pulseを発生させる場合、
    INTPULSEPOS=0とすると、SOC5開始時にINT pulseが発生するという認識でよろしいでしょうか。

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

    #5971
    クライフ
    クライフ
    従業員

    kkk様

    上記投稿の中、申し訳ございません。
    上記をお試し頂く前に、PC2台それぞれのMSP Flasherに入っておりますMSP430.dllのバージョンに差分があるかご確認いただけますでしょうか。

    Cruijff

    #5970
    クライフ
    クライフ
    従業員

    kkk様

    ご連絡をいただき、ありがとうございます。

    MSP Flasherの公開されているソフトウェアの範囲でError内容を検索したのですが、トリガーとなる関数等が見受けられませんでした。
    このことから、MSP430.dllによるエラーメッセージではないかと推測しております。

    TIではMSP430.dllについてMSP430デバッグスタックパッケージとして以下HPよりダウンロードすることができます。
    お手数ですが、使用しているパソコン2台ともMSP430.dllをMSP430デバッグスタックパッケージのものに変更いただき、エラーが解消されないかご確認いただけますでしょうか。

    MSP デバッグ・スタック ※ myTIの登録が必要です。

    • 上から2段目「MSPDS:MSP デバッグ・スタック開発パッケージ」の「ソフトウェア」をクリックします。
    • 「MSPDS Product downloads」の「MSP430 DLL 3_14_0_000」をクリックし、ダウンロードが始まります。
    • zipファイルを解答されたフォルダの直下に「MSP430.dll」があります。

    以上、よろしくお願いいたします。
    Cruijff

    #5967

    トピック: 遅延時間(td(A))の計算方法について

    フォーラム内 電源IC
    Osugi
    Osugi
    参加者

    毎度お世話になります。 

    電源電圧がSENCE端子の設定電圧を越えた状態(電源が十分上がりきっている)で、
    ENABLE端子をアサートした場合の、SENCE_OUT出力の遅延時間(td(A))の計算方法の記載がデータシートに御座いません。

    お忙しい所申し訳ありませんが、上記の遅延時間(td(A))の計算方法がありましたら
    ご教示いただけないでしょうか。

    どうぞ、よろしくお願いいたします。

    #5965
    KJ
    KJ
    従業員

    aikawa様

    ご投稿ありがとうございます。
    以下回答致します。

    はい、ご認識の通り放熱の為にTHERMAL PADにviaを使用することを推奨致します。
    PADをviaを介してグランドプレーンに接続することで熱伝導性を改善することが可能です。

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

    #5964

    トピック: LMK03328の仕様確認4

    フォーラム内 クロック

    astro383
    参加者

    お世話になります。データシート(snas668d)の内容に関して 2点ご教示ください。
    ◆P31 Table 2 の記載
    EEPROM page select for soft pin mode or register default mode とあり、soft pin modeでの制御を予定していますが、
    その場合 起動時の GPIO2、GPIO3に印加する電位としては (1)VIH =1.4V以上、(2)VIM=0.9V、(3)VIL=0.4V以下、(4)No connection のどの状態とすべきでしょうか。また GPIO2、GPIO3 に印加する電位と pageの関係に関して 教えていただけますでしょうか。
    (データシート P32 等を拝見したのですが、6 EEPROM pages という内容しか見つける事ができずで、質問させていただきました。)
    ◆P32 10.3.2.2 Soft Pin Programming Mode (HW_SW_CTRL = 0) の記載
    The GPIO inputs[3:2] are sampled and latched at power-on reset (POR), and select one of 6 EEPROM pages which are custom-programmable. When GPIO[3:2] are left floating, EEPROM is not used and the hardware register default settings are loaded. Table 10, Table 11, Table 12, Table 13, and Table 14 show the predefined EEPROM configurations according to the GPIO[3:2] pin settings.
    ⇒hardware register default settings が指すのは Table 15,16 (Default ROM Contents) となり、またTable 10~14 に記載の内容が EEPROM出荷時の格納値であり Soft Pin Modeで起動した際に loadされるSettingとなりますでしょうか。

    • このトピックは astro383が6 年、 3 ヶ月前に変更しました。

    kkk
    参加者

    御質問について回答します。

    1.ご計測された消費電流値は、MSP430チップ単体の消費電流量でしょうか。
    また、オシレータ障害が発生する前の消費電流量は平均でどの程度でしょうか。
    ⇒基本的に基板全体の消費電流を測定していますが、1台でMSP430チップ単体の消費電流も測定しています。
     オシレータ障害が発生する前の消費電流量は基板によりますが14μA程度です。
     消費電流の測定結果を添付いたします。

    2.複数のボードでも1μAの上昇する現象が同様に見られますでしょうか。
    ⇒添付ファイルには1μA上昇する現象を1台のみ記載していますが、1μA上昇する現象を2台で確認しています。

    3.UCSモジュールのレジスタ(UCSCTL0~UCSCTL9)は、オシレータ障害の発生前/復帰後で差分はありますでしょうか。
    ⇒他のUCSモジュールのレジスタ(UCSCTL0~UCSCTL9)では差分はありませんでした。

    #5956

    aikawa
    参加者

    TI社製 SN65HVD75DRBについて、教えて下さい。
    データシートのLAND PATTERN例を確認すると、EXPOSED THERMAL PADにviaがありました。
    これは、放熱用の為、グランドに接続するという認識で合っていますでしょうか?

    #5955

    kkk
    参加者

    御回答ありがとうございます。

    両者のパソコンともにMSP Flasherのバージョンが1.3.18であり、バージョンが同じであることは事前に確認しておりました。
    2台目のパソコンではバージョン1.3.18でhexファイルが書き込めることを確認しています。

    #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)をお使いの場合は修正いただいた内容で問題ございません。

     

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

    #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内部回路図などございますでしょうか。

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

    • この返信は6 年、 3 ヶ月前に  amatsu1 さんが編集しました。
    #5946
    4ug
    4ug
    従業員

    astro383様

    ご投稿ありがとうございます。
    ご質問頂いた内容に回答致しますのでご確認下さい。

    P4 Electrical Characteristics (continued) にあります注記(3)より判断すると 一般的なLVDS信号(VCM=1.25, VID=350~400mV)を
    入力する事はできない という認識で正しかったでしょうか。
    【回答】
    こちらの注釈の意味は、VCMが下限や上限になった場合に、VDDを超えるまたはGNDを下回るVIDのLVDS入力はできず、
    その場合にVIDは100mV以下にする必要があり、100mVを超える電圧を許容しないという意味になります。下記参考図になりますので合わせてご確認下さい。

     

    また本デバイスが理想とするLVDS信号入力の VCMおよびVIDの例を ご教示いただけませんでしょうか。
    【回答】
    先のご質問ありました”一般的なLVDS信号(VCM=1.25, VID=350~400mV)”で問題ございません。
    また、VTH/VTLを満たすLVDS入力であれば問題ございません。

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

    4ug

    #5941
    FUKU
    FUKU
    従業員

    お問合せ頂きありがとうございます。

    お伺いした電源仕様「12V ⇒ 5V / 2.5A」で私もWEBENCH 結果を出してみましたが、頂いた回路図にほぼ同様の回路図となりました。
    回路図に問題は無いと考えます。
    そこで、動作確認をされた回路は、TI製評価ボード「TPS54331EVM-232」を活用して実現なされたものでしょうか?
    作製された試作基板として実現なされたものでしょうか? 
    それとも、一般的なユニバーサル基板上に実現なされたものでしょうか?

    お話からしまして、無負荷状態で出力電圧 5V が出力されていると推測致しますが、
    負荷電流を引けない原因としてまず考えられますのは、レイアウトの問題で、GNDパターンが細く長いことにより
    寄生抵抗でGND電流が充分に流せない状態になっている場合があります。
    まずは、レイアウトのご確認をお願い致します。

    以上

15件の結果を表示中 - 1,606 - 1,620件目 (全2,733件中)