サービスホットライン
MCUはマイクロコントローラユニットの略で、中国語ではマイクロコントローラの略称であり、一般的にはシングルチップマイクロコンピュータとして知られています。これは、CPUの周波数と仕様を適切に縮小し、メモリ、カウンタ、USB、A/D変換、UART、PLC、DMA、さらにはLCDドライバ回路などの周辺インターフェースを1つのチップに統合して、チップレベルのコンピュータを形成するものです。携帯電話、PC周辺機器、リモコン、車載エレクトロニクス、産業用ステッピングモーター、ロボットアーム制御など、さまざまなアプリケーションに対して、さまざまな組み合わせの制御を実行できます。MCUは図に示されています。
XNUMXつ
マイクロコントローラの開発に関する簡単な歴史
マイクロコントローラの歴史は長くはないが、非常に急速に発展してきた。その生産と開発は、一般的にマイクロプロセッサ(CPU)の生産と開発と同期している。1971年にアメリカのインテル社が初めて4ビットマイクロプロセッサを発表して以来、その発展は大きく5つの段階に分けられる。以下では、インテル社によるマイクロコントローラの開発について紹介する。
1971〜1976
マイクロコントローラの開発初期段階。1971年11月、インテルは、RAM、ROM、シフトレジスタを搭載した、1チップあたり2,000個のトランジスタを集積した4ビットマイクロプロセッサであるIntel 4004を初めて設計し、最初のMCS-4マイクロプロセッサを形成した。その後、8ビットマイクロプロセッサであるIntel 8008を発表し、他の企業からも8ビットマイクロプロセッサが発売された。
1976〜1980
低性能マイクロコントローラ段。1976年にインテルが発売したMCS-48シリーズに代表されるこのシリーズは、8ビットCPU、8ビットパラレルI/Oインターフェース、8ビットタイマー/カウンタ、RAM、ROMを1つの半導体チップに統合したモノリシック構造を採用している。アドレス範囲は限られており(最大4KB)、シリアルI/Oはなく、RAMとROMの容量も小さく、割り込みシステムも比較的単純だが、その機能は一般的な産業制御やインテリジェント計測機器のニーズを満たすことができる。
1980〜1983
高性能マイクロコントローラ段階。この段階で登場する高性能8ビットマイクロコントローラは、一般的にシリアルポート、多段階割り込み処理システム、複数の16ビットタイマー/カウンタを備えています。オンチップRAMとROMの容量が増加し、アドレス範囲は最大64KBに達します。一部のチップにはA/D変換インターフェースも搭載されています。
1983年~1980年代後半
16ビットマイクロコントローラの登場。1983年、インテルは高性能16ビットマイクロコントローラMCS-96シリーズを発表しました。最新の製造技術を採用したことで、チップ集積度は1チップあたり12万個のトランジスタという高水準を実現しています。
1990s
マイクロコントローラは、集積度、機能性、速度、信頼性、応用分野など、あらゆる面でより高いレベルへと発展している。
2
シングルチップマイクロコンピュータの分類と応用
MCUは、メモリの種類によって、オンチップROMを搭載していないものと搭載しているものの2種類に分類できます。オンチップROMを搭載していないチップは、使用する前に外部EPROMを接続する必要があります(通常は8031)。オンチップROMを搭載しているチップは、オンチップEPROMタイプ(代表的なチップは87C51)、MASKオンチップマスクROMタイプ(代表的なチップは8051)、オンチップフラッシュタイプ(代表的なチップは89C51)などに分類されます。
用途に応じて汎用型と特殊用途型に分類でき、データバスの幅と一度に処理できるデータバイトの長さに応じて、8ビット、16ビット、32ビットのMCUに分類できる。
現在、国内におけるMCUの応用市場は、家電製品分野が最も大きく、次いで産業機器分野、車載エレクトロニクス分野となっている。家電製品分野には、家庭用電化製品、テレビ、ゲーム機、オーディオ・ビデオ機器などが含まれる。産業機器分野には、スマートホーム、自動化、医療機器、新エネルギーの発電・配電などが含まれる。車載分野には、自動車のパワートレインや安全制御システムなどが含まれる。
三
マイクロコントローラの基本機能
ほとんどのMCUにおいて、以下の機能は最も一般的で基本的なものです。MCUの種類によって説明の仕方は異なる場合がありますが、基本的には同じです。
1. タイマー: タイマーには多くの種類がありますが、大きく 2 つのカテゴリに分類できます。1 つは固定時間間隔のタイマーで、タイミング時間はシステムによって設定され、ユーザー プログラムで制御することはできません。システムは、32Hz、16Hz、8Hz など、ユーザー プログラムが選択できるいくつかの固定時間間隔のみを提供します。このタイプのタイマーは 4 ビット MCU でより一般的であるため、クロック、タイミング、およびその他の関連機能を実装するために使用できます。
もう1つのタイプはプログラマブルタイマーです。名前が示すように、このタイプのタイマーのタイミングはユーザープログラムによって制御できます。制御方法には、クロックソースの選択、周波数分割(プリスケール)の選択、プリセット数の設定などがあります。一部のMCUはこれら3つすべてを同時に備えていますが、他のMCUは1つまたは2つしか備えていない場合があります。このタイプのタイマーの用途は非常に柔軟で、実際の用途も常に変化しています。最も一般的な用途の1つは、PWM出力の実装に使用することです。
クロックソースを自由に選択できるため、このタイプのタイマーは一般的にイベントカウンターと組み合わせて使用されます。
2. IOポート:どのMCUにも一定数のIOポートがあります。IOポートがないと、MCUは外部との通信手段を失います。IOポートの構成可能性に応じて、以下の種類に分類できます。
純粋な入力ポートまたは純粋な出力ポート:このタイプのIOポートは、MCUのハードウェア設計によって決まります。入力または出力のみが可能で、ソフトウェアによるリアルタイム設定はできません。
IOポートの直接読み書き:例えば、MCS-51のIOポートはこのタイプのIOポートに属します。IOポートの読み取り命令が実行されると入力ポートになり、IOポートの書き込み命令が実行されると自動的に出力ポートになります。
入出力方向を設定するプログラミング:このタイプのIOポートの入出力は、実際のニーズに応じてプログラムによって設定されます。アプリケーションは比較的柔軟で、I2Cバス、各種LCD、LEDドライバ制御バスなど、いくつかのバスレベルのアプリケーションを実現できます。
IOポートを使用する際に留意すべき重要な点は次のとおりです。入力ポートについては、フローティング状態にならないように明確なレベル信号が必要です(これはプルアップ抵抗またはプルダウン抵抗を追加することで実現できます)。出力ポートについては、出力ステータスレベルは外部接続条件を考慮する必要があり、スタンバイ状態または静止状態では電流の引き込みやシンクが発生しないようにする必要があります。
3. 外部割り込み: 外部割り込みも、ほとんどのMCUの基本機能です。一般的に、信号のリアルタイムトリガー、データサンプリング、およびステータス検出に使用されます。割り込み方式には、立ち上がりエッジトリガー、立ち下がりエッジトリガー、およびレベルトリガーがあります。外部割り込みは通常、入力ポートを介して実装されます。IOポートの場合、その割り込み機能は入力に設定されている場合にのみオンになります。出力ポートの場合、外部割り込み機能は自動的にオフになります(ATMELのATinyシリーズには例外があり、出力ポートの場合でも割り込み機能をトリガーできます)。外部割り込みのアプリケーションは次のとおりです。
外部トリガー信号の検出:一つはサイリスタの制御や突発的な信号の検出など、リアルタイム要件に基づくものであり、もう一つは省電力の必要性に基づくものである。
信号周波数の測定:信号の欠落を防ぐためには、外部割り込みが理想的な選択肢です。
データのデコード:リモートコントロールアプリケーションの分野では、設計コストを削減するために、マンチェスター符号化やPWM符号化などの様々な符号化データをデコードするソフトウェアを使用することがしばしば必要になります。
キー検出とシステム起動:スリープ状態に入るMCUは、通常、外部割り込みによって起動する必要があります。最も基本的な形式はキー押下であり、キー操作によってレベル変化が発生します。
4. 通信インターフェース:MCUが提供する通信インターフェースには、一般的にSPIインターフェース、UART、I2Cインターフェースなどがあり、以下に説明します。
SPIインターフェース:このタイプのインターフェースは、ほとんどのMCUが提供する最も基本的な通信方法です。データ伝送は同期クロックによって制御されます。信号には、SDI(シリアルデータ入力)、SDO(シリアルデータ出力)、SCLK(シリアルクロック)、およびReady信号が含まれます。場合によっては、Ready信号がないこともあります。このタイプのインターフェースは、マスタモードまたはスレーブモードで動作できます。一般的には、クロック信号を提供する側によって決まります。クロックを提供する側がマスタ、反対側がスレーブです。
UART(Universal Asynchronous Receive Transmit):最も基本的な非同期伝送インターフェースです。信号線はRxとTxの2本のみです。基本的なデータ形式は、スタートビット+データビット(7ビット/8ビット)+パリティビット(偶数、奇数、またはなし)+ストップビット(1~2ビット)です。1ビットのデータが占める時間をボーレートと呼びます。
ほとんどのMCUでは、データビット長、データチェックモード(奇数チェック、偶数チェック、またはチェックなし)、ストップビット長、およびボーレートをプログラムプログラミングによって柔軟に設定できます。このタイプのインターフェースで最も一般的に使用される方法は、PCのシリアルポートとの通信です。
I2Cインターフェース:I2Cは、フィリップス社が開発したデータ伝送プロトコルです。SDAT(シリアルデータ入出力)とSCLK(シリアルクロック)の2つの信号を使用して実装されます。最大の利点は、複数のデバイスをこのバスに接続し、アドレスを介して識別およびアクセスできることです。I2Cバスの大きな利点の1つは、IOポートを介してソフトウェアを使用して実装するのが非常に簡単であることです。伝送データレートは、UARTインターフェースのように厳密なレート要件があるのではなく、高速または低速にできるSCLKによって完全に制御されます。
5. ウォッチドッグ(ウォッチドッグタイマー):ウォッチドッグもほとんどのMCUの基本構成です(一部の4ビットMCUにはこの機能がない場合があります)。ほとんどのMCUのウォッチドッグは、プログラムによるリセットは許可しますが、オフにはできません(Microchip PICシリーズMCUのように、プログラムの書き込み時に設定されるものもあります)。また、SamsungのKS57シリーズのように、オンにするかどうかを決定する特定の方法を使用するMCUもあります。プログラムがウォッチドッグレジスタにアクセスすると、自動的にオンになり、再びオフにすることはできません。一般的に、ウォッチドッグのリセット時間はプログラムで設定できます。ウォッチドッグの最も基本的な用途は、予期せぬ障害によりクラッシュしたMCUに自己回復機能を提供することです。
四
世界的な主流マイクロコントローラメーカー
マイクロコントローラーを学ぶためのヒント
マイクロコントローラプログラミング
割り込み処理とメインプログラム本体で、同じ変数やデータが同時にアクセスまたは設定されるのを防ぐ必要があります。効果的な防止策としては、そのようなデータの処理をモジュールにまとめて、トリガーフラグを判定することで、データに対する関連操作を実行するかどうかを決定する方法があります。他のプログラム本体(主に割り込み処理)では、データの処理が必要な箇所でのみトリガーフラグを設定します。これにより、データの実行が予測可能かつ一意に行われることが保証されます。
マイクロコントローラアプリケーションの開発においては、コード使用効率、耐干渉性能、マイクロコントローラの信頼性といった問題が依然として課題となっています。そこで今回は、マイクロコントローラ開発において習得すべき基本的なスキルをいくつかまとめました。
8
マイクロコントローラ開発スキル
1. プログラムのバグを減らす方法
プログラムのバグを減らす方法については、まずシステム運用中に考慮すべき以下の範囲外管理パラメータを検討する必要があります。
- 物理的パラメータ:これらのパラメータは主にシステムの入力パラメータであり、励起パラメータ、取得処理中の動作パラメータ、および処理終了時の結果パラメータが含まれます。
- リソースパラメータ:これらのパラメータは主に、システム内の回路、デバイス、機能ユニットのリソースであり、メモリ容量、記憶ユニットの長さ、スタッキング深度などが含まれます。
- アプリケーションパラメータ:これらのアプリケーションパラメータは、マイクロコントローラや機能ユニットの適用条件としてよく現れます。プロセスパラメータ:システム動作中に規則的に変化するパラメータを指します。
2. C言語プログラミングコードの効率を向上させる方法
マイクロコントローラの開発と応用において、マイクロコントローラプログラミングにC言語を使用することは必然的な流れです。C言語でプログラミングする際に最大限の効率性を得るには、使用するCコンパイラに精通しておくことが最善です。まず、各C言語コンパイルに対応するアセンブリ言語ステートメントの行数をテストし、効率性を明確に把握しましょう。今後のプログラミングでは、コンパイル効率が最も高いステートメントを使用します。Cコンパイラはそれぞれ異なるため、コンパイル効率も異なります。組み込みシステム向けの優れたCコンパイラのコード長と実行時間は、同じ機能をアセンブリ言語で記述した場合と比べてわずか5~20%長くなるだけです。
開発期間が短い複雑なプロジェクトでは、C言語を使用できますが、前提条件として、MCUシステムのC言語とCコンパイラに精通している必要があります。Cコンパイルシステムがサポートするデータ型とアルゴリズムに特に注意してください。C言語は最も一般的な高級言語ですが、MCUメーカーによってC言語コンパイルシステムが異なり、特に一部の特殊機能モジュールの動作において違いが生じます。そのため、これらの特徴を理解していないと、デバッグ中に多くの問題が発生し、アセンブリ言語よりも実行効率が低下する可能性があります。
干渉を防ぐ最も効果的な方法は、干渉源を取り除き、干渉経路を遮断することですが、これはしばしば困難であるため、マイクロコントローラの耐干渉能力が十分かどうかを確認するしかありません。ハードウェアシステムの耐干渉能力を向上させる一方で、ソフトウェアによる耐干渉は、その柔軟な設計、ハードウェアリソースの節約、および高い信頼性から、ますます注目を集めています。
マイクロコントローラの干渉で最もよく見られる現象はリセットです。プログラムの暴走に関しては、ソフトウェアトラップやウォッチドッグを用いることで、プログラムをリセット状態に戻すことができます。したがって、マイクロコントローラのソフトウェアが干渉に対抗するために最も重要なことは、リセット状態を適切に処理することです。
一般的に、マイクロコントローラにはリセットの原因を特定するために使用できるフラグレジスタがいくつかあります。さらに、RAMに独自のフラグを埋め込むこともできます。プログラムがリセットされるたびに、これらのフラグを判断することで異なるリセット原因を特定できます。また、異なるフラグに基づいて対応するプログラムに直接ジャンプすることもできます。これにより、プログラムは継続的に実行され、ユーザーはプログラムの使用中にリセットされたことに気づかないようになります。
4. マイクロコントローラシステムの信頼性をテストする方法
マイクロコントローラシステムの設計が完了すると、マイクロコントローラシステム製品ごとに異なるテスト項目と方法が存在するが、必ずテストしなければならない項目がいくつかある。
- マイクロコントローラのソフトウェア機能の完全性をテストする
- 電源オン/オフテスト
- 老化テスト
- ESDやEFTなどのテスト
場合によっては、人体使用時に発生する可能性のある損傷をシミュレートすることもできます。例えば、マイクロコントローラシステムの接点ポートを人体や衣服の生地で意図的にこすり、帯電防止性能をテストします。また、高出力の電動ドリルをマイクロコントローラシステムの近くで使用し、電磁干渉に対する耐性をテストします。
さらに、開発および応用プロセスにおいては、より幅広い用途に利用できるよう、スキルを習得し、効率性を向上させる必要がある。
9
チップ動作概要
チップ上での動作は主に、チップ内のレジスタに対する操作です。チップ内のレジスタはそれぞれ固有のアドレスをメモリ上にマッピングしており、操作はそのアドレスに対して行われます。チップの動作を理解するには、まずタイミング図を確認し、対応するレジスタを理解し、それらの動作原理を把握し、必要なポート(プログラムで識別可能)を定義し、書き込み操作手順と読み出し操作手順を作成する必要があります。
モニターやプリンターに中国語の文字を出力するためには、中国語の文字をグラフィックシンボルに基づいてドットマトリックスに設計し、対応するドットマトリックスコード(グリフコード)を取得する。
GB1616.h//------------------ 中国語文字フォントデータ構造の定義 ------------------------//structtypFNT_GB16 //中国語文字フォントデータ構造 {unsignedcharIndex[3]; //中国語文字内部コードインデックス unsignedchar Msk[32];//ドットマトリックスコードデータ }; //////////////////////////////////////////////////////////////////////////////////// 中国語文字フォントテーブル//// 中国語文字ライブラリ: 宋代 16.ドット、左上ビットを水平方向にモジュロ、データ配置: 左から右、上から下////////////////////////////////////////////////////////////////////////////////// conststructtypFNT_GB16 codeGB_16[]= //データテーブル{/*---------------------------------------------------------------------------------;ソースファイル/テキスト:Xu;幅×高さ(ピクセル):16×16--------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x 20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00, この構造は非常にシンプルです。1つは内部コード、もう1つはドットマトリックスシーケンスです。以前のドットマトリックスライブラリは内部コードの順序で配置されていたため、内部コードインデックスは必要ありませんでした。中国語の文字だけを配置する場合は、内部コードインデックスが必要でした。(先頭の中国語の文字「Xu」は、「Xu」を出力するときに単語のドットマトリックスシーケンスを見つけるためのものです。このドットマトリックスシーケンスは私が書きました。1602で表示する場合、チップのメモリに英語のドットマトリックスシーケンスがあるため、書き込む必要はありません。)通常、内部コードには2バイトで十分です。1バイト多く使用する場合は、末尾に0を追加するだけです。このようにして、中国語の文字列を中国語の内部コードに直接配置できます。
13. 12864 LCD:
各表示点はバイナリ数に対応しており、1はオン、0はオフを意味します。これらのドットマトリックス情報を格納するRAMは、表示データメモリと呼ばれます。特定の図形や漢字を表示するには、対応するドットマトリックス情報を対応する記憶装置に書き込む必要があります。
グラフィックRAMのアドレスカウンタ(AC)は、水平アドレス(X軸)のみを自動的に1ずつインクリメントします。水平アドレスが0FHになると、00Hにリセットされます。しかし、キャリーによる垂直アドレスの自動インクリメントは行いません。そのため、複数のデータが連続して書き込まれる場合、プログラムは垂直アドレスをリセットする必要があるかどうかを判断する必要があります。
描画表示用RAMは128×8バイトのメモリ空間を提供します。描画用RAMを変更する際は、まず水平座標値と垂直座標値を連続して書き込み、次に2バイトのデータを描画用RAMに書き込みます。アドレスカウンタ(AC)は水平アドレス(Xアドレス)を自動的に1つ増やします。水平アドレスが0XFHの場合、00Hにリセットされます。垂直アドレスは自動的に1つ増やされません。描画用RAMへの書き込み中は、描画表示をオフにする必要があります。
[cpp] view plain copy//中国語の文字を表示する voiddispString (uchar X, Y,uchar *msg)//Xがどの行で、Yがどの列か。msgは中国語の文字です {if(X==0) write_data(*msg++); //中国語の文字を表示}}/////////////////////////////////// //////////////// ////////////////// 画像を表示 voiddisppicture(uchar code *adder){ uint i,j;//*******画面の上半分コンテンツ設定を表示 for(i=0;i<32;i++)//画面の上半分に32列のアドレス { write_com(0x80 + i);//垂直アドレスをVERTICALADDに設定 write_com(0x80);//水平アドレスをHORIZONTAL ADDに設定 for(j=0;j<16;j++) { write_data(*adder); adder++; }}//************画面下半分にコンテンツ設定を表示する for(i=0;i<32;i++) //{ write_com(0x80 + i); //垂直アドレス VERTICALADD を設定 write_com(0x88); //水平アドレス HORIZONTAL ADD を設定 for(j=0;j<16;j++){write_data(*adder);adder++;} }} C言語では、定義された変数には自動的にメモリ領域が割り当てられ、そのアドレスが変数名となります。この変数名によって、メモリ内のデータを取得したり、計算によって新しいデータを得たりすることができます。一方、アセンブリ言語では、プログラマが記憶領域を定義し、計算のためにデータをアキュムレータに送信する必要があります。すべてのステップでプログラマの操作が必要となります。C言語では、これらの処理はコンパイラによって自動的に行われます。
①. マイクロコントローラC言語では、変数のメモリ割り当てはどのように行われるのでしょうか?コンパイラがコンパイル時に割り当てと再利用のコードをインテリジェントに追加しているのでしょうか?重要なのは、私が作成したプログラムでメモリオーバーフローエラーが発生しないようにするにはどうすればよいかということです。再帰処理を行う場合、必要なメモリ量を自分で計算するのは困難です。
変数が多すぎると、コンパイラはデータセグメントが大きすぎると警告を発します。メモリオーバーフローエラーが発生しないようにするには、スタックオーバーフローが発生しないかどうかが主な考慮事項となりますが、これは経験によって異なります。
マイクロコントローラはビット変数を定義できますが、ビット配列を定義できません。C言語での記述は簡単そうに見えますが、実際には最も多くのコードを生成します。制御に使用されるマイクロコントローラは浮動小数点演算をほとんど使用しないため、処理速度が遅いだけでなく、処理が煩雑で、メモリ容量も消費します。DSPチップであれば、適切なハードウェア構造を備えている方がはるかに優れています。
会社の電話番号:+86-0755-83044319
ファックス番号:+86-0755-83975897
Eメール:1615456225@qq.com
QQ: 3518641314 李マネージャー
QQ: 332496225 邱マネージャー
住所:深圳市龍華新区民治大道1079号 占濤科技ビルC棟809室




粤公网安备44030002007346号