프로젝트의 마이크로 컨트롤러에 대한 요구 사항 목록을 어떻게 제시합니까? 그러면 적합한 마이크로 컨트롤러를 어떻게 찾을 수 있습니까?


20

Arduino MEGA2560에서 eBike 제어 프로젝트를 진행하고 있습니다. 이 프로그램은 3 개의 PID 제어 루프, 배터리 용량 제어 루프 (조회 테이블 기반 보간), 속도계 (리드 스위치 기반 샘플) 및 LCD 화면을 실행하여 정보를 표시합니다. 입력은 배터리 전압, 전류 및 사용자 스로틀 입력뿐만 아니라 디지털 입력 : 속도계 (리드 스위치) 온 / 오프 신호의 3 가지 아날로그 신호입니다. 현재이 모든 것이 "긴"산술에서 실행되면 Arduino는 초당 10 개의 루프를 완료합니다. TFT LCD 스크린은 엄청난 양의 계산력을 필요로하므로,이를 영숫자 스크린으로 대체 할 생각입니다.

출력은 모터 컨트롤러로가는 아날로그 스로틀 신호, LCD 화면 및 아날로그 신호가 필요한 다른 장치로 구성됩니다. 따라서 ADC 변환기는 필수적이며 현재 RC 저역 통과 필터와 함께 Arduino PWM 출력을 사용하고 있지만 DAC는 매우 유용합니다. 마찬가지로, 프로세서를 방해하지 않고 디지털 및 아날로그 신호를 읽을 수있는 용량이 클 것입니다.

잠재적으로 이것으로 소비자 제품을 만들고 싶습니다. 따라서 초당 최소 100 샘플 (Arduino가 달성하는 것의 10 배)을 줄 수있는 다른 마이크로 컨트롤러를 사용하여 자체 플랫폼을 구축하고 싶습니다. 또한 부동 소수점을 피하기 위해 계산에서 긴 변수를 사용하고 결과적으로 16 비트보다 큰 숫자를 사용하므로 32 비트 MCU가 좋은 생각이라고 가정합니다. 또한 부동 소수점 계산을 수행 할 수있는 MCU는 코드의 수학을 단순화하는 데 흥미로울 수 있습니다.

결국 이러한 요구 사항을 충족하고 Arduino 환경에서 신속하게 전환 할 수있는 MCU를 찾는 방법을 잘 모르겠습니다. 이러한 MCU를 찾는 방법에 대한 지침은 대단히 감사하겠습니다!


1
필자는 반드시 권장 부품이 아니라 방법이나 플랫폼 또는 필요한 플랫폼을 찾는 방법에 대한 지침 만 필요합니다.
Eliott W

5
이것은 이전 질문보다 훨씬 낫지 만 여전히 매우 광범위하며 요구 사항의 일부 점이 명확하지 않습니다. 예를 들어 "프로세서 중단없이"는 무엇을 의미합니까? 폴링 된 I / O도 실제로하고 싶지 않다고 추측합니다. 또한 각 샘플 세트에서 얼마나 많은 컴퓨팅을 수행해야하는지보다 정확하게 처리해야합니다.
Dave Tweed

1
정수 수학 사용을 고려해야합니다. 옳은 일입니다.
Scott Seidman


4
길거나 짧은 정수 수학은 부동 소수점보다 훨씬 빠릅니다. 프로세서의 "기본"비트 깊이보다 긴 정수 연산도 느려집니다. 따라서 32 비트는 "DSP"유형 장치 중 하나 인 아주 좋은 생각입니다.
pjc50

답변:


18

(이것은 일반적인 안내서입니다. 코드 최적화의 혜택을 누릴 수도 있지만이 웹 사이트의 범위를 벗어납니다.)

1 단계 : 거친 규모, 예산, 공급 업체

