2022年01月08日

STM32 EvoPrimer

今年もよろしくお願いします。

正月明けの先日、秋月電子通商の八潮店にお邪魔しました。八潮店は店舗が秋葉原店よりも広く、混雑していないのでおススメです。さらにおススメなのは10~20年前の秋葉原店のようなジャンク部品が八潮店では販売されています。入口入って左側のジャンクコーナーでは通販やWebサイトに載っていない部品がたくさん格安で売られています。

今回、お邪魔して購入したものはSTM32 EvoPrimerジャンク品です。STM32F103V*シリーズが搭載されたSTM32 EvoPrimerのベースボード(定価1万前後)が300円、ターゲットボード(定価3~4千円前後)が200円で販売されていました。ベースボードに搭載されているリチウム充電池が完全に放電しているようでジャンクとして大量に販売されていました。10年以上前の開発ボードでNucleoボードやDiscoveryボードが販売される前の製品のため、情報等が限られていますが、まだ回路図等は部分的に確認できるようです。


p1.jpg


p2.jpg

ベースボードとターゲットボードを接続してUSB電源を供給するとデモプログラムが動作しました。


p3.jpg

ST7732ドライバ搭載の160x128のパラレル接続LCDが搭載されているようです。


p4.jpg

ベースボードはSTM32F103VE、タッチパネル付きLCD、スピーカ、microSDスロット、加速度センサ、リチウム充電池、充電回路等が搭載されていました。

p5.jpg

偶然?にも電池は完全に消耗しておらず、3.4V程度電圧がありました。

p6.jpg

ターゲットボードは数種類販売されており、ROM容量が一番大きなSTM32F103VGを購入してみました。10年以上前の製品に搭載されたSTM32F103シリーズのため、初期レビジョン固有のエラッタ等があるかもしれませんが、部品取りや簡単な実験用として非常にお買い得だと思いました。


p7.jpg

他にも鉛フリーのクリームハンダ等もあり、ジャンクならではのお買い得品が多数ありました。なお、ジャンクコーナーは在庫の入れ替わりが激しく、在庫管理された正規在庫品ではないため、店舗へ在庫有無の確認等はお控え頂き、直接、八潮店でご確認ください。プラ箱に大量に入っていたため、数週間程度は引き続き販売されていると思われます。

ぜひ、秋葉原店だけでなく、八潮店で買い物するのも如何でしょうか?
posted by Crescent at 00:00| Comment(0) | 部品 | このブログの読者になる | 更新情報をチェックする

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) | 部品 | このブログの読者になる | 更新情報をチェックする