LoginSignup
1
1

More than 5 years have passed since last update.

電子回路入門 アナログ入力

Last updated at Posted at 2018-02-27

はじめに

書籍に沿って引き続き進めていきます。

今回は可変抵抗から贈られるアナログ値を利用して、LEDの明るさを制御します。

アナログ入力とは

デジタル入力(ON,OFF)と違い、様々な値を入力できる。
温度や湿度など、変化するような値を電圧として扱います。
ラズベリーパイやマイコン等でアナログ値を入力する場合はADコンバータを使用します。
ADコンバータ...アナログ値をデジタル値に変換する。
マイコンに内蔵されているものとされていないものがあるので、仕様書を確認しましょう。
(ラズベリーパイには内臓されていませんが、PsoCには内蔵されているので、それを使用します。)
内蔵されいないものは外部のADコンバータを使用します。

使用部品

--可変抵抗の型番の読み方--
今回の場合は103
10 × 10³ = 10000 = 10kΩ
202の場合は
20 × 10² = 2000 = 2kΩ

PSocの設定変更

珍しくPSoCの設定を記載します(`・ω・´)
以前作ったPWMの設定にADC_SARを追加します。(アナログデジタルコンバータ)
Analog入力とsocには0をつなげてください。
ADC.png

ADC_SARをダブルクリックすると設定画面になるので、以下のように変更してください。

ADC設定.png

  • Modes
    • Resolution --出力bit数(とりあえず大きく)
    • Conversion rate --一秒間に何回サンプリング(アナログデータを取り込む)か。(とりあえずこれくらい)
  • Sample mode
    • Software trigger --プログラムから制御します
  • Clock source
    • Internal --内部クロックを使用
  • Input
    • Input range --入力される電圧の範囲
    • Reference --ADの基準電圧です(コメントより。今回は精度はあまり気にしないので内部のものを使用します。)

回路図

可変抵抗_ブレッドボード.png

5Vと可変抵抗の間に150Ωを入れています。
これはPSoCの設定の際に、入力電圧の範囲を0~2Vくらいに設定したので、可変抵抗に2V以上かからないようにするためにつけてあります。
2V ÷ (5V -2V) × 10kΩ = 7kΩくらい
7kΩくらいですが、持ってないので10kΩを使用します。(0~2.5Vまで変動)
可変抵抗_回路図.png

プログラム

#include "project.h"

int main(void)
{
    CyGlobalIntEnable;
    //PWMスタート
    PWM_Start();
    //ADCスタート
    ADC_Start();
    for(;;)
    {
      //変換開始
      ADC_StartConvert();
      //開始されるまで待つ
      while(ADC_IsEndConversion(ADC_RETURN_STATUS) == 0);
      //12bitがくるので16bitで取得
      int val = ADC_GetResult16();
      //↑で返ってきた16bitの値×PWMの最大値÷16bitの最大値
      double t = (val * 255 /4095);
      PWM_WriteCompare(t);
    }
}
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1