FlashAir W-04의 I2C 기능으로 DRV8830을 구동시켜 보았다

FlashAir W-04가 발매에!



2017년 6월에 마침내 4세대째의 FlashAir W-04가 발매되었습니다. 새롭게 추가되거나 향상된 기능은 다음 사이트를 참조하십시오.
4세대 FlashAir W-04
FlashAir 개발자를 위한 비공식 위키 - W-04 특설 페이지

Lua 스크립트에 I2C 기능이 추가!



W-04에서는, Lua 스크립트의 기능 강화, 기능 추가가 행해지고 있습니다. 그 중 이번에는 I2C 기능에 주목해 보았습니다.

Lua 함수 참조

이번에는, 새로운 함수의 하나인 fa.i2c 함수를 사용해, FlashAir로부터 I2C 접속한 모터 드라이버 DRV8830을 제어해 보겠습니다.

구성



필요한 것은 다음과 같습니다.
  • FlashAir W-04
  • DRV8830 ( 아키즈키 전자 통상 )
  • SD 카드 슬롯 DIP화 모듈( 아키즈키 전자 통상 )
  • 브레드 보드
  • AC 어댑터(5V/1A)



  • 이번에, DRV8830은 어드레스 설정 핀 A0, A1을 모두 아무것도 접속하지 않는 open 상태로서, 0xC8로 설정하고 있습니다.
    "FlashAir와 DRV8830은 아래 표와 같이 연결됩니다.
    FlashAir에서는 2번 핀(CMD)이 SCL, 7번 핀(DAT0)이 SDA로 되어 있으므로 DRV8830의 각각 10번 핀과 9번 핀에 연결합니다.
    이번, 「SD 카드 슬롯 DIP화 모듈」을 사용하고 있으므로, SCL과 SDA는 모두 10KΩ 저항으로 풀업되고 있습니다.



    CONFIG 파일 설정



     FlashAir의 SD_WLAN 폴더에 있는 CONFIG 파일에 다음 옵션을 추가합니다. IFMODE는 FlashAir의 GPIO 모드를 켭니다. LUA_RUN_SCRIPT는 FlashAir의 전원을 켠 직후 지정된 Lua 스크립트를 시작하는 설정입니다.IFMODE=1
    LUA_RUN_SCRIPT=/drv8830sample.lua

    ※SD_WLAN 폴더와 CONFIG 파일은 불가시 속성 파일이므로 주의해 주세요.

    Lua 스크립트 파일



    "FlashAir의 루트 폴더에 다음 코드를 포함하는 텍스트 파일 (drv8830sample.lua)을 복사하십시오.
    이 코드에서는 최고속도(0x3F)로 5초간 정회전(0x01)시킨 후, 최고속도(0x3F)로 5초간 역회전(0x02)시켜 정지합니다.
     FlashAir의 I2C는 Master로 작동하고 연결된 DRV8830은 Slave로 작동합니다. I2C 기능에서 Slave의 주소를 지정하려면 7bit 표기로 지정합니다. DRV8830 데이터시트 에 기재되어 있는 주소는 8bit 표기이므로, 1bit 오른쪽으로 시프트시킨 수치가 됩니다.
    이번에는 DRV8830의 에러 처리는 생략하고 있습니다.

    drv8830sample.lua
    -- FlashAir + DRV8830
    local md_addr = 0x64 --アドレス0xC8を7bit表現で指定
    function write_i2c_command(addr, data1, data2)
        res = fa.i2c{ mode="start", address=addr, direction="write" }
        res = fa.i2c{ mode="write", data=data1 }
        res = fa.i2c{ mode="write", data=data2 }
        res = fa.i2c{ mode="stop" }
    end
    
    function sendMotorDrive(addr, reg, vset, data)
        local vdata = bit32.bor(bit32.lshift(vset, 2), data)
        write_i2c_command(addr, reg, vdata)
    end
    
    res = fa.i2c{ mode="init", freq="100" }
    sendMotorDrive(md_addr, 0x00, 0x00, 0x00)
    sleep(1000)
    sendMotorDrive(md_addr, 0x00, 0x3F, 0x01)
    sleep(5000)
    sendMotorDrive(md_addr, 0x00, 0x3F, 0x02)
    sleep(5000)
    sendMotorDrive(md_addr, 0x00, 0x00, 0x00)
    

    동작 확인



    위 루아 스크립트가 동작하고 모터 드라이버 DRV8830의 OUT1, OUT2에 약 -5V ~ 5V의 출력이 이루어집니다. 선로에 접속하면 철도 모형의 차량이 앞뒤로 움직입니다.
    이번에 사용한 DRV8830은 동작 전원 전압 범위가 2.75V~6.8V이며, 이번에는 5V를 입력으로 하고 있기 때문에 일반적으로 최대 12V 대응의 N게이지 차량에서는 저속 운전이 됩니다. 차량의 모터 상태에 따라 전압 부족으로 움직이지 않을 수도 있습니다.

    요약



    이상으로 FlashAir의 I2C 기능을 사용하여 모터 드라이버 DRV8830을 제어할 수 있었습니다. 지금까지 SPI-I2C 변환 IC의 신세를 지고 있던 곳을, 다이렉트에 접속할 수 있게 된 것은 대단하네요. 더욱 간편하게 I2C 디바이스를 이용할 수 있게 되었습니다.

    참고 자료



     FlashAir W-04에 대해서
    4세대 FlashAir W-04
    FlashAir 개발자를 위한 비공식 위키 - W-04 특설 페이지
    Lua 함수 참조
    Lua 함수 참조 - I2C

    모터 드라이버 DRV8830에 대해서
    DRV8830 데이터시트

    좋은 웹페이지 즐겨찾기