2013-07-22 6 views
1

스테퍼 모터를 제어하는 ​​USB 장치를하고 있습니다. 필자는 병렬 포트를 사용하기 전에이 작업을 수행했습니다. 이 포트는 현재 마더 보드에 존재하지 않기 때문에 필자는 장치와 PC (호스트)간에 USB 통신을 구현하기로 결정했습니다. 내 목표를 달성하기 위해 USB 모듈이 12Mbps 인 프리 스케일 마이크로 컨트롤러에 디바이스를 부여했다. 모든 바이트가 엔진을 이동해야하는 단계이기 때문에 주어진 시간에 USB 장치가 4 바이트 (각 모터 드라이버 당 하나씩)를 수신해야합니다. PC (호스트)에서 사용자의 응용 프로그램은 정보가있는 텍스트 파일을 처리하고 각 모터에 대해 특정 속도로 바이트를 전송하는 궤도 좌표를 만듭니다 (시간은 모터의 가속 및 속도를 얻기 위해 간단합니다).USB를 통해 스테퍼 모터를 제어하십시오.

각 바이트가 사용자 응용 프로그램에 의해 결정된 시간에 순차적으로 전송되기 때문에 병렬 포트를 사용하는 것이 쉬운 작업이었습니다.

풀 스피드 USB 프로토콜에 대한 약간의 연구를 한 결과 프레임이 1ms마다 전송된다는 것을 알 수있었습니다. 그러면 1 밀리 초마다 4 바이트 이상을 보낼 수 있지만 병렬 포트를 사용하는 것처럼 시간을 관리 할 수는 없습니다. 내 마이크로 컨트롤러는 프레임 당 최대 64 바이트를 전송할 수 있습니다 (전송 용지 유형 Control, Bulk, Int, Iso .. 기준).

질문 1 :

내가 매 1 밀리 초보다 빠르게 4 바이트 패킷을 보낼 수있는 방법으로 알고 싶은

?

질문 2 :

는 이전의 어떤 종류의 장치의 이러한 유형의 저를 조언 할 수 있습니까?

감사합니다.

+0

나는 USB 직렬 (벌크 구성)으로 충분하다고 생각합니다. 패키지를 높은 전송 속도 (예 : 1Mbps)로 보낼 수 있습니다. –

답변

1

리카르도 (Ricardo)와 마찬가지로 USB 직렬로 충분합니다.

전송 유형은 CDC 스택을 구현하고 SCI 수신기를 사용하여 PC 명령을 수신 대기하십시오. 그게 당신에게 당신의 필요를 충족시킬 수있는 버퍼를 줄 것입니다.

대기, 수신 버퍼,
  • 수신기를 사용하고 데이터 수신에
  • 을 중단 (등 전송)하여 SCI를 초기화하여 4 바이트 명령어 버퍼
  • 지우기로 이동

    4 바이트를 모두 사용하면 스테퍼가 꺼집니다! 4 바이트는 μs를 취해야합니다.

    프리 스케일에 문의하여 프로세서가 지원되는지 확인하십시오.

    http://cache.freescale.com/files/microcontrollers/doc/support_info/USB_STACK_RELEASE_NOTES_V4.1.1.pdf?fpsp=1

    도 당신이 시작하는 몇 가지 예제 코드가있을 수 있습니다.

    -Cheers 이런

  • 0

    I는 동일한 목표를 달성하고있다 (구동을/제어 CNC 기계)

    USB 장치 의 I/O 병렬 포트 단지 동기이다.연속 사용 대량 전송 하나의 파이프를 입력으로 사용하고 하나는 출력으로 사용합니다. 이 방법으로 ~ 70KHz 샘플 속도의 동기식 64 비트 병렬 통신을 구현할 수있었습니다. 그것은 내 MCU와 코드에 대한 한계 인 (i)4.27+(o)4.27 MBit/s 주변의 트래픽을 사용합니다. 더 큰 속도는 USB 이벤트 인터럽트로 인해 출력에 지터가 발생합니다.

    을 수행하는 방법에

    (MCU 측에서) 나는이 FIFO의 유입하는 하나 나가는 데이터를 가지고있다. 샘플 속도 주파수로 타이머 인터럽트가 발생했습니다. 그것에서 나는 입력을 읽고 그것을 첫번째 FIFO에 공급하고 다른 쪽에서 FIFO의 데이터를 읽고 그것들을 출력으로 보낸다. USB 작업이 처리 USB에서 전송 자체

    을에 전송하고 수신 데이터를 FIFO을 확인 (같은 인터럽트 내부)라고 그 위에

    나는 ATMEL AT32UC3A 칩을 선택 이 작업을 위해. 길고 통증이 심한 연구를 한 후에는 MCU은 모두 FIFO과 프로그램을위한 메모리가 충분하므로 추가로 IC을 필요가 없습니다. 그것에는 FPGA 패키지 (BGA는 옵션이 아닙니다)가 있습니다. 그것은 HS USB을 가지고 있습니다 (대부분 USB MCU당신과 같은입니다). 그것은 66MHz에서 실행됩니다. 그것은 많은 흥미로운 기능은 (과거에 함께 흥미로운 프로젝트를했다) 당신은 다음

    1. 비슷한 달성하려면 대략의 내가 ATMEL MCU의 그래서 과거

      에서 경험을 가지고 지원 대량 전송 시작 ​​(PC -> USB -> MCU -> output)

    2. 케이하지 않습니다

      를 필요한 경우 FIFO를 추가 이제 샘플 속도가 필요합니다. 이전 LPT80-196KHz에서 처리 할 수 ​​있습니다. 현대의 것들은 훨씬 더 느립니다 (바보 같고 슬프다).

    3. 측정 중요한 샘플 속도

      이를 위해 오실로스코프 또는 아주 좋은 청력이 필요합니다. 출력 데이터는 동기식이어야하므로 구멍이 생기지 않으며 지터가 없습니다.

      이러한 것이 있으면 샘플 속도를 낮춰야합니다. 광산 설정도 1MHz 샘플 속도를 처리 할 수 ​​있지만 USB가 지터가 나타났습니다 (때로는 USB 이벤트가 하나의 샘플을 전송하지 않음 ...). 따라서 안정적인 출력 만 70KHz에 도달했습니다.

    4. 다음 그들에게

      하지만 정상적으로 출력이 작동 된 경우에만 추가 입력도 필요합니다. 이 후에도 샘플 속도를 낮추는 것을 잊지 마십시오 ... 별도의 벌크 파이프FIFO을 입출력 용으로 사용하십시오.