2017/07/03

PyCharm 한번 써보자 with raspberry pi

라즈베리파이의 파이썬을 원격으로 사용해볼 목적으로 한번 사용해본다.






















jetbrains에서 PyCharm으로 들어가면 프로페셔널 버전과 커뮤니티 버전을 사용할 수 있는데, 커뮤니티 버전은 무료로 쓸 수 있지만 remote interpreter 기능을 사용할 수 없다. 프로페셔널을 사용해야한다.

설치하고 실행시키면 이렇게 나온다.

























Create New Project를 선택해보자.

























Location에 원하는 위치를 설정하고, interpreter의 톱니바퀴를 클릭하면 Add Remote가 뜬다. 여기로 들어가자.
























Host에 라즈베리파이의 IP address, User name에 pi, Password에 raspberry를 입력한다. 유저와 패스워드는 라즈베리의 디폴트값이므로 만약 다른걸로 변경했다면 그걸 입력해야한다.

Python interpreter path는 /usr/bin/python은 파이썬2다. 만일 파이썬3를 사용하려면 /usr/bin/python3을 입력하면 된다.

SSH를 사용한 PC와 라즈베리파이의 연결이므로 라즈베리의 SSH를 enable 시켜줘야 한다.































이제 프로젝트를  Create 해보자.





































File -> New를 선택해서 파일을 하나 만들자. 난 hello_raspberry.py 파일을 만들었다.





















이 파일을 라즈베리로 업로드하도록 설정해보자.
Tools -> Deployment -> Configuration으로 가보자.

































왼쪽 상단의 녹색 + 를 클릭하자.

























Name은 raspberry pi로 하고 Type은 SFTP로 정했다.
OK 하면 다음 화면이 뜬다.

































SFPT host에 라즈베리의 IP를 입력하고 User name과 Password를 입력 후 Test SFTP connection을 클릭하면 설정에 문제없을 경우 Successfully connected to xxx.xxx.xxx.xxx 라고 팝업이 뜬다. 만일 그렇지 않을 경우 다시 설정을 확인해보자.

Mappings 탭으로 가면 로컬파일이 라즈베리의 어디에 저장될지 설정할 수 있다.

































경로와 파일명까지 정확하게 적어줘야한다.

Deployment 설정이 끝났으니 이제 제대로 파일이 업로드 되는지 확인해보자.
Tools -> Deployment -> Upload to raspberry pi 를 선택하자.
























파일 업로드는 문제없다.

Run으로 실행해봤는데...이게 제대로 실행된건지 알수가 없다. 라즈베리 화면엔 아무것도 안떠서...

GUI 간단한걸로 해보자.

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
def build(self):
return Button(text='Hello World')

TestApp().run()


kivy 테스트 코드를 돌려볼련다.





Deployment의 mappings 설정을 hello.raspberry_kivy.py로 바꿔준 다음, 업로드 후 Run 해보자.







되네.
















2017/07/01

L6470PD



Features
- operating voltage : 8 ~ 45V
- 7.0A out peak current(3.0A r.m.s.)
- Low Rds(on) Power MOSFETs
- Programmable speed profile and positioning
- Programmable power MOS slew rate
- Up to 1/128 microstepping
- Sensorless stall detection
- SPI interface
- Low quiescent and standby currents
- Programmable non-dissipative overcurrent protection on high and low-side
- Two-levels of overtemperature protection

Block diagram
























약간 특이한 점이 있다면 모션 관련 커맨드가 내장되어 있다.
레지스터를 세팅하거나 읽어오는 커맨드도 있고, 그걸 사용하는거 외에 레지스터에 접근할 수 있는 방법은 없다.

STCK로 펄스를 입력해서 구동시키는 Step-clock mode를 사용하려고 해도 내부 레지스터 세팅을 바꿔줘야 하므로 SPI 인터페이스는 꼭 연결되어 있어야 한다.

SPI는 최대 5MHz로 구동되며 8비트 기반이다. 아래 다이어그램을 보는게 이해가 빠를터.


















여러 바이트를 전송할 경우 각 바이트 사이에 CS 핀을 High로 올리고 적어도 tdisCS  (800ns)이상 유지시켜줘야 한다.


The L6470 controls the phase current applying a sinusoidal voltage to motor windings.
Phase current amplitude is not directly controlled but depends on phase voltage amplitude, load torque, motor electrical characteristics and rotation speed.

모터 스펙에 따라 아래 레지스터를 설정해야 할것이다.

KVAL_HOLD : 모터 정지상태의 KVAL
KVAL_RUN : 모터 정속 상태의 KVAL
KVAL_ACC : 모터 가속 상태의 KVAL
KVAL_DEC : 모터 감속 상태의 KVAL




















Motor supply voltage compensation
The sinewave amplitude generated by the PWM modulators is directly propotional to the motor supply voltage(Vs). When the motor supply voltage is different from its nominal value, the motor phases are driven with an incorrect voltage. The L6470 device can compensate motor supply voltage variations in order to avoid this effect.

The motor supply voltage should be connected to the integrated ADC input through a resistor divider in order to obtain Vreg/2 voltage at the ADCIN pin when Vs is at its nominal value.


















The ADC input is sampled at fs frequency, which is equal to PWM frequency.

Motor supply voltage compensation can be enabled setting high the EN_VSCOMP bit of the CONFIG register. If the EN_VSCOMP bit is low, the compensation is disabled and the internal analog-to-digital converter is at the user's disposal; sampling rate is always equal to PWM frequency.
어떻게 동작한다는건지 모르겠다...



STM32F103RCT6의 핀할당은 위 그림과 같다.

L6470을 두개 연결해놨다.
 
첫번째 L6470 인터페이스








두번째 L6470 인터페이스


MISO, MOSI, SCK 만 공통이고 나머지는 모두 따로 할당되어야 함.

SPI 설정은 아래와 같다


나머지 핀 설정은 아래와 같다.
            GPIO output level   GPIO mode          Maximum output speed  
SCS_1/2 :  High              Output Push Pull     Low
SR_1/2  :  High              Output Push Pull     Low
SW_1/2  :  High              Output Push Pull     Low 

           GPIO mode      GPIO Pull-up/Pull-down
BS_1/2    :  Input mode      No pull-up and no pull-down
FLAG_1/2 :  Input mode      No pull-up and no pull-down 

STCK는 일단 사용하지 않는다.







대충 세팅해서 함 돌려봤다.