2017年08月02日

Lattepanda用Arduino変換基板

巷ではRaspberrypiやbeaglebone、nanopiなど
いろいろなARMベースのコンピュータボードがありますが、
その中でも異色なのがLattepandaです。



LattepandaはatomCPU搭載のWindowsマシンでありながら、
Arduino Leonardを搭載したコンボコンピュータボードです。
Amazonなどで入手することが可能です。

残念ながら内蔵のWifiは技適がないため、
使用できません。


Windowsマシンなので普通にキーボード、マウス、HDMIディスプレイをつなぐと
Windowsデスクトップが起動します。



Arduino Leonardが一体になっているため、
デスクトップ上のArduinoIDEからArduino Leonardボードが認識され、
そのまま書込み、実行ができます。


LattepandaのUSBを給電するとArduino Leonardが動作し、
電源ボタンを押すとWindowsが起動する感じです。
なので、Windowsを起動させなくともArduino Leonardとして使用できます。


ただ、問題点としては
内蔵のArduino Leonardはボード上の2列ピンヘッダで
Arduinoヘッダでないため、
手持ちのArdunoシールドが活用できません。

そこで
LattepandaArduno変換基板を作成しました。
Web上では他に似た基板を作成されている方が数人おられましたが、
日本で入手しにくい部品を使用していたり、
手持ちのシールドの部品と干渉するため、
結局、0から設計することになりました...

lattepanda.JPG


また、某サイトでの販売をする予定でしたが、
まだ日本でLattepandaの知名度が低いため、
販売できませんでした。

そのため、試しで作成した基板を1枚送料込みで2000円で販売します。
ご希望の方は連絡ください。
ピンヘッダ、ソケットは別売です。
表面実装部品のみ実装済みです。

ロットや機種により若干、コネクタ等に干渉する場合があるかもしれません。
所有のRev1.1ではちょうど入りました。

lattepanda_.JPG

実際に使用した例です。

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

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月05日

STM32F746DISCO筺体ケース

今回はSTM32マイコンと3Dプリンタの活用例を紹介します。



STM32F746DISCOはROM1MByte、RAM340kByte、
静電容量タッチパネル付4.3インチLCD、
外部SDRAM8MByte(LCDバッファ共用で実際に使用できるのは7MB程度)、
Ethernetポート、Arduino端子、
microSDスロットなどが最初から搭載しており、
STM32F7シリーズの入門機種として最適です。

スイッチサイエンス秋月電子で取扱があります。




ただ、基板に足のみしか付属していないため、
開発中の不意の落下で壊れてしまう可能性もあります。

今回は3Dプリンタを活用してケースを設計、作成してみました。

LCDプロテクタ

top.jpg

筺体ケース


case.jpg




実際に3Dプリンタで印刷してみました。
筺体サイズ幅が12cm超のため、
家庭用の3Dプリンタでは印刷できない機種も多いかもしれません。

設計はRS DesignSpark Mechanical 2015で設計を行い、
プロジェクトデータ及びSTLデータはgithubで公開しております。



disco.JPG


上記の写真は3Dプリンタで出力した筺体と
STM32F746DISCOに友人が開発した
SerialPlotterのファームを書き込んだ例です。

uGUIという組込マイコン向けのフリーのGUIライブラリを活用したSerialPlotterです。
uGUIはフリーでコードまで完全に公開されているGUIライブラリで
LCDや有機EL、電子ペーパーなどにも使用可能で
汎用性や移植性が非常に高く、優れたGUIライブラリです。
この辺は後日、詳細について紹介します。



また、今回、幅10cm、厚さ2cmを超えるものを初めてABS樹脂で印刷しましたが、
印刷中の反りに悩まされました。
この反りの回避方法についても後日、紹介します。


___________________
LCDプロテクタと筺体ケース提供のお知らせ
STM32F746DISCO用ケースセット 
2,500円(送料込)
※3Dプリンタ印刷のため、
角の反りなど個体差があります。
※在庫無くなり次第提供終了します。
※メールもしくはメッセージにて承ります。
___________________
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする