안녕하세요,
외부 트리거를 이용한 analog input에 문제가 있어서 찾아왔습니다.
NIDAQ를 이용하기 시작한지 얼마 되지 않아 엉뚱한 질문이 될 수도 있는 점 양해 부탁드립니다.
Python을 이용하여 해당 작업을 하려고 합니다. (USB-6212, windows 10, python 3.7.6, NI MAX 18.5)
function generator에서 나오는 sync 신호(TTL)로 트리거를 해 주려 하구요.
analog 신호는 같은 function generator를 사용하여 연습 삼아 적당히 sine wave(+-4V, 100Hz)를 만들어 ai0에 넣어줬습니다(BNC 케이블 이용).
코드는 아래와 같은 순서로 짜 보았습니다.
먼저 task를 만들고, AI voltage 채널 생성, sample clock timing 설정을 해 주었고,
이후에 task 시작하여 read 해 주면 입력해 준 sine wave를 볼 수 있었습니다. (이후 task close, clear)
하지만 task 시작 전에 아래와 같이 trigger를 넣어주면 analog input을 볼 수 없습니다.
TTL 신호는 analog channel에 넣어서 잘 나오는 것을 확인해 보았고, PFI0에서도 보고 싶었지만 (별도의 task 및 digital channel 생성, sample clock 설정, task 시작 후 read) PFI0에서는 신호를 넣어줘도 0만 읽히고 있습니다.
해결되었습니다! 솔루션으로 이동.
하나 잊고 쓰지 않은 것이 있어서 추가합니다.
C++ 등 다른 언어로 알려주시면 제가 python으로 번역할 수 있을 것 같으니 언어에 개의치 마시고 알려주세요 🙂
그리고 질문을 여기 요약하자면,
제가 하고 싶은 일은 TTL 신호의 하강엣지에서 트리거하여 data acquisition 시작(AI), TTL 신호의 상승엣지에서 data acquisition 끝내기 입니다.
감사합니다.
날짜: 03-03-2020 04:56 AM
지금 사용하고 계신 트리거 기능은 Start Trigger를 사용하고 계시네요.
Start Trigger는 처음 trigger가 감지되면 태스크를 시작하도록 합니다.
말씀해주신 기능을 이용하려면 Pause Trigger를 사용하고, dig_lvl_when
파라미터를 high로 설정하면 될거같네요.
Pause Trigger의 기능 설명
Pause Trigger python 함수 설명
https://nidaqmx-python.readthedocs.io/en/latest/pause_trigger.html
03-04-2020 02:48 AM - 편집 03-04-2020 02:55 AM
안녕하세요, 답변 감사합니다.
해당 문제는 우선 DAQmxCfgDigEdgeStartTrig에서 trigger source 설정 시 '/Dev1/PFI0' 같은 식으로 Dev# 앞에 슬래쉬를 붙여 해결하였습니다.(기존에는 슬래쉬 없이 'Dev1/PFI0'와 같이 설정함)
voltage 채널을 만들 때는 슬래쉬가 없어도 괜찮았었는데 이상하네요.
답변 주신 내용도 곧 확인해 보겠습니다. 제가 원하는 기능은 pause trigger를 사용하는 것이 맞을 것 같네요.
감사합니다. 🙂