다음 중 하나를 선택하십시오.

  • 컴퓨터 (Raspberry Pi, Beagleboard, PC104 보드, Intel Edison 등). 범용 운영 체제를 부팅하고 많은 처리 능력을 가지고 있습니다. 더 비싸고 전력이 부족합니다. $ 10- $ 100.

  • 큰 MCU. ARM Cortex-A / PIC32 / dsPIC / AVR32 / TI C 시리즈 DSP 등 적절한 컴퓨팅 성능, OS 옵션. ~ $ 5.

  • 소형 MCU. Cortex-M / PIC16. 진정한 OS를위한 공간이 충분하지 않고 가벼운 작업 스케줄러 일 수도 있습니다. ~ $ 2.

  • 작은 MCU. 전력 소비의 모든 마지막 마이크로 암페어에 관심이있는 애플리케이션에만 해당됩니다. ~ $ 1 이하

또한이 단계에서 어떤 벤더와 툴체인을 좋아하고 싫어하는지 고려해야합니다. 회로 내 디버깅 장치 및 IDE와 같은 비용을 살펴보십시오.

2 단계 : 최소 주변 장치

USB와 같은 것이 필요합니까? PCI? HDMI? SATA? 비정상적으로 빠른 ADC 또는 DAC? USB는 상당히 광범위하지만 거의 모든 "작은"또는 "작은"범주에는 이러한 범주가 없습니다.

3 단계 : 프로토 타입

필요한 경우 무작위로 위의 기준을 충족시키는 것을 선택 하고 시작하고 그것이 가능한지와 필요한 공간 / 처리 능력을 찾으십시오. 이미이 중 일부를 수행했습니다. C로 작성하면 많은 논리를 이식 ​​할 수 있어야합니다.

프로토 타입이 완성되면 "이것이 필요하지만 X가 더 필요합니다."라고 말하고 결정을 내 리도록하십시오.

4 단계 : 축소

일반적으로 CPU 제품군의 가장 큰 (가장 플래시 및 RAM) 멤버로 시작하고 응용 프로그램의 v1을 작성한 다음 더 작고 저렴한 것을 선택하는 것이 더 쉽습니다. 또한 적은 리소스에 소프트웨어를 설치하는 기술에 시간을 할애 할 수 있습니다. 가치있는 것은 당신이 만들 단위 수에 달려 있습니다.


