目的:ArduinoコントローラーのADCの最大変換周波数で信号の入力、処理、表示用のチャネルを構築します。
デバイスとアクセサリー:Arduino UNOコントローラー、Simulink MatLABパッケージ(R2012)。
はじめに
コントローラーレベルで信号を監視、分析、処理するソフトウェアの開発には時間がかかります。 コントローラーを特殊な高レベル環境(図1)に接続すると、コントローラーのリソースの制限を考慮して、コントローラーのアルゴリズムの設計時間を大幅に短縮できます。
信号を操作するための強力な特殊環境の好例は、MatLABです。 信号解析では、可能な限り広い周波数帯域でスペクトルを観察する必要があります。 このため、コントローラはADCの最大変換周波数で信号を受信する必要があります。
ADCの変換の最大周波数でリアルタイムに信号を監視および処理するためのワーキングチャネル「Arduino UNO-MATLAB」の構築については、この作業で詳しく説明します。 このチャネルの機能は、リアルタイムクロックがMatLABではなくArduinoコントローラーによって設定されることです。 この構築には、Simulinkモデルをリアルタイムライブラリ(rtwin.tlc)でコンパイルする必要がありません。これにより、モデル内のSimulinkライブラリのほとんどすべてのブロックを使用できます。
図 1.アルゴリズムの開発ツールの比較。 特殊な環境のレベルでアルゴリズムを設計するには、コントローラーと設計環境の間にデータ伝送チャネルが必要です。
一般的な情報
信号の蓄積、分析、処理、表示の手段
この作業では、Simulink環境を使用してArduinoコントローラーデータを受信および表示します。
Simulinkは、ブロック図を使用して動的なプロセスモデルを構築できるシミュレーション用の対話型環境およびプログラミング言語です。 Simulinkは、MatLAB環境に統合されています。 統合により、既製のブロックライブラリ、組み込みの数学的アルゴリズム、処理用の強力なツール、データのグラフィカルな表示を使用して、モデルの概念の開発からテスト、検証、コード生成、ハードウェア実装までのタスク全体を解決できます。
デジタル信号処理パッケージ「DSP System Toolbox」の例を使用したSimulinkライブラリ拡張パッケージの構成を図5に示します。 2。
図 2.信号処理システムのモデリング用の追加のSimulink拡張パッケージの例:DSP System Toolbox [1]。 このパッケージは、最新のスペクトル分析アルゴリズムを使用しています。 パワースペクトル推定セクションの内容が強調表示されます-スペクトル信号推定のブロック。
ストリーミングデータ
データの蓄積と送信に2つのバッファを使用すると、データの収集、処理、視覚化を途切れることなく整理することができます(データの損失を防ぐため、後続のプロセスの速度は前のプロセスの速度よりも低くしないでください)。
そのような組織のアプリケーションの例としては、USBバスを介してコンピューターに接続された、アナログおよびデジタル情報のマルチチャンネル入力、出力、および処理用のE14-440モジュール[2]があります。
入力データは、まずFIFO ADCバッファーの前半に入力されます。 入力後、データはPCに転送され始めますが、FIFOバッファーの後半のデータ収集は停止しません。 FIFOバッファーの後半にデータが蓄積された後、PCへのデータ転送が再び開始され、並行して、データ収集が前半に継続されます。
Arduinoコントローラーに基づいたオシログラフの作成
最大ADCデータ保存速度
最大周波数(57600 bps)でのArduinoエディターモニターへの出力を使用して、一定期間のADC変換を計算するプログラムを作成します。
ADC変換速度測定プログラム:
const int adc_5 = A5; // ADCポート番号
符号なしlong time_start; //キャプチャの開始、ms
符号なしlong time_end; //キャプチャの終了、ms
void setup(){
Serial.begin(57600); // 9600、19200、38400、57600、および115200ビット/秒
}
void loop(){
time_start = millis();
for(int i = 0; i <1024; i ++){
int val = analogRead(adc_5);
}
time_end = millis();
int period = time_end-time_start;
Serial.println(期間);
図 3.時間(ミリ秒)1024および512 ADC変換。 ADCの平均変換時間:0.1123 ms(115/1024として)。
ADCデータのスケーリング時間
10ビットADCデータを8ビットに変換するには、次の関数を使用します
map(val、0、1023、0、255);
valは有効数字10桁のint変数です。
ADCの変換時間をスケーリングとアレイへの書き込みで測定するプログラム:
const int adc_5 = A5; // ADCポート番号
符号なしlong time_start; //キャプチャの開始、ms
符号なしlong time_end; //キャプチャの終了、ms
バイトadc_bytes [1024]; // ADCデータのバッファ
void setup(){
Serial.begin(57600); //ビット/ s
}
void loop(){
time_start = millis();
for(int i = 0; i <1024; i ++){
int val = analogRead(adc_5);
adc_bytes [i] = map(val、0、1023、0、255);
}
time_end = millis();
int period = time_end-time_start;
Serial.println(期間);
}
図 4.時間(ミリ秒)1024 ADC変換、変換10 p。 データを8ビットで配列に書き込みます。 スケーリングを伴うADC変換の期間:0.1611 ms(165/1024として)。
ADC変換時間は0.13 msであるため、10ビットデータのバイト形式(スケーリング)への1回の変換は0.0424 msです。
シリアルデータチャネル速度
バイト転送の速度を決定するために、シンボルコードSerial.write(1)がループ内のループで送信されますが、これはモニターには表示されません。
伝送速度を決定するためのプログラムのメインユニット:
void loop(){//ここで何かをする
符号なしの長い時間=ミリ秒();
Serial.write(1);
レート=レート+ 1;
if(time> set_time){
set_time = set_time + 30; // 30 ms RTクロック
Serial.println(レート);
レート= 0;
}
}
図 5.テストデータ:57600 bpsの速度で30ミリ秒間シリアルチャネルに転送されたバイト数。
テストでは、173バイトの送信には30ミリ秒かかり、一方、57600 bpsの速度で30ミリ秒の間、1728ビットを送信できることが示されました。 したがって、1バイトの送信には10ビットの送信時間が使用されます。 伝送モードにこの関係を使用する
•データビット:8
•パリティ:なし
•ストップビット:1
•フロー制御:なし
さまざまな速度でデータ配列のストリーミング時間を計算できます。
たとえば、9600ボー(ビット/秒)の速度で256バイトを送信するには、57600ボー-44ミリ秒の速度で267ミリ秒かかります。 115200ボーの速度で-22ミリ秒(256 * 10/115200として)。
データの保存と送信のための配列サイズ
Arduino UNOのランダムアクセスメモリ(SRAM)のサイズは2 KBです。 ADCの周期的な読み取り、10ビットデータの8ビットへのスケーリング、クロッキングおよびバイトデータ転送のプログラムをテストした結果、データを蓄積および送信するための配列の最大サイズは1800バイトを超えてはなりません。
より複雑なプログラムでは、追加のSRAMが必要になる場合があります。 したがって、ADCデータを蓄積および送信するための配列は、1024バイトまたは512ワードに制限されます。
図 6.観測された50 Hzネットワークのピックアップを強化するために、Arduinoコントローラーのアナログ入力A5に接続されたワイヤー。
表1 。 サイクルの不安定性を考慮したプログラム操作時間
最大データレートのデータストレージと送信で256のスケーリングされたADC値のディスプレイチャネルをチューニングする例。
Arduinoコントローラーのプログラムコード:
const int adc_5 = A5; // ADCポート番号
符号なしlong set_time; //次のクロックの時刻
バイトadc_bytes [256]; //スケーリングされたADCデータのバッファ
void setup(){
Serial.begin(115200); //ビット/ s
}
void loop(){
符号なしの長い時間=ミリ秒(); //現在の時間(ミリ秒)
// ADCデータキャプチャ
for(int i = 0; i <256; i ++){
int val = analogRead(adc_5);
adc_bytes [i] = map(val、0、1023、0、255);
}
// ADCデータをシリアルポートに送信します
Serial.print( "A"); //「A」はヘッダーです
for(int i = 0; i <256; i ++){
Serial.write(adc_bytes [i]);
}
if(time> set_time){
set_time = set_time + 70; // RTクロックは70ミリ秒
}
}
図 7. Arduino環境でのポート番号の決定。
図 8.コントローラーデータのADCを受信し、データベクトルを経時的にスケーリングし、データをリアルタイムで表示し、データストリームをワークスペースメモリに保存するためのSimulinkモデル。
図 9. Simulink環境のCOMポートパラメーター(モデルブロック:シリアル構成)
図 10. Simulinkモデルブロックとシミュレーションモードのパラメーター。
シミュレーションの開始ボタンをクリックして、モデルを起動します。
図 11.モデルを開始するボタン。
図 12.重複するフレーム(左ウィンドウ)と別のフレーム(右ウィンドウ)でのネットワーク干渉の種類(接続は図6に示されています)。 フレームを重ね合わせる際の信号バイアスの理由は、ディスプレイの同期の欠如です。 メモ:Simulinkには、同期チャネルを構築するのに十分なツールがあります。
テスト結果の取得と自己管理のオプションの例
タスク1 。 スケーリングされたデータの蓄積、送信、表示(8ページの例とタイムテーブルを参照)。
1. Arduino UNOコントローラーに、ADCの読み取り値を周期的に読み取り、スケーリングし、1024バイト配列にデータを書き込み、配列をシリアルチャネルに転送するためのプログラムを書き込みます。 プログラムは最大速度で実行する必要があります。 文字Aは、送信された配列のヘッダーです。
プログラム例:
const int adc_5 = A5; // ADCポート番号
符号なしlong set_time; //次のクロックの時刻
バイトadc_bytes [1024]; // ADCデータのバッファ
void setup(){
Serial.begin(115200); //ビット/ s
}
void loop(){
符号なしの長い時間=ミリ秒(); //現在の時間(ミリ秒)
// ADCデータキャプチャ
for(int i = 0; i <1024; i ++){
int val = analogRead(adc_5);
adc_bytes [i] = map(val、0、1023、0、255);
}
// ADCデータをシリアルポートに送信します
Serial.print( "A"); //「A」はヘッダーです
for(int i = 0; i <1024; i ++){
Serial.write(adc_bytes [i]);
}
if(time> set_time){
set_time = set_time + 270; // RTクロックは270ミリ秒
}
}
2. MatLAB環境で、Simulinkブロックからプログラムを作成して、コントローラーデータをリアルタイムで受信および表示します。 モデルの速度、パケットサイズ、受信データの周期、およびクロックサイクルは、対応するコントローラーパラメーターに対応する必要があります。 表示されたデータの時間をスケーリングします。
図 13.最大周波数でデータを受信するためのSimulinkモデル:115200ボー。 ベクトル連結は、フレームタイムラインに沿って信号をスケーリングするために使用されます。
3.たとえば、ADC入力での50 Hzネットワークピックアップの周期によって、チャネル「ADC入力-MatLABディスプレイ」の品質を確認します。 ピックアップの振幅を大きくするには、ワイヤをADC入力に接続します(図6を参照)。 ピックアップの振幅は、ワイヤと手の距離に依存します。
図 14. ADCコントローラーArduinoの入力で50 Hzの周波数をスキャンする場合、4フレームをオーバーレイします。
図 15. ADCコントローラーの入力におけるネットワーク周波数、4フレーム。
タスク2 。 10ビットADCデータの蓄積、送信、表示。
1. Arduino UNOコントローラーの場合、ADC読み取り値の循環読み取り、512ワードの配列へのデータの書き込み、および配列のデータのシリアルチャネルへのバイト転送のためのプログラムを作成します。 プログラムは最大速度で実行する必要があります。
プログラム例:
const int adc_5 = A5; // ADCポート番号
符号なしlong set_time; //次のクロックの時間(ミリ秒)
word adc_int [512]; // ADCデータのバッファ
int val;
バイトval_Lo、val_Hi;
void setup(){
Serial.begin(115200); //ビット/ s
}
void loop(){
符号なしの長い時間=ミリ秒();
// ADCデータキャプチャ
for(int i = 0; i <512; i ++){
adc_int [i] = analogRead(adc_5);
}
// ADCデータをシリアルポートに送信します
//最初に下位バイト、次に上位バイト
Serial.print( "A"); //「A」はヘッダーです
for(int i = 0; i <512; i ++){
val = adc_int [i];
val_Lo =(val << 1)&0xFE;
Serial.write(val_Lo); // Loバイト
}
for(int i = 0; i <512; i ++){
val = adc_int [i];
val_Hi =(val >> 6)&0xE;
Serial.write(val_Hi); //こんにちはバイト
}
if(time> set_time){
set_time = set_time + 160; // RTクロックは160ミリ秒
}
}
2. Simulinkプログラムを作成して、リカバリを受信し、コントローラーのADCデータを表示します。 受信したデータの速度、パケットサイズ、および周期は、コントローラーの関連パラメーターに対応している必要があります。 表示されたデータの時間をスケーリングします。
図 16. Arduino UNOコントローラーADCデータ配列を受信、復元、表示するためのSimulinkプログラム。
3.ネットワークの50 Hzピックアップを記録します。
図 17. ADCコントローラーの入力で50Hzネットワーク干渉をスキャンするときの15フレームのオーバーレイ。 プログラム期間:160ミリ秒。 ADCデータでの配列充填時間:58ミリ秒。 115200ボーの周波数での送信時間512x2バイト:89ミリ秒。
図 18.最後の15フレーム。 時間3.5サイクル50 Hz信号:70 ms。
タスク3 。 MatLABによる信号処理
1. simoutブロックを使用して、MatLABメモリのワークスペースにリアルタイムで表示されるデータを保存します(図13を参照)。
2.保存したデータを作業ディレクトリにコピーします。次に例を示します。
save( 'simout_50Hz'、 'simout');
3. MatLAB mプログラムを開発して、コントローラ信号のアーカイブされたADCを表示します。
コード例:
すべてクリア
ロード( 'simout_50Hz');
d_frame = simout.Time(2)-simout.Time(1);
size_frame = size(simout.Data、1);
サンプリング= d_frame /(size_frame + 163 * 4); %dt
data_size =サイズ(simout.Data、1)*サイズ(simout.Data、2)*サイズ(simout.Data、3);
%time =(0:data_size-1)*サンプリング;
時間= [];
i = 1の場合:長さ(simout.Time)
時間= [時間(0:1023)*サンプリング+ simout.Time(i)];
終わり
adc = uint8([]);
i = 1の場合:サイズ(simout.Data、3)
adc = [adc simout.Data(:、:、i) '];
終わり
%frame_num = length(simout.Time)%またはsize(adc、3)%は54フレームです
1%の場合
図
プロット(time、adc、 'b')
グリッドオン
xlabel( 'Time、s');
ylabel( 'ADC [0 ... 255]、bit');
タイトル( '8ビットADCフレーム対時間');
終わり
図 19. Arduino UNOコントローラーのADCの入力での50 Hzピックアップのフレームごとの変更:0.27秒間で24フレーム。
4.所定のフレームの周期などの信号パラメーターを計算するためのmプログラムを開発します。
コード例:
すべてクリア
ロード( 'simout_50Hz');
d_frame = simout.Time(2)-simout.Time(1);
サンプリング= d_frame /((256 + 176)* 4); %dt
data_size =サイズ(simout.Data、1)*サイズ(simout.Data、2)*サイズ(simout.Data、3); %<256 x 1 x 54>
%フレーム番号
i = 5;
時間=(0:1023)*サンプリング+ simout.Time(i);
adc = simout.Data(:、:、i) ';
1%の場合
図
プロット(time、adc、 'b')
グリッドオン
xlabel( 'Time、s');
ylabel( 'ADC [0 ... 255]、bit');
タイトル( '8ビットADCフレーム対時間');
終わり
%期間
comp_level = 60;
jは1です。
i = 2の場合:長さ(adc)
if(adc(i)> = comp_level)&&(adc(i-1)<comp_level)
cell_num(j)= i;
j = j + 1;
終わり
終わり
s_period = diff(time(cell_num));
図 20.選択したフレーム内の信号の連続的およびポイントツーポイントの変化。 時間5フレーム:1.08 ... 1.24秒 ベクターサイズ:1024バイト。 したがって、ADC信号の1回の読み取りとスケーリングの時間は0.156 msです。
図 21.ネットワークピックアップ期間は5フレームです:19.2〜19.4ミリ秒。
タスク4 。 リアルタイムの信号スペクトル構築。
1.信号の周波数スペクトルを観察するには、Simulink> DSP System Toolbox> Sinks libraryセクションの高速フーリエ変換ブロック(Spectrum Scope:FFT)をモデルの表示された信号に接続します。
図 22.分光器でモデル化します。
図 23.ネットワーク干渉の範囲。 フレーム信号には、1024の振幅と163x4のゼロ値が含まれます。
2.信号の基本波50 Hzを強調表示します。
図 24. 50 Hzの周波数での信号の高調波。
3. Spectrum Scope:FFTユニットをスケールなし(タイミング)信号に接続します。
図 25.分光器の接続ポイントの転送。 入力では、配列(ベクトル)の最後にゼロ値の小さなゾーンを持つスケーリングされていない信号。
4.ユニットを構成します。 表示されるスペクトルのタイプを選択します:Spectrum Type。
図 26. 1024振幅の分光器のスケールなし信号のパラメーター。
タスク5 。 データを失うことなく、リアルタイムで高速ストリーミングと8pデータ処理のためのチャネルを構築します。
1. Arduino UNOコントローラー用に、ADC読み取り値の循環読み取り、スケーリング、およびヘッダー付きの2048バイトのシリアルチャネルへの転送のためのプログラムを作成します。 プログラムは、中断することなく一定の周波数でADC測定値を読み取る必要があります。
プログラム例:
const int adc_5 = A5; // ADCポート番号
void setup(){
Serial.begin(115200); //ビット/ s
}
void loop(){
for(int i = 0; i <2048; i ++){
if(i == 0)Serial.print(“ A„); //「A」はヘッダーです
int val = analogRead(adc_5);
バイトadc_byte = map(val、0、1023、0、255);
Serial.write(adc_byte);
}
}
2.コントローラーモデルを受信するようにSimulinkモデル(MatLAB)を構成します。
図 27.データの連続ストリームを表示するためのモデルの例。 フレームには2048バイトが含まれます。
3. 50 Hzネットワーク周期に従って、モデルのシミュレーション時間([メニュー]> [シミュレーション]> [コンフィギュレーションパラメーター]> [ソルバー]> [固定ステップサイズ])および[シリアル受信]> [ブロックサンプル時間]ブロックのサイクル時間(図10を参照)を設定します。
表1に基づく推定フレーム時間:254 ms(1024バイトの場合)=> 508 ms 2048バイトの場合実際には、プログラムフレーム時間(ADCが交互に読み取られて送信される)は375 msです。
図 28.フレームプロッターベクトルスコープ。 フレームには、50 Hzの波の18.75周期が含まれます。 したがって、フレーム時間は375ミリ秒、ADC変換、スケーリング、およびデータ転送の期間は0.1831ミリ秒である必要があります。
4. MatLABコマンドウィンドウで、5フレーム信号を生成するコマンドを入力します。
sgnl = [simout.Data(:、1,1) 'simout.Data(:、1,2)' simout.Data(:、1,3) 'simout.Data(:、1,4)' simout.Data (:、1,5) '];
5.信号の最初の5フレームをプロットします。
図 29.モデルの入力信号の5つのフレーム。
6.フレームジャンクションの品質を考慮します。
図 30. 5つのフレームのジョイント。 各フレームの最初のバイトに顕著な歪みがあります。 最初のバイトを最も近いポイント間の平均値に置き換えることにより、歪みを大幅に減らすことができます。
7.スペクトルアナライザーをモデル入力に接続します。 信号スペクトルをリアルタイムで監視します。
図 31.入力信号(ADC Arduino UNO)のスペクトルをリアルタイムで表示するためのモデル。
図 32. ADCコントローラーArduinoの入力でのネットワーク干渉のスペクトル。
8. Simulink> DSP System Toolbox> SinksライブラリからTime Scopeオシロスコープをモデル入力に接続します。
図 33. Arduinoコントローラーの入力信号を表示するモデルのオシロスコープ。
9.オシロスコープを設定して、現在のフレームと信号周波数の内容を表示します。
図 34.オシロスコープのタイムスコープの設定>メニュー>表示>プロパティ。
10.モデルを実行し、信号パラメーターの安定性を観察します。
図 35. Simulinkモデルオシロスコープでの信号とそのパラメーターのリアルタイム表示。
チャネルコントローラーArduino-MatLABの最新バージョンは、以前のオプションと比較して次の利点があります。
•コントローラメモリはADCデータの蓄積には使用されません。
•スケーリングのないADC変換の小さなクロックサイクルを提供します。これは、送信がない場合のスケーリングのあるADC変換のクロックサイクルよりもわずかに大きくなります。
•Simulinkモデルでは、時間内に信号をスケーリングする必要はありません。
•モデルに含まれるブロックが少ない。
•ベクターサイズとフレーム時間は実質的に無制限です。
タスク6. ADC信号のサンプリング周波数を上げる。
ArduinoコントローラーのADCサンプリング周波数は、10ビットモードでは15 kHzに、8ビットモードでは最大77 kHzに増やすことができ[3]、ライブラリ関数をマイクロコントローラーレジスタを使用するためのより高速なオプションに置き換えます。
* .inoプログラムまたはコントローラーシステムファイルでユーザー関数を作成できます。
... \ arduino-1.0.6 \ hardware \ arduino \ cores \ arduino \ lighting_analog.cに登録して
... \ arduino-1.0.6 \ハードウェア\ arduino \ cores \ arduino \ Arduino.h
8ビット高速チャネルArduino-MatLABを構築するには、以下を実行する必要があります。
1. ADCアレイにデータを入力する時間を決定し、「Serial Monitor」ウィンドウに結果を表示するプログラムを作成します。 アレイのサイズは、SRAMの半分など、十分に大きくする必要があります。 精度を上げるには、アレイの複数の充填時間を測定する必要があります。
プログラム例:
バイトadc_bytes [1024]; // ADCデータの予約配列
void setup(){
Serial.begin(57600); //ビット/ s
ADCSRA =(1 << ADEN)// ADCを有効にする
|(1 << ADPS2); //送信機のプリセレクターを8に設定します
ADMUX =(1 << ADLAR)| (1 << REFS0)//外部IONの接続
|(1 << MUX2)|(0 << MUX1)|(1 << MUX0); // ADC接続A5 == 101
}
void loop(){
unsigned long time_start = millis();
for(int j = 0; j <100; j ++){
for(int i = 0; i <1024; i ++){
ADCSRA | =(1 << ADSC); // ADC変換を開始します
while((ADCSRA&(1 << ADIF))== 0); //フラグが変換を完了するのを待つ
adc_bytes [i] = ADCH; //受信した値を読み取ります
}
}
unsigned long time_end = millis();
unsigned int dt = time_end-time_start;
Serial.println(dt);
}
1024バイトの配列の100の充填は、 1542ミリ秒で完了しました。
2.アレイ全体をシリアルポートに最大速度で続けて転送することにより、アレイへのADCデータの1回限りの充填を完了します。
プログラム例:
バイトadc_bytes [1024]; // ADCデータの予約配列
void setup(){
Serial.begin(115200); //ビット/ s
ADCSRA =(1 << ADEN)// ADCを有効にする
|(1 << ADPS2); //送信機のプリセレクターを8に設定します
ADMUX =(1 << ADLAR)| (1 << REFS0)//外部IONの接続
|(1 << MUX2)|(0 << MUX1)|(1 << MUX0); // ADC接続A5 == 101
}
void loop(){
for(int i = 0; i <1024; i ++){
ADCSRA | =(1 << ADSC); // ADC変換を開始します
while((ADCSRA&(1 << ADIF))== 0); //フラグが変換を完了するのを待ちます
adc_bytes [i] = ADCH; //受信した値を読み取ります
}
// ADCデータをシリアルポートに送信します
Serial.print( "A"); //「A」はヘッダーです
for(int i = 0; i <1024; i ++){
Serial.write(adc_bytes [i]);
}
}
3. Simulinkモデル(図36)で0.01542の形式で、記録時間の実験値を配列に書き込みます。つまり、「シリアル受信」ブロックの「ブロックサンプル時間」行およびメニューバー>シミュレーション>構成パラメーター>固定ステップサイズ(基本的なサンプル時間)。
<img src = "
図 36. COMポートからデータを受信および表示するためのSimulinkモデル。
4.テスト信号をADC入力に接続します。 Arduinoプログラムを実行してから、Simulinkモデル(MatLAB)を実行します。 既知の信号パラメーターを観測信号のパラメーターと比較します。 Arduinoボードの交互に接続された出力電圧を表示することにより、路の動作を確認できます。0V。 3.3Vおよび5V。
<img src = "<img src ="
図 37.ネットワーク50 Hzピックアップのリアルタイム表示。 フレームには1024ポイントが含まれます。 フレーム時間15.42ミリ秒。 サンプリング周波数66 kHz(1 /(0.01542_sec / 1024))。 : .
<img src="
図 38. 0… 3.3 , Teensy 3.1 12 (A5) Arduino.
<img src="
図 39. 500 Teensy 3.1. (15.42 ) Simulink 1% ( 100%*(504.72 — 500)/500). RT , .3 .
1. .
2. ?
3. 1024 115200 /c ?
• Data bits: 8
• Parity: none
• Stop bits: 1
• Flow control: none
1. DSP System Toolbox. matlab.ru/datasheets/Dsp-system-toolbox-Ru.pdf
2. Dr. Bob Davidov. USB Lcard E14-440 (S-function) portalnp.ru/2013/09/1036
3. ATmega48A/PA/88A/PA/168A/PA/328/P. ATMEL 8-bit microcontroller with 4/8/16/32kbytes in-system programmable flash DATASHEET ( 237) www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf
4. Dr. Bob Davidov. portalnp.ru/author/bobdavidov .