• 検索結果がありません。

Microsoft Word - マイコンを用いた信号# doc

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft Word - マイコンを用いた信号# doc"

Copied!
9
0
0

読み込み中.... (全文を見る)

全文

(1)

マイコンを用いた信号制御

1. 目的  ディジタル信号処理や任意ディジタル波形の生成などに用いられる汎用マイコンの使用法を理解し,C 言語に よる制御プログラムを作製することにより,センサやスイッチからの入力信号に応じた発光ダイオードの点灯制 御,直流モータの回転制御のための信号処理を行い,マイコンによるディジタル制御について理解を深める. 2. 原理 2.1 組み込み機器用マイコン  マイコンとはマイクロコンピュータ(またはマイクロコントローラ)の略語で電化製品などを制御するために 組み込まれている超小型のコンピュータのことである.パーソナルコンピュータとは異なり,特定の機能を実現 するためのコンピュータで,例として携帯電話,自動販売機,テレビ,炊飯器などの組み込みシステムとして使 用されている.これらのシステムは従来電気的・電子的なロジックを使用していたが,1980 年代以降のコンピュ ータの発達により,ソフトウェア的にシステムの機能拡張や修正が可能になり,コストを削減できることから急 速に普及した.マイコンは最終的な製品が多岐にいたるため,様々な用途別に多くの種類と数が出回っている.  代表的なものとして米国ザイログ社のZ80,米国マイクロチップテクノロジー社の PIC,米国アトメル社の AVR, 日本ルネサステクノロジ社のSuperH や H8 等がある.

 中でも PIC(Peripheral Interface Controller)は,コンピュータと周辺機器の インターフェース制御を行うために開発されたワンチップマイコンであり, 他のマイコンよりも機能を絞っているため構造はシンプルで、小型・安価と いった特徴がある.しかし 20MHz の高クロック周波数で動作するものや複数 の AD コンバータやコンパレータを内蔵しているものなど高性能な製品も存 在し,小規模の組み込み機器用としては最適と考えられる. 2.2 PIC16F84A  PIC で多く書籍や Web で取り上げられている型番は 16F84A である.16F84A は,アナログ入出力は使用できな いものの,プログラミング次第で電源として必要な 2 つの ピン以外の全てをディジタル入出力として使用できるため, 多くの組み込み機器に使用することができる.また動作ク ロックも最大 20MHz であり,高速動作が可能である.今 回は,ソフトウェア開発手順を簡略化するため,入出力ポ ート A を入力,B を出力として取り扱う. 2.3 制御プログラムの開発  PIC が正式にサポートしているソフトウェア作製方法はアセンブラによるプログラミングである.しかし,ア センブラを容易に習得することは難しい.そこで正式にはサポートされていないが,多くのサードパーティによ 18 17 16 14 15 13 11 12 10 1 2 3 4 5 6 7 8 9 P IC 1 6F 8 4A -2 0P 03 15 02 5 RA1 RA0 CLK1 CLK2 VDD RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 VSS CLR RA4 RA2 RA3 図1 PIC16F84A-20/P の外観 表1 PIC16F84A-20/P のピン仕様 ピン名称 ピン番号 用途 RA0 4 17,18,1,2,3 入出力ポートA RB0 7 6,7,8,9,10,11,12,13 入出力ポートB VDD 14 電源端子 VSS 5 GND 端子 CLR 4 クリア端子 CLK1,CLK2 15,16 クロック入力端子

(2)

り開発環境が提供されている C 言語を用いてソフトウェアを開発する.本実験では,PIC 製造元のプログラム統 合開発環境であるMPLAB IDE と Custom Compiler Service 製のコンパイラ PIC C Compiler(PICC)を使用する.なお, PICC は C++には完全対応していないので注意が必要である.

 MPLAB IDE では,ソースプログラムの作成とコンパイルを行う.以下に MPLAB IDE によるソフトウェアプ ロジェクトの作製手順を示す.

(1)
 デスクトップの MPLAB IDE アイコンをダブルクリックして起動する.

(2)
 「Project」→「Project Wizard」を選択し,Welcome!画面が表示されたら「次へ」を選択する. (3)
 ステップ 1 の「Device」選択画面で「PIC16F84A」を選択する.

