STM32L-DISCOVERYの屋内気象観測所

子供の頃から、私は室内温度計、湿度計、気圧計を夢見ていた(自然科学と生物学の教訓は無駄ではなかった)。 次のようなソビエト式のスイッチギアを備えた壁掛けバージョンも購入しました。



しかし、間違えて彼はドアの葉に掛けられ、しばらくして、絶え間なく揺れたために使用できなくなった後、彼は同じ価値を示し始めました。 乾湿計はその外観で怖がっていました。 はい、そして毎日証拠を記録することは愚かな仕事です。 機械システムは、コントローラーの出現により完全に埋没しました。



さまざまなデバッグボードを長い間見ていました。 友人のアドバイスで、STからSTM32L-Discoveryデバッグボードを購入しまし 。詳細はこちらをご覧ください 。 これはCortex-M3のコア上のARMであるように思われました。 ボードの中心はSTM32L152RBT6です。 ボードには、オンボードプログラマーとデバッガーST-Linkおよび6セグメントLCDディスプレイもあります。





日曜大工の気象観測所のポスト、 SHT21の温度計、およびSTM32L-Discoveryの存在がプロジェクトに影響を与えました。



Keilを少し習得したので、サンプルをボードにロードする代わりに、Temperatureプロジェクトの別のサンプルをダウンロードしました。これで、温度計の準備が整いました。 マイクロコントローラはVrefを測定できます。 また、独自のチップ温度センサーも備えています。



すべてうまくいきますが、このセンサーは水晶の温度を表示するので、DS18B20温度センサーを追加することにしました。1線式インターフェースを習得するのは良いことです。 何かを追加するには、最初に通常のLCD画面を取り除く必要があり、その6文字が利用可能なプロセッサポートのほぼすべてを占めていることがわかりました。



祖国の大箱には、日立のコントローラー(各25文字の8行)で組み立てられた古いLCDスクリーンが散らばっていました



上記の記事ではHIH3610デジタル空気湿度センサーについて言及しましたが、HCH1000容量性湿度センサーとHSF1000気圧センサーを購入しました。



そのため、機器を接続するタスクが編成されました。

1. LCDスクリーンの接続とプログラミング。

2. RTLからのデータの接続と受信。

2.デジタル温度センサーDS18B20を接続し、1線バスを介してデータを読み取ります。

3. HCH1000静電容量センサーを接続し、データを受信します。

4. HSF1000圧電センサーを接続し、データを受信します。



ここに出てきたようなデバイスがあります:







LCDスクリーンの接続とプログラミング



私の手に落ちたコピーは非常に古く、ドキュメントが見つかりませんでした。 その上に4つのチップHD44102CHと2つのHD44102があり、4つの個別のマイクロ回路がありましたが、その説明は見つかりませんでした。

HD44102のリファレンスマニュアルが見つかり、4つのマイクロチップの8本の脚が相互接続されてコネクタに引き出されました。これがD0-D7の検出方法であり、電力は個別のマイクロチップによって検出されました。 信号はRW、E、CS、R / Sでした。YouTubeでは、HLM9301 LCDモジュールが私のLCDに非常によく似ていることがわかりました。

1 GND; 2 VCC;

3対比(10kコロカドエントレvcc y gndの一般的なターミナルメディオデポテンシオメトロ)4 NC(conectadoなし);

5 NC; 6 CS1;

7 CS2; 8 CS3;

9 NC; 10 E;

11 R / W 12 R / S(データ/命令)

13 D0; 14 D1;

15 D2; 16 D3

17 D4; 18 D5;

19 D6; 20 D7。

しかし、コマンドを与えるとき、マトリックスは生命の兆候を示しませんでした。

インターネット上での以前の検索と同じくらい長い時間が経過した後、古いグラフィック画面には輝度のために負の電圧が必要であることが判明しました。 DC-DC P6AU0505コンバーターがオンになり、輝度出力と-5の間に200kΩの高精度可変抵抗器が取り付けられました。

HD44102のチームが登場しました。 HLM9301の作業ライブラリーが作成されました。 フォーラムでは、Arduinoですべてが標準GLCDライブラリですぐに機能すると主張しました。



ビデオは、内部RTCおよび温度計から読み取ったデータを示しています。



RTLからのデータの接続と受信



RTCの初期化は次のとおりです。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_SYSCFG, ENABLE); PWR_RTCAccessCmd(ENABLE); RCC_LSEConfig(RCC_LSE_ON); //do not touch LSE to prevent RTC calendar reset while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} RCC_RTCCLKCmd(ENABLE);
      
      





問題:リセット中にRTCもリセットされました。 デモから取られたコードスニペットは、LSEで何かを行いました-これはRTCをリセットします。

データの読み取り:

 RTC_DateTypeDef RTCDateStr; RTC_TimeTypeDef RTCTimeStr; RTC_GetTime(RTC_Format_BIN, &RTCTimeStr); RTC_GetDate(RTC_Format_BIN, &RTCDateStr); sprintf(strDisp, "%02d/%02d/%02d %02d:%02d:%02d", RTCDateStr.RTC_Year, RTCDateStr.RTC_Month, RTCDateStr.RTC_Date, RTCTimeStr.RTC_Hours, RTCTimeStr.RTC_Minutes, RTCTimeStr.RTC_Seconds);
      
      





次に、2つの新しい「または」タスクが判明しました。超小型回路の電源回路でイオンをオンにし、電源電圧が低下したときに「スリープモード」に切り替えるか、外部RTCを接続します。 両方の方法を試してみると...



DS18B20デジタル温度センサーの接続



Stm32 + 1-wire + DMA(続き)およびStm32 + 1-wire + DMAの記事のおかげで、onewire.cライブラリが追加されましたが、STM32L152プロセッサの場合、ポートの初期化は少し異なります。

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
      
      





データシートから取得した接続図:



「デバイスの検索」という記事を使用して、複数のデバイスを1線バスに接続する機能が追加されました。 12ビットすべてを読み取るときのDS18B20の解像度は、摂氏0.0625度です。



HCH1000静電容量センサーの接続



静電容量はさまざまな方法で測定できます。最も簡単な方法は、電圧降下を充電して監視し、時間をかけて静電容量を計算するか、交流抵抗によって静電容量を評価することです。 Honeywellは、センサーが555発電機の基準値であるデータシートを親切に提供してくれたので、簡単な発電機を組み立てて最後の方法に頼りました。



STM32L152には、PWM信号キャプチャモードで動作できるいくつかのタイマーがあります。 詳細はこちら

1線式ポート構成の場合のように、違いが判明しました。

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);
      
      





残りについては、割り込みのテキスト内のすべてがカウンターの値を減算し、湿度に切り替えたセンサーのグラフによる容量から、期間の長さに係数を乗じたものを取得します。



HSF1000圧電センサーの接続



センサーをVref、GND、およびADC入力に接続しました。 経験から、12ビットADCの精度は有用な信号を評価するには不十分であることが示されています。 AD8555計装アンプを標準的な方法でセンサーに接続すると、果物ができました。 10倍のゲインは、信号レベルを0.7Vに上げるのに十分でした。





これがデバイスのメイン画面です



行の値:

1.内部RTLからの日時。

2.発生器からのデューティサイクルと信号周期、および検出された単線式デバイスの数。

3.湿度センサーの容量と湿度。

4.単線式識別子。

5.温度値;

6.電圧値。

7.結晶温度の値。

8.圧力値。



プロジェクトソースはこちら



All Articles