14
0 단계 : 툴 체인 (펌웨어 개발 환경) 귀하에게 적합한 개발 환경을 찾으십시오. 이기는 곳입니다. 완벽하게 맞는 실리콘을 가지고 있지만 어떤 이유로 든 펌웨어 개발 환경을 작동시킬 수는 없더라도 프로젝트는 시작되지 않습니다. (사례 : 아두 이노 IDE는 아두 이노 기반 프로토 타입
Nick Alexeev

8
Cortex-M을 "작은 MCU"로 분류하고 PIC32 / AVR32를 "큰 MCU"로 분류하는 것은 약간 불행한 것 같습니다. 개인적으로 PIC32 / AVR32를 사용하지는 않았지만 사양 범위를 간략히 살펴보면 모두 동일한 브래킷에 있어야한다고 말하고 싶습니다. (> 200MHz에서 실행되고 많은 메가 바이트의 플래시와 0.5 메가 바이트 이상의 RAM을 가진 Cortex-M MCU가 있습니다)
Aleksi Torhamo

13

좋은 프로젝트입니다. 여기에 몇 가지 힌트가 있지만 모든 프로젝트에 대해 이것을 일반화하기는 어렵습니다.

계산 요구 사항으로 시작

이것이 필요한 코어의 종류와 MCU의 일반적인 성능을 알려줍니다. 주변 장치와 달리 외부 구성 요소를 사용하여 확장 할 수 없으므로 분명히 시작하는 것이 좋습니다.

첫째, 루프 내에서 큰 정수로 무거운 수학 연산을 사용하는 것 같습니다. 따라서 제안한 바와 같이 여기서는 32 비트가 유용하므로 ARM이 이상적인 후보가됩니다. 작동 주파수에 관해서는 : 현재 Arduino MEGA2560 (16MHz에서 실행 중이라고 가정)을 사용하며 10 루프 / 초를 만들 수 있습니다. 100 루프 / s를 달성하려면 100MHz 이상의 범위에서 Cortex-M3 / M4를 사용하는 것이 좋습니다 (대략 추정). Cortex-M4F에는 부동 소수점 단위가 있습니다.

우리는 이미 선택 범위를 좁혔습니다.

메모리 요구 사항

이것은 쉬운 일입니다. 프로토 타입에 대해 RAM / 플래시 범위가 가장 많은 MCU를 선택하십시오. 프로토 타입의 유효성을 검사 한 후 RAM / 플래시가 충분한 동일한 범위에서 MCU로 전환하면 정확한 요구 사항을 알 수 있습니다.

귀하의 응용 프로그램에 놀라운 양의 메모리가 필요하다고 생각하지 않습니다.

이제 주변 장치

ADC가 절대적으로 필요합니다. 우리 가보고있는 범위의 모든 MCU에는 일부가 있으므로 유용한 기준이 아닙니다. 디지털 입 / 출력도 마찬가지입니다. 단, 많은 수의 디지털 입력 / 출력이 필요한 경우를 제외하고는 그렇지 않습니다.

DAC가 필요한 것 같습니다. 그러나 이것은 실제로 쉽게 찾을 수 없으며 후보자를 너무 좁힐 것입니다. 따라서 우리는 그 요구 사항을 유지하지 않으며 PWM과 저역 통과 (실제로 허용 가능한)를 유지할 것입니다.

LCD를 제외한 모든 통신 인터페이스는 언급하지 않습니다. 어쨌든, 모든 MCU에는 I2C / SPI / UART / ...가 필요합니다.

LCD

MCU에 완전히 다른 요구 사항을 적용하는 다양한 솔루션이 있기 때문에이 방법은 까다 롭습니다. 그러나 MCU에 따라 LCD를 선택하지 마십시오. 제품에 원하는 LCD를 선택한 다음 효율적으로 구동 할 MCU를 선택하십시오.

  • 문자 LCD를 원한다면 MCU에 대한 가장 쉽고 제한이 적은 것은 직렬 인터페이스 (SPI)를 통해 대화하는 것입니다. 이렇게하면 너무 많은 PIN을 사용하지 않고 더 작거나 저렴한 MCU를 사용할 수 있으며 속도는 문제가되지 않습니다.
  • 그래픽 TFT LCD가 필요한 경우 : 작은 경우에도 직렬 링크가 적합 할 수 있습니다. 그러나 320x200 이상에서는 멋진 그래픽 인터페이스를 원한다면 병렬 인터페이스와 통신하기를 원할 것입니다. 이 경우 일부 GPIO를 사용하지만 (제어 라인을 비트 뱅킹해야하기 때문에 MCU에 더 많은 부하를 가할 것입니다) 또는 전용 LCD 인터페이스가있는 MCU를 선택합니다 (종종 외부 메모리 인터페이스). 마지막으로 MCU 선택에 대한 강력한 제약이 있지만 다른 강력한 제약은 없습니다.

이제, 당신은 선택

ST Micro / NXP / Atmel 웹 사이트로 이동하여 MCU 선택 도구를 사용하십시오. 데이터 시트를 읽는 데 많은 시간을 소비하게됩니다. 이번엔 낭비되지 않습니다. 이 프로젝트에 특별히 사용하지 않더라도 여기서 배울 내용이 유용 할 수 있습니다.

이 시점에서 실제로 필요한 PIN 수를 살펴보고 선택한 MCU 후보의 멀티플렉싱 체계를 확인하여 필요한 모든 PIN 기능을 사용할 수 있는지 확인해야합니다. 분명히, 비용 / PCB 부동산 이유로 인해 요구 사항을 충족하는 핀 수가 가장 적은 MCU를 사용하고 싶을 것입니다.

Mouser / Digikey의 가격 / 이용 가능 여부를 확인하십시오. 그러나 여기서 특별히 비싼 것이 필요하지 않습니다. 아마 5 € 정도.

LCD 제어에 관한 마지막 것

LCD 업데이트가 주요 루프의 일부인 것 같습니다. 해서는 안됩니다. 특히 초당 100 번 반복하는 경우 쓸모가 없습니다. 제어 루프가 모든 것을 계산하고 각 반복에서 모터 명령을 조정하지만 메모리의 어딘가에 표시되도록 값을 업데이트하십시오. 그런 다음 더 중요한 것이 없을 때 우선 순위가 낮은 다른 루프가 사용자에게이 정보를 표시하도록합니다.

예, 이상적으로는 작업 전환과 작업이 필요합니다. 실제 OS (실제 FreeRTOS, Coocox OS, Nuttx 조회)는 매우 작고 Cortex-M에서 주로 사용되며 필요한 멀티 태스킹 메커니즘을 제공합니다.


당신의 포괄적 인 답변에 대단히 감사합니다! ARM Cortex MCU가 모두 3.3V에서 작동한다는 것을 알고 있습니다. 스로틀 신호는 1 ~ 5V 사이로 조정해야합니다. ARM 컨트롤러를 사용하려면 MCU에서 3.3V로 캡핑되는 전압을 승압하는 방법을 찾아야한다고 생각합니다.
Eliott W

예. 스로틀 신호는 아날로그 출력입니까? 이 경우 opamp를 사용하여 증폭 할 수 있습니다.
dim

"실제 OS"를 요구하는 마지막 문장에 동의하지 않습니다. 기성품 솔루션의 양에 달려 있다고 가정합니다. 비즈니스 로직을 떨어 뜨릴 수있는 장치를 원하고 장치를 사용하기 시작하는 경우, 완전한 OS (Windows 나 Linux와 같은 것을 의미 할 필요는 없습니다!)는 확실히 유용합니다.
CVn

1
@ MichaelKjörling은 물론 Linux와 같은 원격조차 의미하지 않았습니다. 그러나 오히려 FreeRTOS, Coocox OS 또는 Nuttx와 같은 것입니다. 이것들은 아주 작지만 실제 OS로 간주 합니다. 실제로 베어 메탈 에서이 작업을 수행하는 데 더 많은 시간이 걸리고 디버깅하는 데 어려움이 있고 유연성이 떨어집니다. Arduino 환경 (전문가와는 거리가 멀지 만)은 작업 메커니즘을 제공하지 않는 것 같습니다 (따라서 실제 OS 로 간주하지 않습니다 ).
dim 흐리게

1
아 글쎄, 나는 "진짜"부분을 잘못 읽었다. 때때로 여기에 오는 우리 외계인의 이익을 위해, 당신은 당신의 대답에서 그 부분을 분명히하는 것을 고려할 수 있습니다.
CVn

4

이는 여러 가지 (주관적인) 접근 방식을 사용하여 올바르게 대답 할 수있는 광범위한 주제입니다.

또한 스택 교환 형식은 문제에 대한 솔루션을 설계하는 데 적합하지 않습니다. 예를 들어, 사람들이 하드웨어를 설계하도록하는 일은 거의 없습니다. 오히려 하드웨어 설계를 제안하고 그것에 대해 질문하십시오.

그건 ...

변경할 수없는 프로세서의 기능으로 시작하십시오. 속도 및 메모리 (해당되는 경우) 크기 인터럽트가 필요한지 그리고 인터럽트 처리가 얼마나 복잡한 지 조사하십시오.

ADC 또는 DAC와 같은 주변 장치 지원이 필요한 경우 상황이 더 복잡합니다. 이러한 기능이 프로세서에 내장되어 있거나 프로세서 외부에 있어야합니다. 가격, 정확성 및 소음은이 결정의 요소입니다.

외부 주변 장치를 지원해야하는 경우 필요한 직렬 통신 유형을 고려하십시오. 외부 하드웨어에는 SPI, I2C 또는 다른 유형의 UART가 필요할 수 있습니다. 데이터 전송률이 높으면 직렬 통신 포트와 연관된 DMA 기능이있는 프로세서를 찾는 것이 가장 좋습니다.

마지막으로, 이것이 임베디드 프로세서 응용 프로그램 인 경우 (일반적으로 작업 전용 프로세서를 의미 함) 요구 사항을 여러 그룹으로 분류하고 각각에 프로세서를 할당하는 것을 고려하십시오. 예를 들어, GUI 디스플레이 프로세서에는 ADC 기능이 필요하지 않을 수 있습니다. 문제를 해결하기위한 이러한 객관적인 접근 방식은 소프트웨어에서 성공적으로 입증되었으며 프로세서 가격 인하와 함께 하드웨어에도 적용될 수 있습니다.

실제로이 방법은 반복적입니다. 즉, 많은 프로젝트는 하나의 프로세서로 시작하여 하드웨어 및 / 또는 소프트웨어 문제가 발생하거나 프로젝트 범위가 변경 될 때 다른 프로세서를 교체합니다.


컴파일러보다 어떤 유형의 숫자를 예상해야하는지 더 잘 판단 할 수 있습니다. float를 사용하는 일반적인 접근 방식을 피할 것입니다. 예를 들어, 부동 결과는 다른 플랫폼에서 동일하지 않을 수 있습니다! 정수 산술을 사용하고 필요에 맞게 솔루션을 조정합니다.
st2000

3

나는 도구 비용을 언급하는 사람을 보지 못했습니다. 우리 회사는 TI CC2541을 선택하고 $ 4k IAR 컴파일러로 컴파일 된 것을 발견했습니다. 확실히 취미 애호가에게는 쇼 스토퍼입니다. 또한 프로그래머. 20 달러 이상이 될 수 있습니다. 저렴한 도구는 이제 더 일반적인 것으로 보이므로 아마도 곧 과거의 일이 될 것입니다.

또한 직접 리플 로우하면 TQFP와 같은 패키지가 BGA보다 쉽습니다. 큰 BGA는 개인적인 경험을 바탕으로 제대로하기가 어렵습니다.


2

제품이 상대적으로 가격에 민감하고 적절한 개발 자금이있는 경우 여러 평가 보드를 조달하고 각각의 코드를 프로파일 링하여 아이디어를 얻을 수 있습니다. 코드가 이식 가능한 C로 작성된 경우에는 매우 간단합니다. 마이크로 외에도 IAR 또는 Keil과 같은 완전한 IDE의 비용을 줄이기 전에 데모 버전으로 툴체인을 평가하게됩니다. 경우에 따라 하드웨어없이 IDE에서 병목 코드를 직접 프로파일 링 할 수 있습니다.

개발 비용을 엄격하게 제한하는 경우 개발 설정에 비용이 많이 들지 않는 것을 찾아야합니다.

예를 들어, ST에는 <100 달러 미만의 멋진 컬러 디스플레이를 갖춘 ARM Cortex M7 평가 보드가 있습니다. DSP 기능을 갖춘 FPU가있어 100Hz가 아닌 100kHZ에서 PID 루프를 쉽게 실행할 수 있습니다. 해당 디스플레이가 우선 순위가 아니면 과잉 일 것입니다.

FPU가없는 저렴한 프로세서를 목표로하는 경우 PID 코드를 완성 된 형태로 프로파일 링하는 것이 좋습니다. 모든 스케일링 및 선형화 및 캘리브레이션 계수가 처리 시간 측면에서 더해질 수 있으므로 포함되어 있는지 확인하십시오.

주변 장치 및 관련 미들웨어 품질 및 가용성 (및 라이센스 조건)이 선택에 크게 영향을주는 경우가 많습니다. 썸 드라이브 또는 빠른 SD 인터페이스에 저장하기 위해 BT 또는 Wifi 또는 USB 호스트 모드 및 FAT 파일이 필요한 경우 이러한 요소가 모두 중요한 요소입니다. 일부 칩에는 온보드 LCD 컨트롤러와 디지타이저 컨트롤러가있어 비교적 저렴한 TFT 패널을 사용할 수 있습니다. 때때로 높은 라이센스 비용을 간과하지 마십시오.

필요한 프로그램 메모리, 처리 속도 및 주변 장치 (FPU 포함)에 대한 정보가있는 경우 데이터 시트로 드릴 다운하기 전에 배포자에서 파라 메트릭 검색을 수행 할 수 있습니다. 스루 홀 패키지, 내부 DAC, 내부 이더넷 PHY, FPU 등 너무 제한적인 사항이있을 수 있습니다. 이것들 중 어느 것도 필요하지 않을 것이며, 그들은 당신의 선택을 너무 일찍 제한 할 수 있습니다.

행운을 빕니다.이 작업을 제대로 수행하려면 많은 작업이 필요합니다. 내 경험상 고객이 예상치 못한 것들을 필연적으로 요구하고 다시 시작하지 않고 공급할 수있는 여분의 용량을 원하기 때문에 신제품에 너무 가까이 다가가는 것은 잘못된 경제입니다. 반면에 제품이 너무 비싸면 사업을 유지하기에 충분한 마진으로 충분히 판매 할 수 없습니다.


1

Arduino, PIC 마이크로 컨트롤러, FPGA 등과 같은 다양한 플랫폼을 살펴볼 수 있습니다. 나는 과거에 Arduinos와 함께 일했으며 74kS / s를 달성 할 수있는 ADC 포트를 가지고 있습니다. 초당 100 개의 샘플이 매우 느리고 어떻게 찾았는지 궁금합니다. 반면에 SPI, CAN, I2C 또는 UART와 같은 인터페이스가 필요한지 자문 해보십시오. 그들은 모두 자신의 이익을 가질 수 있으며 하나 이상의 노예와 대화 할 것인지 스스로 생각하는 것입니다. 마지막이지만 아마도 가장 중요한 단계는 사용해야하는 마이크로 컨트롤러의 핀 수를 추측하는 것입니다.

"프로세서를 방해하지 않으면 서 아날로그-디지털 신호를 읽을 수있는 능력이 뛰어납니다." 데이터를 순환시키고 잠재적으로 데이터 처리 속도를 늦추는 외부 또는 내부 버퍼를 처리하고 싶지 않다는 말로 추측 할 수 있습니다. 맞습니까? 그렇다면 더 많은 프로그래밍이 필요하지만 프로세서는 일반적으로 초당 100 샘플의 속도를 처리 할 수 ​​있습니다. 클럭, 샘플링 속도 및 나머지를 프로그래밍하는 것은 사용자의 책임입니다.

또한 샘플링 데이터를 지속적으로 유지하고 플래그가 발생할 때 다른 작업을 수행하려면 프로그램의 인터럽트를 고려하십시오.


2
당신이 요점을 놓친 것 같아요. 그는 Arduino에 프로토 타입을 만들었습니다. 샘플링이 느리지 않습니다. 제어 루프가 느립니다. 그는 Arduino의 부동 소수점을 사용하여 3 개의 PID 컨트롤러를 계산하므로 남극의 겨울에 당밀보다 느립니다. 따라서 샘플링은 문제가되지 않습니다. 비효율적 인 코드입니다.
JRE

당신 말이 맞아요
12Lappie

예, 문제는 루프가 부동 소수점이 아닌 긴 산술에 있지만 Arduino가 루프 당 한 번 샘플을 가져 가면 샘플링 속도가 매우 작습니다 (현재 초당 20 샘플). .
Eliott W
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.