2017年02月15日

Grove RTCモジュール

今回はI2C接続のGrove RTCモジュールについてご紹介します。


電池ボックス付きで使いやすく、
Groveコネクタを介して簡単に接続ができます。

CR1225というリチウム電池の入手性が非常に悪いですが、
CR1220と若干の容量差があるものの、厚みの差だけのため、使用可能です。

CR1220は100均等でも買えるため、CR1220を使用しました。
CR1220の方が.数mm厚さが薄いため、容量が少ないようです。



今回は普通にI2C接続でSTM32F303K8と接続しました。
STM32の32ピンパッケージはVBAT端子が付いていないため、
RTC機能はありますが電源OFF時の時刻保持等ができません。

ということで外付けでRTCを使用することにしました。




普通に接続して、時刻を設定、読込しようとしましたが、
最初、思ったように動作しませんでした。


GroveRTCモジュールはDS1307という
MAXIMのRTCチップ(PDF)を使用しています。

良く良くデータシートを見ると、
電源電圧が4.5V~となっており、
Seed秋月のサイトの仕様と違います・・・
上記サイトでは3.3V~使用できるとありますが・・・


VCCを3.3Vに接続して電池をセットしてI2Cで設定、読込しようとすると
DS1307からまったく応答がありません。

なぜか電池を外すとDS1307と通信できて、設定、読込ができます。
電池を外して動作してもRTCとしては使い物になりません。


データシート通りにVCCに5Vを供給して電池をセットすると
DS1307と通信できて、設定、読込ができました。


やはり、GroveRTCモジュールはVCC=3.3VではRTCとして使えないようです。
プルアップ抵抗等をいじったりしてみましたが、駄目でした・・・



ということでVCCへ5Vを給電して、
STM32F303K8と接続しました。

なお、STM32F303K8のI2Cはプルアップ無効で
FTfピンのため、5V耐圧として直接接続して使用可能です。



コード例

#define DS1307ADDR    0xD0
#define Ds1307SecondRegAddress   0x00
#define Ds1307DateRegAddress     0x04
#define Ds1307ControlRegAddress  0x07

typedef struct
{
  uint8_t sec;
  uint8_t min;
  uint8_t hour;
  uint8_t weekDay;
  uint8_t date;
  uint8_t month;
  uint8_t year;
}rtc_t;

void RTC_Init(void)
{

    HAL_I2C_Mem_Write(    &hi2c1,
                        DS1307ADDR,
                        Ds1307ControlRegAddress,
                        I2C_MEMADD_SIZE_8BIT,
                        0x00, 1, 1000);
}


void RTC_SetDateTime(rtc_t *rtc)
{
    uint8_t data[7];
    data[0]=rtc->sec;
    data[1]=rtc->min;
    data[2]=rtc->hour;
    data[3]=rtc->weekDay;
    data[4]=rtc->date;
    data[5]=rtc->month;
    data[6]=rtc->year;

    HAL_I2C_Mem_Write(    &hi2c1,
                        DS1307ADDR,
                        Ds1307SecondRegAddress,
                        I2C_MEMADD_SIZE_8BIT,
                        data, 7, 1000);

}

void RTC_GetDateTime(rtc_t *rtc)
{

    uint8_t data[7];
    HAL_I2C_Mem_Read(    &hi2c1,
                        DS1307ADDR,
                        Ds1307SecondRegAddress,
                        I2C_MEMADD_SIZE_8BIT,
                        (uint8_t*)&data, 7, 1000);
    rtc->sec=data[0];
    rtc->min=data[1];
    rtc->hour=data[2];
    rtc->weekDay=data[3];
    rtc->date=data[4];
    rtc->month=data[5];
    rtc->year=data[6];

}


main関数内

 RTC_Init();

  /* USER CODE END 2 */
  rtc.hour = 0x13; //  13:12:00
  rtc.min =  0x12;
  rtc.sec =  0x00;

  rtc.date = 0x12; //17/2/12
  rtc.month = 0x02;
  rtc.year = 0x17;
  rtc.weekDay = 5;
  RTC_SetDateTime(&rtc)


 while (1)
  {
 
      RTC_GetDateTime(&rtc);
      printf("Y/M/D H:M:S    -> %2x/%2x/%2x    %2x:%2x:%2x    \n\r",
              (uint16_t)rtc.year,(uint16_t)rtc.month,(uint16_t)rtc.date,
              (uint16_t)rtc.hour,(uint16_t)rtc.min,(uint16_t)rtc.sec);
      HAL_Delay(300);

  }


RTC1307.png


時刻を一度、セットしてから、
RTC_SetDateTime(&rtc)をコメントアウトしたプログラムを書き込んで、
上記のように電池で保持されることを確認できました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 部品 | このブログの読者になる | 更新情報をチェックする

2017年02月10日

部品販売開始

今回はSWITCH SCIENCEの委託販売による
部品販売開始についてお知らせします。


