2017年07月06日

赤外線グリッドセンサ

以前に日本で入手可能な赤外線グリッドセンサとして
MELEXIS製 MLX90621を紹介しました。

価格が6000円前後、I2Cの通信と16x4という細長いグリッドのため、
扱いには癖がありました。

一方、以前からパナソニック製AMG8832 解像度8x8 がありましたが、
輸出規制品のため、日本では個人で購入できませんでした。


つい最近、Digikeyの広告で新機種のAMG8833が宣伝されており、
国内で買えないはずでは?と思いつつ、ページを見てみると
日本円の価格がついていました!
約2700円程度の安さ。

ということで他の部品と合わせて注文したところ、
使用目的などの申請書類なしに普通に買えました。
なお、RSでは申請書類を要求されました。


AMG8833.JPG

Digikey日本でも取扱を開始したようです。

価格も手ごろで8x8の赤外線グリッドセンサが手に入るのは感激です。
また後ほど、変換基板等を設計して実験してみたいと思います。


ただ、今年の赤外線グリッドセンサの本命は
32x24のMLX90640だと思いますが。
秋発売予定で価格がどうなるか待ち遠しいです。



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

2017年06月29日

自作リニアエンコーダ

今回は簡単なリニアエンコーダを部品代300円程度で
自作してみましたのでご紹介します。


リニアエンコーダは浮上するわけでなく、
リニア=直線 のエンコーダということです。

以前に何度か紹介したAS5048AやTLE5012Bなどの磁気エンコーダは
ロータリーエンコーダで、回転の角度位置を検出します。


一方、リニアエンコーダは直線の位置を検出します。
用途としては3Dプリンタの軸に取り付けて位置を検出するなど...



使用する部品は
・ホールセンサー
・100均一などのテープ状マグネット
です。


秋月電子でホールセンサーA1324LUA-Tがアナログ出力で
磁力なしで中心電圧2.5V出力のため、使い勝手が良いです。



実は、100円均一で扱っているシートマグネットや
広告として配布されるシート状のマグネットは奥が深いのです。


どこでもぺたっとくっ付くシート磁石ですが、
単に表がN極、裏がS極ということではありません。

細かく数ミリピッチで綺麗にNとSが交互に並んでいます。



製造元によってピッチは異なりますが、
規則的に並んでいるため、
この磁界を検出すれば位置センサとして使用できるということです。

ピッチを知りたい場合はシート磁石を2枚重ねてスライドさせると、
ガタガタとN極S極の吸着部分と同極同士の反発部分を手で感じることができます。
ガタガタのピッチを測定すれば磁極ピッチが分かります。



magnet.jpg

国内で手に入るものはほとんど2~4mmピッチです。



実際にホールセンサーA1324LUA-Tとダイソーで購入したテープ状磁石で
ホールセンサーをある一定速度でスライドさせると、綺麗に正弦波が出力として出ました。

IMG_4629.JPG


磁石のピッチが既知であれば、波の山や谷を数えればざっくりとした位置が分かります。
さらに正弦波に近似するとピッチのどの位置にいるか、更に高精度化することも可能です。



シート状の磁石は少し磁界が弱いため、
現状はセンサと磁石がベタ付け状態ですが、
センサの種類の変更やセンサ出力を増幅させるなどの工夫で
非接触でもセンシングできると思います。



テープ磁石をタイヤなどの回転物に巻けば、
ロータリーエンコーダとしても使用できそうです。


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

2017年06月23日

磁気エンコーダTLE5012B その2

紹介しました。

TLE5012Bの問題点はSPIインタフェース互換のSSCという通信方式で
MOSIとMISOが1つで双方向に通信を行います。

前回はMOSIとMISOに抵抗を挟んで通信しましたが、
STM32のHALライブラリにはSSCに対応したHalf Duplexモードがあるため、
そちらを使用して通信してみました。

CubeMXではHalf Duplex Masterとして設定します。
SPI.png


配線ではMISOは使用せず、
MOSIのみで双方向に通信します。
1本のみの通信のため、抵抗値を0にしています。

SPI-HalfDuplex.png



コードは下記の通りです。

uint16_t GetEncPos(){
 uint8_t    sData[6];
  uint8_t rData[6];
  uint8_t rCRCBuff[12];
  uint16_t res;

 HAL_GPIO_WritePin(ENC_CS1_GPIO_Port, ENC_CS1_Pin,0);//CS
 sData[0]=0x80;sData[1]=0x21;
 HAL_SPI_Transmit(&hspi1,sData,2,500);


 sData[0]=0x00;sData[1]=0x00;sData[2]=0x00;sData[3]=0x00;
 rData[0]=0;rData[1]=0;rData[2]=0;rData[3]=0;

 for(int i=0; i<1; i++)asm("nop");//Point

 HAL_SPI_Receive(&hspi1,(uint8_t*)&rData,4,500);

 HAL_GPIO_WritePin(ENC_CS1_GPIO_Port, ENC_CS1_Pin,1);//CS

 uint8_t rCRC;//CRC from Recieve data
  uint8_t dCRC;//Calc CRC from Data

   rCRCBuff[0]=0x80;
   rCRCBuff[1]=0x21;
   rCRCBuff[2]=rData[0];
   rCRCBuff[3]=rData[1];

   rCRC=rData[3];
   dCRC=GetCRC8(rCRCBuff, 4);//CRC check
   
    if(rCRC!=dCRC){
        ENC_Err_Count++;
        return 0;
    }
 
 res =(rData[0]<<8)+rData[1];
 return  0x7FFF&res;
}

uint8_t GetCRC8(uint8_t *buff, size_t size )
{
    uint8_t crc=0xFF;
    uint8_t i;

    while(size--){
        crc^= *buff++;
        for(i=0;i<8;i++){
            crc=crc&0x80?(crc<<1)^0x1d:crc<<1;
        }

    }
    return (~crc)&0xFF;
}