(4)
 ステップ 2 の「Active Toolsuite」から「CCS Compiler for PIC12/14/16/18」を選択する.

(5)
 ステップ 3 の「Project Name」に適当な名前をつけ,「Project Directory」からプロジェクトを作成する 場所を選択する.

ただし,Project Name と Project Directory には全角文字は使用できないので注意すること. (6)
 ステップ 4 では何も行わず「次へ」を選択する (7)
 「Summary」画面で作成したプロジェクトの詳細を確認し完了ボタンを押す. (8)
 「File」→「New」を選択すると空のテキスト入力画面が作成される. (9)
 「File」→「Save as」で空のテキストファイルを保存する (10)
 画面左上に表示されている「プロジェクト名.mcw」のリスト上で「Source Files」を右クリックし「Add Files」を選択する. (11)
 手順(9)で保存した C ソースファイルを選択する.  以上の手順で,MPLAB IDE 上でソフトウェアを開発する準備が整う.次回以降,これらの手順を省くために 「File」→「Save Workspace」でプロジェクトを保存しておく. 2.4 C ソースファイルの作成  C 言語によるソフトウェア開発手順は,通常のプログラミング方法と変わりがない.ただし,ソースの始めに PIC 専用のヘッダーファイルを読み込んだり,特殊な設定を行う必要がある.信号処理もあらかじめ用意された 関数群があるのでそれらを利用すればよく,特に新しいことを覚える必要はない.信号処理を行う際によく使う 関数一覧は付録に掲載している.  以下に,サンプルコードを示す.PIC の信号処理は一般的に無限ループの中で行う. // Sample 1

#include <16F84A.h> // PIC16F84A の設定ファイルを読み込み #fuses HS, NOWDT,PUT,NOPROTECT // PIC16F84A の動作設定

#use delay(CLOCK=4000000) //外付けセラミック発振子の発振周波数

// メイン関数 void main() {

(3)

// 出力ポートの初期化 set_tris_b(0x00); // 出力ピンの初期化 output_b(0x00); while(1) { // PIC の信号処理は無限ループ内で行う. output_b(0xFF); delay_ms(300); output_b(0x00); delay_ms(300); } } 2.5 ソースコードのコンパイル  C 言語による制御プログラムの作成に続き,PIC へ制御プログラムを書き込むにはソースコードのコンパイル を行う必要がある.ソースコードのコンパイルは F10 キーを押すことで実行される.コンパイルの際にエラーコ ードが表示される場合があるので,コンパイルエラーが出なくなるまでプログラムの修正を行う.  また,コンパイル時の警告として,

Warning 203 "「プログラムソースの場所」" Line 「行数」(1,1): Condition always TRUE

の行数が while(1)の部分に出るのは無視して良い.その他の警告は全て表示させないようにプログラムの修正を すること.

 ソースコードのコンパイルが終了するとプログラムを保存したフォルダに「ファイル名.HEX」という PIC 書き 込みファイルが作成される.

2.5 PIC への書き込み

 コンパイルして作成された HEX ファイルを PIC へ書き込む.PIC への書き込みは秋月電子通商製の PIC ライ タと書き込み用ソフトウェアAE-PIC プログラマ V4 を使用する.

(1)
 PIC ライタの電源を入れ,AE-PIC プログラマ Ver 4 を起動する.

(2)
 デバイス選択から「PIC16F84A」を選択して,ライタへ F84 をセットする. (3)
 ZIF ソケットのレバー側に IC の 9 番,10 番ピンがくるように F84 を取り付ける. (4)
 「Hex ロード」で作成した HEX ファイルを読み込む. (5)
 「プログラム」で PIC にプログラムを書き込む.確認のメッセージが表示されたら上書きを行う. (6)
 正常終了を確認後,ZIF ソケットのレバーを上げ,F84 を PIC ライタから取り外す.  以上の行程で,PIC へのプログラム書き込みが終了する.書き込んだ PIC は実験用ボードに取り付けて評価を 行う.

(4)

3. 仕様器具

 PIC プログラム開発環境