GitHubで公開している変換基板の販売を
SWITCH SCIENCEで開始しました。


Crescentのデバイス開発時に合わせて設計した変換基板です。
17/2/10から販売開始する基板は下記の2点です。


IMG_4286-2.jpg

ProjectionBallなどで使用しているエンコーダ基板です。

ProjectionBallでは世代によってAS5048A、AS5047Dと異なりますが、

今回、販売の基板はエラー角が小さいAS5048Aを採用しました。


AMS社製磁気エンコーダAS5048Aを

2.54 mmピッチへ変換する基板です。

専用のネオジム磁石を同梱(φ8mm x h2)。

3.3 V電源及びSPIインタフェースのピンが出ています。

他のピンは基板上のパット及びチップ抵抗のパターンからアクセス可能です。

光学式に比べ、磁気式はホコリやゴミ等への耐性が強く、調整が容易です。

また、SPIインタフェースのため、

Arduino等と接続してロボット等への組込が簡単に行えます。





IMG_4278-3.jpg

Nucleo等の評価ボードが発売されていない

48ピンIC STM32F373 LQFP48を2.54 mmピッチへ変換した基板です。

5列両側の一般的なブレッドボードで両側に1つ空きが出るサイズです。

32ピンではRAMサイズやピン数が足りないが、

64ピンでは多すぎるという方にお勧めです。
※mbedには対応していません。



他にも設計中の基板含めて随時、販売製品を追加する予定です。



よろしくお願いいたします。



posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 部品 | このブログの読者になる | 更新情報をチェックする

2015年09月27日

Wiced Sense

ProjectionBall等の開発をする傍ら、
既製のIoTデバイス等もいろいろ使ってみたりしています。

今回はBroadcomから発売されているWiced SenseというBluetooth LEを使った
センシングデバイスについてちょっとご紹介します。

以前にご紹介したKoshianと同じ系列のマイコンが入っており、
Wiced Smart IDEで同じように開発できます。

IMG_3026.JPG

大きさは手のひらの半分くらいの小さいサイズに
ジャイロや加速度、電子コンパス、温度、湿度、大気圧のセンサが入っています。

スイッチサイエンスでも購入できます(技適もOK)。


Bluezを入れたLinuxのgatttoolから
char-write-req 0x2b 0x100でデータ通知開始
char-write-req 0x2b 0x000でデータ通知停止
char-read-hnd 63でバッテリ量%という感じです。


デフォルトでは加速度系の情報が10回に1回、温度系のデータが送られます。


Broadcomのコミュニティー外のため、
詳細を載せるのは避けますが・・・


温度系のデータだけで他は必要ないため、
wiced_sense_polls_since_last_hptの条件式を書き換えて
温度系のみを送信するように変更してみました。

bleprofile_SendConnParamUpdateReqを書き換えることで
データ通知の間隔が変更可能なようです。


色々ほかにも書き換えて遊んでいたら、
調子が悪くなり、まったく接続できなくなってしまいました。


ファームのリカバリ等試しても効果なく、
いろいろコミュニティーの情報を探っていたら、
Crystal warm-upのパラメータがデフォルトでは動作が不安定なようで、
書き換える必要があるということが判明。
書き換えたところ、安定して動作するようになりました。
コミュニティー内では情報が溢れていて
なかなか欲しい情報が見つからないんですよね。


LinuxでどのようにBLEの通信をコーディングしようか考えつつ、
次はTIのSensortag等を試してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 部品 | このブログの読者になる | 更新情報をチェックする

2014年12月31日

モータとミラーの固定

前回はレーザープロジェクタに用いる表面鏡について説明しました。

今回は表面鏡とモータの軸との固定について説明します。

本来は専用の固定軸を作成するのが王道ですが、
簡単に入手可能な部品で作る試作として今回は説明します。

高速にミラーが動くため、作成のポイントは剛性と軽さです。

【必要な部品】
・表面鏡(100均 ダイソーの口内ミラー)
・ネジ
・垂直取付用ブロック CB26-6 
           例 http://akizukidenshi.com/catalog/g/gP-07307/
・円柱スペーサ(軽いものであれば何でもよい)
           例 http://akizukidenshi.com/catalog/g/gP-01861/
・ワッシャー

ブロックに瞬間接着剤で円柱スペーサを接着します。
円柱スペーサの反対側にワッシャーを接着材で付けます。

モータ軸固定0.jpg

ブロックにミラーを両面テープで付けて、モータ軸に固定すれば完成。
モータ軸固定1.jpg

ワッシャー部分は軸の位置を検出するための磁気エンコーダ専用磁石を付ける場所です。
写真では磁石を付けて、固定の為に軽く両面テープで巻いています。


このモータと表面鏡のセットを2セット作成し、
X軸とY軸として使用します。

posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 部品 | このブログの読者になる | 更新情報をチェックする