以前紹介したコードとの差はHalf Duplex Masterのため、
HAL_SPI_TransmitReceiveを使用せずに
HAL_SPI_ReceiveとHAL_SPI_Transmitを使用している点です。
自動的にMOSIの入出力がHALライブラリ内で切り替わります。
また、SafetyWordのCRCチェックを行っています。



実際に高速で通信した際に
角度読み出しコマンド実行後にすぐに角度を読み出すと、
正しい値を返さない現象が発生しました。
Infineonのフォーラムでも同じような不具合のディスカッションがされており、
角度読み出しコマンド実行後に10us待ってから読み出すことが重要なようです@2MHz


tle5012.jpg


実際にFullDuplexMasterで以前紹介したようなMOSIとMISOを使用する配線で
10us待つためには
sData[0]=0x80;sData[1]=0x21;
HAL_SPI_TransmitReceive(&hspi1,sData,rData,2,200);
sData[0]=0x00;sData[1]=0x00;sData[2]=0x00;sData[3]=0x00;
rData[0]=0;rData[1]=0;rData[2]=0;rData[3]=0;
HAL_SPI_Receive(&hspi1,(uint8_t*)&rData,4,200);
とすると丁度良い待ち時間になりました。


通信クロックに関して、
FullDuplexMasterではSPIクロック最大2MHz、
HalfDuplexMasterではSPIクロック最大4MHzという結果でした。
8MHzではビット読み違いが多発し、CRCチェックで値が落ちて通信できませんでした。



最終的に値取得周期は
TLE5012Bが2個、FullDuplexMaster@2MHzで約120us
TLE5012Bが2個、HalfDuplexMaster@4MHzで約100us
という結果となりました。


値読み出しコマンドとSafetyWord分の通信が必要なため、
1回の通信で8bit x 6回の通信が必要です。
SafetyWordを読み込まない場合でも8bit x 4回の通信が必要です。

TLE5012Bは内部更新周期42.7usで読み出すためには
SPIクロックを8MHzにしてなんとか実現可能なレベルということが分かりました。
AMS社のAS5048Aでは8bit x 2回の通信で済むため、
比べると通信量が多いことが分かります。



安さと15bit分解能、フィルタ内蔵というのは良いですが
SSCインタフェース、通信量の多さ、
角度読み出しコマンド後の待機時間の曖昧さには要注意です。


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

2017年06月17日

ProjectionBallオープンハードウェア化

先月、MakerFaireBayAreaに参加して以降、
海外からの問い合わせが増えました。


一方で海外向けに販売できる体制を短期間で構築できないため、
最新版のProjectionBall IoTをオープンハードウェア化することにしました。

ProjectionBall IoT v5.4の特徴
・スマートフォンやPCからWifi経由で遠隔操作可能
・アナログ時計、デジタル時計を内蔵
・任意の文字列を表示可能(最大32文字、フォント内蔵)
・直径が10cm(旧モデル12cm)と一回り小さく
・Wifiはアクセスポイントモード、サーバモードの両対応


◆ProjectionBall IoTファームウェア&ソースコード

◆ProjectionBall IoT部品リスト&STLデータ&カーバーデータ

◆ProjectionBall IoT Wifiモジュールソースコード


ドキュメント類や説明がまだ充実していない状況のため、
英語版のドキュメント含め、順次、追加していきたいと思います。


また、国内向けにはProjectionBall IoTの完成版を
近日、協力会社から販売開始予定です。



ぜひ、Facebookページへ「いいね」をお願いします。

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

2017年06月11日

3Dプリンタ反り防止

今回は3Dプリンタで大きなサイズを印刷する際に
悩ましい反りをなくすツールについて紹介します。



幅10cm、厚さ2cmを超えるものをABS樹脂で印刷すると、
一般的なマスキングテープ上にプリントすると
端の部分から浮いてしまい、反りが発生します。



実際に試行錯誤中の枠。
下側の両端が大きく反っていることが分かると思います。

3d-print2.jpg




3d-print.jpg


端の剥がれを防ぐため、両端の面積を大きくしたり試行錯誤しましたが、
結局失敗しました。



そこで今回、購入したものが、
です。3枚入りで2000円弱です。

マスキングテープの代わりにプレートに貼って使用します。


3m-sheet.jpg

3m-sheet2.jpg


実際に使用して印刷してみました。

3m-sheet3.jpg


プレートの温度が冷めてから3D印刷物の端をヘラで持ち上げます。
簡単に綺麗にシートから剥がすことができました。

マスキングテープを使用した場合と異なり、
シート側の面は光沢が出ます。
そのため、人目に触れる面をシートに接する面にすると光沢が出るため、
よいと思いました。



3d-sheet3.jpg

5回程度同じ場所に印刷すると跡が残ってしまい、
一部、印刷中に剥がれて軽く反ってしまいました。


シートの説明では複数回使用可能とありますが、
数回印刷するとシート自体の表面処理が剥がれるようで定着力が低下しました。
現実的には同じ場所では3~4回程度が限界なようです。


ただ、少し異なる場所に印刷したり、シート自体をずらして貼り直すことで、
10回程度は使用可能だと思いました。


1枚で3回印刷する場合でも1回数百円程度のため、
半日以上の時間をかけて反りで失敗するなら、
シートを利用して綺麗に印刷する方が効率的だと思いました。

欲を言えば、もう少し高くとも30回以上使えるシートがあれば更によいのですが。


大きなものを印刷する場合の反り防止にはお勧めです。

ラベル:3Dプリンタ 部品
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 3Dプリンタ | このブログの読者になる | 更新情報をチェックする