Microchip Technology 製 PIC マイコンプログラム統合開発環境 MPLAB IDE 6.60 Custom Compiler Service 製 PIC C Compiler(PICC)PCM Version 3.182

 PIC ライタ

秋月電子通商製 PIC Programmer Ver 4.0  PIC 用 LED ボード

Microchip Technology 社製 PIC16F84A-20/P(以下,F86 図 1 と表 1 に外観とピン仕様を示す),4MHz セラミック発振子,ピンヘッダ,DIP スイッチ,タクトスイッチ,LED 等

 PIC 自走車

東芝製 DC モータドライバ TA7257P(又は TA8429H)にマブチ製 RE-130 モータが接続されたものが 2 組.PIC マイコンにより回転,停止を制御する. 4. 実験方法 4.1 PIC を用いた LED 制御  F84 を用いて LED の点灯・点滅回路をプログラミングする.使用する LED ボードを図 2 に示す.また,入出 力ポートを以下のように設定する. ・
 ポートA0,A1,A2,A3,A4⋯入力スイッチ 0,1,2,3,4 に対応 ・
 ポートB0,B1,B2,B3,B4,B5,B6,B7⋯LED の 0,1,2,3,4,5,6,7 に対応  ポートA はスイッチを押した場合に HIGH 信号がそれぞれのピンに入力され,ポート B には HIGH 信号をセッ トすることによりLED が点灯する.これらの仕様をもとに以下の実験を行う.  各実験においてどのような出力信号を発生させたか付録の表を使用してまとめる. (1) 2 3 ページのサンプルソースコードを作成・コンパイルして,PIC に書き込む.サンプルプログラム がどのような動作をしているか検証してみる.ソースコード内の関数は,付録8 を参考にすること. (2) サンプルコードに,スイッチ 1 を押してから LED が光り始めるソースコードを追加してみる.入力ス イッチを押したかどうかの判定は,input 関数および C 言語の if 文などを用いる. (3) サンプルコードを参考にして,スイッチ 2 を押すと LED0,1,6,7 と LED2,3,4,5 が 1 秒おきに交互に点滅 出力LED リセットスイッチ 入力スイッチ 入力スイッチ 電源LED 電源スイッチ リセットLED   18 17 16 14 15 13 11 12 10 1 2 3 4 5 6 7 8 9 PIC 16 F8 4A -2 0P 03 15 02 5 RA1 RA0 CLK1 CLK2 VDD RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 VSS CLR RA4 RA2 RA3 3 .3 kΩ 3 .3 kΩ 3 .3 kΩ 3 .3 kΩ 3 .3 kΩ 3 .3 kΩ 3 .3 kΩ 3 .3 kΩ 3.3kΩ 3.3kΩ 3.3kΩ 3.3kΩ 3.3kΩ 3.3kΩ 3 .3 kΩ RESET RA4 RA3 RA2 RA0 RA1 POWER VDC6V CLOCK 4MHz LED (g) L E D (y 0 ) L E D (y 1 ) L E D (y 2 ) L E D (y 3 ) LE D (r 4) LE D (r 5) LE D (r 6) LE D (r 7) LE D (r ) 図2 LED ボード

(5)

するソースコードを作成してみる. (4) スイッチ 3 を押すと 0.2 秒間隔で 2 進数をカウントするソースコードを作成してみる. output_x()関数の引数には 10 進数を用いてもよいので,for 文などをうまく利用するとよい. (5) スイッチ 4 を押すと LED が端から端へ繰り返し流れるように点灯し続ける制御パターンを考えソース コードを作成してみる.時間間隔は班員で相談して決定する. (6) (5)の制御パターンに加え,スイッチ 0 を押すと点灯制御が終了するソースコードを追加してみる. (7) スイッチ 0 を押すと LED0,1,6,7 が暗く点灯し,LED2,3,4,5 が明るく点灯する制御コードを作成してみ る.ただし,LED への印加電圧は PIC マイコンの仕様により VDD に加えた電圧(本実験では 6V)と なっているため,LED の明るさを調節するために,付録の PWM 制御を用いる. (8) スイッチ 0 と 1 を同時に押すと,LED0,1,2,3 と LED4,5,6,7 が違う時間間隔で点滅を繰り返す制御コー ドを作成してみる.ただし,スイッチ 2 つを厳密に同時押しすることは難しいため,スイッチ 2 つを押 した状態でクリアスイッチを押すこと.  思い通りに動かなかった場合はその理由を考えてレポートにまとめること. 4.2 PIC を用いた直流モータ制御  PIC を用いて模型用直流モータの回転制御を行う.PIC の出力端子からの信号では直流モータの回転制御を行 う直接行うことができないため,直流モータの回転制御に特化した H ブリッジ接続されたトランジスタが一つの IC にパッケージングされたモータドライブ IC(東芝製 TA7257P,および TA8492H)を使用する.TA7572P,TA8429H の制御端子IN-1,IN-2 および IN-3 には表 2,3 に示す信号を加えることでモータの動作が決定する.基板上の PIC とTA7572P および TA8429H は表 4,5 に対応するとおりに接続されている.

 図6 に実験で使用する PIC 自走車の外観を示す.PIC 自走車(小)には TA7257P が,PIC 自走車(大)には TA8429H がモータドライバとして使用されている. 表2 TA7257P の動作 IN-1 IN-2 動作 L L ブレーキ動作 H L 時計方向回転 L H 反時計方向回転 H H ハイインピーダンス 表4 TA7257P と PIC マイコンの対応表 PIC TA7257P RB0 モータ1 IN-1 RB1 モータ1 IN-2 RB2 モータ2 IN-1 RB3 モータ2 IN-2 表3 TA8429H の動作

IN-1 IN-2 IN-3 動作

L L H ブレーキ動作 L H H 時計方向回転 H L H 反時計方向回転 H H H ハイインピーダンス * * L ハイインピーダンス 表5 TA8429H と PIC マイコンの対応表 PIC TA8429H RB0 モータ1 IN-3 RB1 モータ1 IN-1 RB2 モータ1 IN-2 RB4 モータ2 IN-3 RB5 モータ2 IN-2 RB6 モータ2 IN-1

(6)

 上記の TA7257P および TA8492H と PIC マイコンの出力ピン対応表をもとに,次のような動作を行う PIC 自走 車の制御プログラムを作成し,PIC 自走車を走らせてみる.  また,各実験においてどのような出力信号を発生させたか付録の表を使用してまとめる. (1)
 一定時間直進して停止し,元の位置まで戻ってくる (2)
 1m 四方の正方形上を移動する (3)
 ジグザグ走行する (4)
 一定時間経過後に 3 段階でスピードが変化する (5)
 1m の半径で回転する (6)
 自分たちでオリジナルの走行パターンを考え,それを実現する  思い通りに動かなかった場合はその理由を考えてレポートにまとめること. 5. 考察事項  それぞれのディジタル信号処理をどのように行ったかをまとめよ.レポートにはプログラムをそのまま記述す るのではなく,要点をまとめて簡潔に書くこと 6. 研究課題 (1)
 PIC 以外の各種マイコンについてその特徴を調査せよ (2)
 アセンブラ言語とはどのようなものか (3)
 H ブリッジ回路を用いた直流モータ制御,およびモータドライバ IC について調査せよ. (4)
 PIC がどのような機器・製品で使われているか調査せよ.    図3 PIC 自走車(左⋯小 右⋯大)

(7)

7. 付録 7.1 16 進数表記 7.2 組み込み関数  C 言語を用いた PIC マイコンプログラミングでは,入出力や割り込みの設定などを簡単に行えるようにあらか じめ組み込み関数が用意されている. (1)
 ディレイ関数  命令を実行する間隔を設定するための関数.ある出力と出力との間に一定時間を設けたい場合に使用する. 表7 ディレイ関数 組み込み関数 書式 機能

delay_cycles( ) delay_cycles(int count) 指定命令のサイクル数の待ち時間を設定する delay_ms( ) delay_ms(int time) msec 単位の待ち時間を設定する

delay_us( ) delay_us(int time) µsec 単位の待ち時間を設定する

(2)
 入出力関数  PIC マイコンの入出力ポートを使用するためには,入出力モードの設定を行い入出力ピンを制御する必要があ る.入出力モードを設定するプリプロセッサはmain 関数の前に記述する.これらの設定は必須ではない.port は A G のいずれかを指定する. 表8 入出力モード設定プリプロセッサ 組み込み関数 書式 機能

#use standard_io( ) #use standard_io(port) 指定ポートの入出力を,その都度判定する

#use fast_io( ) #use fast_io(port) 指定ポートの入出力は,その前のモードに従 う.(初期化が必須)

#use fixed_io( ) #use fixed_io(port_outputs=pin,pin,⋯) 指定ピンの入出力モードを固定する 表6 入出力ポートと 8 ビット表記の一例 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 上位4 ビット 下位4 ビット 8 ビット表記 L L L L L L L L 0000 0000 0x00 H H H H H H H H 1111 1111 0xFF L H L H H L H L 0101 1010 0x5A H H L L L L H H 1100 0011 0xC3

(8)

設定を行った各ポートには以下の関数で入出力を行う.x は a から e までのポートを指定する. 表9 入出力組み込み関数 書式 組み込み関数 使用例 機能 set_tris_x(int value) value は 8 ビット set_tris_x( ) set_tris_b(0x00) 又は set_tris_b(0) 各ビットが各ピンに対応して初期化を 行う. 1 が入力モード 0 が出力モード output_low(pin) pin は指定されたピン output_low( ) output_low(PIN_B0) 指定ピンをLOW 出力にする output_high(pin) pin は指定されたピン output_high( ) output_high(PIN_B0) 指定ピンをHIGH 出力にする output_float(pin) pin は指定されたピン output_float( ) output_float(PIN_A0) 指定ピンを入力モードにする

output_bit(pin, int value)

pin は指定されたピン value は 1 か 0 output_bit( ) output_bit(PIN_B0, 1) 指定ピンの出力を0 か 1 にする output_x(int value) value は 8 ビット output_x( ) output_b(0x0F) 又は output_b(15) 指定ポートに 8 ビットデータを出力す る

int value = input(pin)

value は整数 pin は指定されたピン input( ) int n = input(PIN_A1) 指定したピンの入力 LOW なら 0(FALSE) HIGH なら 1 (TRUE)

int value = input_x( ) value は整数 input_x( )

int n = input_a( )

指定ポートから 8 ビット同時に読み出 す

port_b_pullups(bool value) value は TRUE か FALSE port_b_pullups( ) port_b_pullups(FALSE) PORTB のプルアップ抵抗を接続する (TRUE)しない(FALSE) 8. 参考資料 (1)
 後閑哲也 「C 言語による PIC プログラミング入門」 技術評論社 2002 年 (2)
 Microchip Technology Inc. http://www.microchip.com/

(3)
 電子工作の実験室 http://www.picfun.com/

(4)
 PIC な日曜日 http://www.kimurass.co.jp/picindex.htm

(9)

PIC マイコン制御実験用 出力ピン設定表 実験項目 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 16 進数表記 出力時間 0 0 0 0 1 1 1 1 0x0F 1000(msec) 例(サンプル) 1 1 1 1 0 0 0 0 0xF0 1000(msec) 繰り返し

図 2 LED ボード

参照

関連したドキュメント

あらまし MPEG は Moving Picture Experts Group の略称であり, ISO/IEC JTC1 におけるオーディオビジュアル符号化標準の

平成 26 年の方針策定から 10 年後となる令和6年度に、来遊個体群の個体数が現在の水

北海道の来遊量について先ほどご説明がありましたが、今年も 2000 万尾を下回る見 込みとなっています。平成 16 年、2004

当監査法人は、我が国において一般に公正妥当と認められる財務報告に係る内部統制の監査の基準に

Medial

〒020-0832 岩手県盛岡市東見前 3-10-2

(1) 会社更生法(平成 14 年法律第 154 号)に基づき更生手続開始の申立がなされている者又は 民事再生法(平成 11 年法律第

操作は前章と同じです。但し中継子機の ACSH は、親機では無く中継器が送信する電波を受信します。本機を 前章①の操作で